curl --request POST \
--url https://api.sand.etherfuse.com/ramp/customer/{customer_id}/verification/questionnaire \
--header 'Authorization: <api-key>' \
--header 'Content-Type: application/json' \
--data '
{
"type": "occupation",
"jobTitle": "Software Engineer",
"industry": "4430200"
}
'const options = {
method: 'POST',
headers: {Authorization: '<api-key>', 'Content-Type': 'application/json'},
body: JSON.stringify({type: 'occupation', jobTitle: 'Software Engineer', industry: '4430200'})
};
fetch('https://api.sand.etherfuse.com/ramp/customer/{customer_id}/verification/questionnaire', 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/questionnaire"
payload = {
"type": "occupation",
"jobTitle": "Software Engineer",
"industry": "4430200"
}
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"
}"signatureName is required"Submit a verification questionnaire
Submit the customer’s answers to one questionnaire, named by type.
type | Answers | Applies to |
|---|---|---|
occupation | jobTitle, industry | Every customer |
agreement | acceptTerms, signatureName, signatureDate | Customers who accepted under your terms |
Documents are uploaded through POST /ramp/customer/{customer_id}/verification/documents, including a region’s tax document.
agreement is a legal declaration, affirmed by acceptTerms: true. By default the customer accepts the agreement themselves in /idv. Send agreement only if your own terms incorporate ours and you already collected their acceptance. The customer agreement sets out what you are declaring.
Submit the customer’s personal data first, or this answers 409. As with document upload, the stage that asks these questions doesn’t exist on the customer until then.
Answers 202, not 200. industry is resolved against the live category list in the background, so an unrecognized value doesn’t fail the request: it leaves the occupation requirement outstanding.
curl --request POST \
--url https://api.sand.etherfuse.com/ramp/customer/{customer_id}/verification/questionnaire \
--header 'Authorization: <api-key>' \
--header 'Content-Type: application/json' \
--data '
{
"type": "occupation",
"jobTitle": "Software Engineer",
"industry": "4430200"
}
'const options = {
method: 'POST',
headers: {Authorization: '<api-key>', 'Content-Type': 'application/json'},
body: JSON.stringify({type: 'occupation', jobTitle: 'Software Engineer', industry: '4430200'})
};
fetch('https://api.sand.etherfuse.com/ramp/customer/{customer_id}/verification/questionnaire', 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/questionnaire"
payload = {
"type": "occupation",
"jobTitle": "Software Engineer",
"industry": "4430200"
}
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"
}"signatureName is required"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
- occupation
- agreement
Which questionnaire these answers are for. New values may be added. If this names a questionnaire that does not exist, the request is rejected and the error tells you which names are valid.
occupation "occupation"
The customer's occupation, free text. Up to 255 characters.
"Software Engineer"
Occupation category: a code from GET /ramp/verification/occupations. The label is not accepted; it is display copy and can be reworded.
"4430200"
Response
Accepted and being applied. The customer's current verification status is returned.
Where the customer's verification stands after a partner write. status is the same value GET /ramp/customer/{customer_id}/kyc reports, so there is one vocabulary across both.