curl --request POST \
--url https://api.sand.etherfuse.com/ramp/customer/{customer_id}/verification/import \
--header 'Authorization: <api-key>' \
--header 'Content-Type: application/json' \
--data '
{
"shareToken": "_act-sbx-jwt-eyJhbGciOi..."
}
'const options = {
method: 'POST',
headers: {Authorization: '<api-key>', 'Content-Type': 'application/json'},
body: JSON.stringify({shareToken: '_act-sbx-jwt-eyJhbGciOi...'})
};
fetch('https://api.sand.etherfuse.com/ramp/customer/{customer_id}/verification/import', options)
.then(res => res.json())
.then(res => console.log(res))
.catch(err => console.error(err));import requests
url = "https://api.sand.etherfuse.com/ramp/customer/{customer_id}/verification/import"
payload = { "shareToken": "_act-sbx-jwt-eyJhbGciOi..." }
headers = {
"Authorization": "<api-key>",
"Content-Type": "application/json"
}
response = requests.post(url, json=payload, headers=headers)
print(response.text){
"customerId": "a1b2c3d4-e5f6-7890-abcd-ef1234567890",
"status": "in_progress",
"requirements": [
{
"type": "personal_data",
"status": "satisfied",
"requiresLaunch": false
},
{
"type": "identity_document",
"status": "satisfied",
"requiresLaunch": false
},
{
"type": "occupation",
"status": "pending",
"requiresLaunch": false
},
{
"type": "selfie",
"status": "satisfied",
"requiresLaunch": true
},
{
"type": "customer_agreement",
"status": "pending",
"requiresLaunch": false
}
]
}"The verification session could not be imported: share token has expired""This customer's verification has already started; a session can only be imported before verification begins"Import a verified session
Import a verification the customer already passed on the partner’s own Sumsub level, handed over as a share token. Prerequisites, and what does and doesn’t transfer: KYC Sumsub Shared Token.
Answers 200, not 202: the import is committed before the response, which carries the same requirements breakdown as GET /ramp/customer/{customer_id}/kyc?requirements=true.
Only shareToken is accepted. The verification level and the customer’s identity are ours to decide. The token is a credential; it is never logged and appears in no response.
No country is sent: it is read from the shared verification and used to route the customer. The customer’s registered user_info.email is set on the imported applicant, so the email step confirms that address rather than one the customer types in.
Nothing is trusted wholesale. Everything imported is re-checked against Etherfuse’s own requirements, so a session approved in the partner’s account is not automatically approved here.
curl --request POST \
--url https://api.sand.etherfuse.com/ramp/customer/{customer_id}/verification/import \
--header 'Authorization: <api-key>' \
--header 'Content-Type: application/json' \
--data '
{
"shareToken": "_act-sbx-jwt-eyJhbGciOi..."
}
'const options = {
method: 'POST',
headers: {Authorization: '<api-key>', 'Content-Type': 'application/json'},
body: JSON.stringify({shareToken: '_act-sbx-jwt-eyJhbGciOi...'})
};
fetch('https://api.sand.etherfuse.com/ramp/customer/{customer_id}/verification/import', options)
.then(res => res.json())
.then(res => console.log(res))
.catch(err => console.error(err));import requests
url = "https://api.sand.etherfuse.com/ramp/customer/{customer_id}/verification/import"
payload = { "shareToken": "_act-sbx-jwt-eyJhbGciOi..." }
headers = {
"Authorization": "<api-key>",
"Content-Type": "application/json"
}
response = requests.post(url, json=payload, headers=headers)
print(response.text){
"customerId": "a1b2c3d4-e5f6-7890-abcd-ef1234567890",
"status": "in_progress",
"requirements": [
{
"type": "personal_data",
"status": "satisfied",
"requiresLaunch": false
},
{
"type": "identity_document",
"status": "satisfied",
"requiresLaunch": false
},
{
"type": "occupation",
"status": "pending",
"requiresLaunch": false
},
{
"type": "selfie",
"status": "satisfied",
"requiresLaunch": true
},
{
"type": "customer_agreement",
"status": "pending",
"requiresLaunch": false
}
]
}"The verification session could not be imported: share token has expired""This customer's verification has already started; a session can only be imported before verification begins"Authorizations
API key sent in the Authorization header.
Path Parameters
The customer (child org) ID. Must belong to the caller's organization or a direct child.
Body
A verification session the partner already completed with the same provider, handed over as a share token they created for us. No other field is accepted.
The single-use, short-lived share token created for the verified applicant, targeting Etherfuse's client id.
"_act-sbx-jwt-eyJhbGciOi..."
Response
The session was imported. requirements describes what is still outstanding.
The outcome of importing a verification session.
not_started, in_progress, submitted, approved, denied What is still outstanding after the import: the same breakdown GET /ramp/customer/{customer_id}/kyc?requirements=true returns.
Show child attributes
Show child attributes