Skip to main content
GET
/
marketplace
/
merchants
/
{merchantId}
/
kyc
curl -X GET "https://api.khaime.com/api/v1/partner/marketplace/merchants/123/kyc" \
  -H "X-API-Key: pk_sandbox_your_key"

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.

Get Merchant KYC Status

Returns the current KYC verification status and latest submission details for a sub-merchant in your marketplace. This endpoint works for both Khaime KYC (African markets) and Stripe Connect (other markets).

Path Parameters

merchantId
number
required
The ID of the sub-merchant.

Response

{
  "success": true,
  "message": "KYC status retrieved",
  "data": {
    "provider": "khaime",
    "status": "approved",
    "verification_status": "kyc_approved",
    "can_accept_payments": true,
    "can_receive_payouts": true,
    "khaime_submission": {
      "id": 42,
      "status": "approved",
      "business_type": "individual",
      "legal_name": "Amara Osei",
      "id_country": "NG",
      "bank_name": "Access Bank",
      "bank_account_number": "0123456789",
      "bank_account_name": "Amara Osei",
      "settlement_currency": "NGN",
      "country_mismatch": false,
      "submitted_at": "2026-04-10T12:00:00.000Z",
      "reviewed_at": "2026-04-10T14:30:00.000Z",
      "rejection_reason": null
    },
    "stripe_connect": null
  }
}

For Stripe Connect Merchants

{
  "success": true,
  "message": "KYC status retrieved",
  "data": {
    "provider": "stripe",
    "status": "approved",
    "verification_status": "kyc_approved",
    "can_accept_payments": true,
    "can_receive_payouts": true,
    "khaime_submission": null,
    "stripe_connect": {
      "account_id": "acct_1234567890",
      "charges_enabled": true,
      "payouts_enabled": true,
      "requirements": {
        "currently_due": [],
        "eventually_due": [],
        "past_due": []
      },
      "onboarding_url": null
    }
  }
}

Response Fields

Top-Level Fields

FieldTypeDescription
providerstringKYC provider: khaime or stripe
statusstringNormalized status: not_started, pending, approved, rejected, action_required
verification_statusstringLegacy status with kyc_ prefix (see values below)
can_accept_paymentsbooleanWhether the merchant can process charges
can_receive_payoutsbooleanWhether the merchant can receive payouts

verification_status Values

ValueDescription
kyc_not_startedNo KYC has been submitted yet
kyc_pending_reviewSubmission is awaiting review
kyc_approvedKYC approved — merchant can receive payouts
kyc_rejectedSubmission was rejected — resubmission required
kyc_additional_info_requestedReviewer has asked for more information
kyc_revokedPreviously approved KYC has been revoked

khaime_submission Object (African Markets)

Present when the merchant uses Khaime KYC (NG, GH, ZA, KE). This is the single source of truth for KYC and bank details.
FieldTypeDescription
idnumberKYC submission ID
statusstringSubmission status: pending_review, approved, rejected, additional_info_requested, revoked
business_typestringindividual or registered_business
legal_namestringLegal name provided
id_countrystringCountry of identity document
bank_namestring | nullBank name
bank_account_numberstring | nullAccount number
bank_account_namestring | nullAccount holder name
bank_sort_codestring | nullSort code if applicable
settlement_currencystringCurrency for payouts
country_mismatchbooleantrue if identity and bank countries differ
submitted_atstringISO 8601 submission timestamp
reviewed_atstring | nullISO 8601 review timestamp
rejection_reasonstring | nullReason for rejection

stripe_connect Object (Non-African Markets)

Present when the merchant uses Stripe Connect.
FieldTypeDescription
account_idstringStripe Connect account ID
charges_enabledbooleanCan accept payments
payouts_enabledbooleanCan receive payouts
requirementsobjectOutstanding Stripe requirements
requirements.currently_duearrayFields that must be collected now
requirements.eventually_duearrayFields needed eventually
requirements.past_duearrayOverdue fields (account may be restricted)
onboarding_urlstring | nullURL to resume onboarding if incomplete

Determining Readiness

Use the following logic to determine if a merchant is ready for charges:
const isReady = response.data.can_accept_payments && response.data.can_receive_payouts;

// Or check detailed status:
if (response.data.provider === 'khaime') {
  const isApproved = response.data.khaime_submission?.status === 'approved';
  const hasBankDetails = !!response.data.khaime_submission?.bank_account_number;
  const isReady = isApproved && hasBankDetails;
} else {
  const isReady = response.data.stripe_connect?.charges_enabled &&
                  response.data.stripe_connect?.payouts_enabled;
}

Error Codes

StatusErrorFix
401UnauthorizedInclude a valid X-API-Key header
403This endpoint is restricted to marketplace operatorsYour API key must belong to a marketplace operator account
404Active merchant relationship not foundThe merchant is not linked to your marketplace
curl -X GET "https://api.khaime.com/api/v1/partner/marketplace/merchants/123/kyc" \
  -H "X-API-Key: pk_sandbox_your_key"