Marketplace
Resubmit Merchant KYC
Resubmit a KYC application after rejection or resume Stripe onboarding.
POST
Documentation Index
Fetch the complete documentation index at: https://docs.khaime.com/llms.txt
Use this file to discover all available pages before exploring further.
Resubmit Merchant KYC
Resubmits a KYC application for a sub-merchant. This endpoint handles both Khaime KYC (African markets) and Stripe Connect (other markets) based on the merchant’s existing submission.How Resubmission Works
| Provider | When Allowed | What Happens |
|---|---|---|
| Khaime KYC | Status is rejected or additional_info_requested | Submit new documents; creates new submission |
| Stripe Connect | Anytime (with existing Stripe account) | Returns new onboarding_url to resume/update verification |
Path Parameters
The ID of the sub-merchant.
Request Body
For African Countries (Khaime KYC)
Same fields as Submit KYC. You can use either the structured format or legacy flat format. Provide complete data, not just changed fields.- Structured Format (Recommended)
- Flat Format (Legacy)
Core Fields
ISO 3166-1 alpha-2 country code. Must be one of:
NG, GH, ZA, KE.Type of account. One of:
individual, registered_business.Owner Object (Required)
Updated owner/individual information.
| Field | Type | Required | Description |
|---|---|---|---|
first_name | string | Yes | Owner’s first name |
last_name | string | Yes | Owner’s last name |
date_of_birth | string | No | Date of birth in YYYY-MM-DD format |
phone_number | string | No | Contact phone number |
email | string | No | Contact email address |
id_type | string | Yes | Document type: passport, national_id, drivers_license |
id_number | string | Yes | ID number (BVN, NIN, or passport number) |
id_document_url | string | Yes | URL to updated identity document image |
selfie_url | string | No | URL to selfie photo for liveness verification |
address | object | Yes | Owner’s residential address |
Business Object (Required for registered_business)
Required when
account_type is registered_business.| Field | Type | Required | Description |
|---|---|---|---|
legal_name | string | Yes | Registered business name |
trading_name | string | No | Trading/DBA name if different |
registration_number | string | Yes | Business registration number |
tax_id | string | No | Tax identification number |
business_type | string | No | One of: sole_proprietorship, partnership, llc, corporation, ngo, other |
website | string | No | Business website URL |
phone_number | string | No | Business phone number |
registration_document_url | string | Yes | URL to certificate of incorporation |
additional_document_url | string | No | URL to additional supporting document |
address | object | Yes | Business address |
Bank Account Object (Optional)
Updated payout bank account details.
*Either
| Field | Type | Required | Description |
|---|---|---|---|
country | string | Yes | Bank country code (e.g., NG, GH) |
bank_name | string | Yes* | Bank name from Get Supported Banks |
bank_id | string | Yes* | Bank UUID from Get Supported Banks |
account_number | string | Yes | Bank account number |
account_name | string | Yes | Name on the bank account |
bank_code | string | No | Bank code (if applicable) |
sort_code | string | No | Sort code (required for UK accounts) |
bank_name or bank_id is required.For Other Countries (Stripe Connect)
For Stripe Connect merchants, call this endpoint to get a fresh onboarding session. The merchant can then resume or update their verification on Stripe.When to use this: If the merchant didn’t complete onboarding, if their session expired, or if Stripe requires additional information.
URL to redirect the merchant after they complete Stripe onboarding. This should be a page on your platform.
URL to redirect the merchant if the Stripe onboarding link expires. Typically the same page that initiates KYC.
You don’t need to pass
country or other fields — the system uses the existing submission data to generate a new onboarding session.Response
African Countries (Khaime KYC)
Other Countries (Stripe Connect)
| Field | Description |
|---|---|
onboarding_url | Fresh URL to redirect the merchant to Stripe’s hosted onboarding |
client_secret | Fresh secret for Stripe Connect Embedded Components |
stripe_account_id | The existing Stripe Connect account ID |
Data Storage
All resubmitted KYC data is stored in the KycSubmissions table:| Field | Storage Location |
|---|---|
| KYC documents | KycSubmissions.id_document_url, selfie_url, etc. |
| Owner info | KycSubmissions.owner_info (JSON) |
| Business info | KycSubmissions.business_info (JSON) |
| Bank details | KycSubmissions.bank_info (JSON) + flat fields |
| Status | KycSubmissions.status |
| Stripe account | KycSubmissions.stripe_account_id |
Important: The
KycSubmissions table is the single source of truth. Legacy fields in Educatorportfolio are deprecated.Error Codes
| Status | Error | Fix |
|---|---|---|
400 | Can only resubmit after rejection or additional info request | Check status first — only Khaime KYC with rejected or additional_info_requested status can resubmit |
400 | No KYC submission found | Use Submit KYC for first-time submission |
400 | KYC is already approved | No resubmission needed — merchant is already verified |
400 | New KYC documents are required for resubmission | Include complete KYC data for Khaime KYC resubmit |
400 | Stripe account not found | Contact support — the Stripe Connect account is missing |
401 | Unauthorized | Include a valid X-API-Key header |
403 | This endpoint is restricted to marketplace operators | Your API key must belong to a marketplace operator account |
404 | Active merchant relationship not found | The merchant is not linked to your marketplace |
Related
- Get KYC Status — check before resubmitting
- Submit KYC — for first-time submissions
- Add Bank Account — add or update bank details separately
