Skip to main content
POST

Setup Merchant Payout

Configure payout for a sub-merchant. The country determines which payment infrastructure is used and what information is required. Once configured, the merchant’s baseline_currency is automatically set based on their country.
This is a required step before a sub-merchant can receive charges. Until payout is configured, any charge attempt with sub_merchant_id will be blocked. Check payout.charge_eligible on Get Merchant Details to confirm readiness.
For NGN (NG) merchants, the settlement_bank must be a bank name from Get Supported Payout Banks. Retrieve the list first to ensure a valid name is used.

Data Storage

All bank details are stored in the KycSubmissions table, which is the single source of truth for both KYC status and payout information. This endpoint creates or updates the KycSubmissions record for the merchant.

Path Parameters

merchantId
string
required
The ID of the sub-merchant to configure payout for.

Request Body

country
string
required
2-letter ISO country code (e.g., US, NG, GB). This determines the payout infrastructure and baseline_currency.

For African Countries (NG, GH, ZA, KE)

These countries use local bank transfers. Include bank account details:
settlement_bank
string
Bank name for the settlement bank. Required for NG, GH, ZA, KE. For NGN merchants, this must exactly match a name from Get Supported Payout Banks.
account_number
string
Bank account number. Required for NG, GH, ZA, KE.
account_name
string
Account holder name. Required for NG, GH, ZA, KE.

For Other Countries (US, GB, CA, EU, etc.)

These countries use Stripe Connect. The merchant must complete an onboarding flow:
email
string
Merchant’s email address. Required for non-African countries.
callback_url
string
required
The URL where the merchant will be redirected after completing (or exiting) Stripe’s onboarding flow. Required for non-African countries. This should be a page on your platform that handles the return from Stripe onboarding.
The callback_url is required for non-African countries. Without it, the merchant has no way to return to your platform after completing Stripe onboarding. Stripe uses this URL for both successful completion and when the merchant exits the flow early.

Response

African Countries (Immediate Setup)

When country is NG, GH, ZA, or KE, payout is configured immediately and bank details are stored in KycSubmissions:

Other Countries (Onboarding Required)

For international countries, the merchant must complete Stripe Connect onboarding:
When payout_ready is false, the merchant must complete Stripe onboarding using the provided client_secret or onboarding_url. Until they do, charge_eligible on Get Merchant Details will remain false and any charge with their sub_merchant_id will be blocked.

Where Data is Stored

Important: The KycSubmissions table is the single source of truth for all KYC and bank details. Legacy fields in Educatorportfolio (like educator_bank_name) are deprecated and no longer used.

Country to Currency Mapping

Error Codes

How funds are split at charge time

Once payout is configured, funds are automatically split every time a charge is made with this merchant’s sub_merchant_id: No manual disbursement step is needed. The split happens in real time when the payment clears.

Checking readiness before charging

After calling this endpoint, poll Get Merchant Details and check payout.charge_eligible:

Next Steps

After confirming charge_eligible: true:
  • For NGN/African merchants: charge_eligible is true immediately after this endpoint returns payout_ready: true. No further action needed.
  • For international merchants: charge_eligible becomes true only after the merchant completes Stripe onboarding via the onboarding_url returned in the response. Poll Get Merchant Details until charge_eligible flips to true.
Once ready: