- Create a KYC profile
- Collect terms acceptance
- Complete identity verification
- Collect source of funds
- Create an account
The Partner API doesn’t return one combined onboarding state. Your backend owns the workflow: it decides which step comes next and stores the IDs returned at each step.
Steps
1
Create a KYC profile
Call Store the returned
POST /kyc/profiles with your stable reference for the user and their email address.If you already know the address that will own the user’s Safe, include it as safe_owner_address. Use the same address later when you create the account.cURL
profile_id against your user record. You use it as {kyc_profile_id} in every later onboarding call.Already verified the user on your own Sumsub account? Reuse their KYC
Already verified the user on your own Sumsub account? Reuse their KYC
If your user has already completed KYC on your Sumsub account, you can reuse that verification instead of asking them to verify again. Gnosis Pay creates an applicant on its own Sumsub account and copies the user’s verified data into it. If Gnosis Pay needs checks your verification didn’t cover, only those missing steps are triggered in step 3.1. Generate a share token. On your Sumsub account, call Sumsub’s generate share token endpoint for the user’s applicant, with
forClientId set to Gnosis Pay’s Sumsub client ID. Contact Gnosis Pay to get this client ID.2. Add it to the profile request. Include a reuse_kyc object when you create the profile:cURL
Then continue with the remaining steps as usual.
2
Collect terms acceptance
- Call
GET /kyc/terms-of-serviceto get the current terms and their versions. - Show those terms to the user.
- Call
POST /kyc/profiles/{kyc_profile_id}/termswith every type and version the user accepted.
GET /kyc/profiles/{kyc_profile_id}/terms.3
Complete identity verification
- Call
GET /kyc/profiles/{kyc_profile_id}/checksand select the currentbasiccheck. - Call
GET /kyc/profiles/{kyc_profile_id}/checks/{check_id}and request the credential your client needs, such asinclude_credentials=web_sdk_url. - Open the returned hosted verification session in your application.
- Listen for KYC webhook events, then confirm the latest state with
GET /kyc/profiles/{kyc_profile_id}.
See KYC Statuses for full definitions.
4
Collect source of funds
- Call `GET /kyc/source-of-funds-questions to get the current questionnaire.
- Show the questions and allowed answers exactly as returned. Don’t change their text or identifiers.
- Submit the complete set of answers to
POST /kyc/profiles/{kyc_profile_id}/source-of-funds.
GET /kyc/profiles/{kyc_profile_id}/source-of-funds.5
Create an account
Once the profile is If you set
approved and the previous steps are complete, call POST /accounts with the approved kyc_profile_id, your external reference for the account, and a funding configuration. Don’t create the account before then.cURL
safe_owner_address when creating the KYC profile, use the same address here. Store the returned account_id against your user record, next to their profile_id.Account provisioning is asynchronous. Wait for an account status webhook event, or check the account with GET /accounts/{account_id}. The account is ready when both are true:statusisactivefunding.config.safe_addressis present
The account response groups funding-specific fields under
funding, with a type field that says which kind of funding the account uses (today, safe_wallet). Read funding.type before reading anything inside funding.config, so your integration keeps working when new funding types are added.When onboarding is complete
Onboarding is complete when the profile isapproved, terms are accepted, identity is verified, source of funds is submitted, and the account is active with a safe_address.
Next step
Create a cardholder and card
Register the user as a cardholder and issue their first card.