Choose an integration
Options A and B never send passports or selfies to Apocor. The identity provider issues a share token; Apocor forwards that token to the card program.
Option C is the exception: you upload JPEG/PNG/WEBP/PDF images to a short-lived URL. Apocor stores them only long enough to submit them to the card program.
Get your integration settings
cURL
Test vs live (same host): both use
https://api.apocor.ai. Test keys get sumsubWebhookUrl → /v1/webhooks/sumsub-sandbox; live keys → /v1/webhooks/sumsub. Register the Sumsub sandbox app against the sandbox path and the Sumsub production app against the live path.Sumsub webhooks: use the URL from
GET /v1/kyc/config (sumsubWebhookUrl). After the hosted widget completes, Sumsub webhooks update tenant status and queue issuer handoff automatically; POST /v1/applicants/{id}/submit is a fallback. Poll GET …/kyc-status for issuer progress. See Webhooks.Option A — Apocor-hosted verification
Best when you don’t run your own Sumsub (or similar) account. Apocor hosts the widget and handles issuer handoff automatically.1
Create an applicant
cURL
2
Start a verification session
cURL
accessToken (for embedding the WebSDK) and verificationUrl (a direct Sumsub link you can email or open in a browser). externalUserId is the Apocor applicant id.3
User completes the widget
When verification succeeds in the widget, call
POST /v1/applicants/{id}/submit to sync tenant status and queue issuer handoff (returns immediately — no long HTTP wait). With SUMSUB_WEBHOOK_MODE=apocor, Sumsub also posts to POST /v1/webhooks/sumsub, which triggers the same background handoff when review is GREEN.4
Confirm issuer readiness
cURL
issuerKycReady is true (issuer handoff runs in the background worker; issuer webhooks can also advance status). Then create a cardholder and issue a card.Option B — Bring your own identity provider (BYOK)
Best for regulated companies that already run their own Sumsub (or compatible) environment. You never use Apocor’s hosted widget.1
Create an applicant in Apocor
Save the returned
id — you will use it as externalUserId in your identity provider.2
Verify the user in your provider
Run your existing KYC flow. Set
externalUserId to the Apocor applicant id so records stay linked.3
Generate a share token
Call your provider’s share-token API with:Apocor imports the shared verification and forwards it to the card program internally. The token expires quickly (typically ~10 minutes). Generate it immediately before calling Apocor.
- Applicant id — from your provider
- Recipient —
shareRecipientIdfromGET /v1/kyc/config(Apocor’s id, not the card issuer)
4
Submit the token to Apocor
cURL
5
Poll until ready
cURL
issuerKycReady is true.BYOK tenants do not need Apocor-hosted verification credentials. They only need an Apocor API key and the
shareRecipientId from /v1/kyc/config.Option C — Direct document upload
Best when you already collect ID images in your own app and do not run an identity-provider widget. ConfirmissuerDirectAvailable is true on GET /v1/kyc/config before starting.
Required documents:
Accepted files: JPEG, PNG, WEBP, or PDF, 8 MB or smaller. The PUT URL expires in 300 seconds.
1
Create an applicant
The applicant must have an
email. Save the returned id.2
Presign each document
cURL
uploadUrl and key. Repeat for selfie and id_back (if required).3
PUT the file to the presigned URL
cURL
Content-Type on the PUT must match the contentType you presigned.4
Confirm the upload
cURL
5
Submit identity fields
cURL
idType must be one of: CN-RIC, PASSPORT, HK-HKID, DLN, Government-Issued ID Card, EU Residency Permit, UAE Residency Permit. gender is M or F. Dates are YYYY-MM-DD. US addresses require a 9-digit ssn.6
Poll until ready
cURL
issuerKycReady is true.Applicant response fields
Every applicant includes white-labeled issuer fields:Endpoints summary
Troubleshooting
See Error codes for the full list of
error.code values.
Next steps
Applicants
Applicant lifecycle and statuses
Cards
Issue cards after issuer KYC is ready
Quickstart
End-to-end sandbox walkthrough
API Reference
Try endpoints in the playground