curl --request POST \
--url https://api.sand.etherfuse.com/ramp/customer/{customer_id}/verification/documents \
--header 'Authorization: <api-key>' \
--header 'Content-Type: multipart/form-data' \
--form id_front='@example-file' \
--form id_back='@example-file' \
--form proof_of_address='@example-file' \
--form proof_of_address_type=UTILITY_BILL \
--form tax_document='@example-file' \
--form country=MEXconst form = new FormData();
form.append('id_front', '<string>');
form.append('id_back', '<string>');
form.append('proof_of_address', '<string>');
form.append('proof_of_address_type', 'UTILITY_BILL');
form.append('tax_document', '<string>');
form.append('country', 'MEX');
const options = {method: 'POST', headers: {Authorization: '<api-key>'}};
options.body = form;
fetch('https://api.sand.etherfuse.com/ramp/customer/{customer_id}/verification/documents', 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/documents"
files = {
"id_front": ("example-file", open("example-file", "rb")),
"id_back": ("example-file", open("example-file", "rb")),
"proof_of_address": ("example-file", open("example-file", "rb")),
"tax_document": ("example-file", open("example-file", "rb"))
}
payload = {
"proof_of_address_type": "UTILITY_BILL",
"country": "MEX"
}
headers = {"Authorization": "<api-key>"}
response = requests.post(url, data=payload, files=files, headers=headers)
print(response.text){
"customerId": "a1b2c3d4-e5f6-7890-abcd-ef1234567890",
"status": "in_progress"
}"id_back is required for ID_CARD, which is two-sided; send both sides in the same request""Submit this customer's personal data first (POST /ramp/customer/{customer_id}/verification). Documents and questionnaire answers are accepted once that is done."Upload verification documents
Upload the customer’s documents as multipart/form-data. Send at least one of id_front, id_back, proof_of_address or tax_document.
Submit the customer’s personal data first. Until POST /ramp/customer/{customer_id}/verification has run the customer has no stages to upload against, so this answers 409.
Answers 202, not 200. Every part is read and checked before we answer; the upload itself is upstream work the caller shouldn’t wait on. Watch GET /ramp/customer/{customer_id}/kyc?requirements=true for the requirement to go satisfied.
curl --request POST \
--url https://api.sand.etherfuse.com/ramp/customer/{customer_id}/verification/documents \
--header 'Authorization: <api-key>' \
--header 'Content-Type: multipart/form-data' \
--form id_front='@example-file' \
--form id_back='@example-file' \
--form proof_of_address='@example-file' \
--form proof_of_address_type=UTILITY_BILL \
--form tax_document='@example-file' \
--form country=MEXconst form = new FormData();
form.append('id_front', '<string>');
form.append('id_back', '<string>');
form.append('proof_of_address', '<string>');
form.append('proof_of_address_type', 'UTILITY_BILL');
form.append('tax_document', '<string>');
form.append('country', 'MEX');
const options = {method: 'POST', headers: {Authorization: '<api-key>'}};
options.body = form;
fetch('https://api.sand.etherfuse.com/ramp/customer/{customer_id}/verification/documents', 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/documents"
files = {
"id_front": ("example-file", open("example-file", "rb")),
"id_back": ("example-file", open("example-file", "rb")),
"proof_of_address": ("example-file", open("example-file", "rb")),
"tax_document": ("example-file", open("example-file", "rb"))
}
payload = {
"proof_of_address_type": "UTILITY_BILL",
"country": "MEX"
}
headers = {"Authorization": "<api-key>"}
response = requests.post(url, data=payload, files=files, headers=headers)
print(response.text){
"customerId": "a1b2c3d4-e5f6-7890-abcd-ef1234567890",
"status": "in_progress"
}"id_back is required for ID_CARD, which is two-sided; send both sides in the same request""Submit this customer's personal data first (POST /ramp/customer/{customer_id}/verification). Documents and questionnaire answers are accepted once that is done."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
Front of the identity document, or its only side. JPEG, PNG or PDF, up to 10 MB. At least one of id_front, id_back, proof_of_address or tax_document must be sent.
Back of the identity document, where it has two sides. JPEG, PNG or PDF, up to 10 MB. Required whenever id_type is id_card or drivers_license, and refused for passport, which is single-sided. Both sides go in the same request: sending this without id_front is a 400, so a back cannot be added to an earlier upload on its own.
Which identity document the id_* parts are. Required whenever one is sent. Case-sensitive: send the value exactly as listed.
ID_CARD, PASSPORT, DRIVERS A document evidencing the customer's address. JPEG, PNG or PDF, up to 10 MB. Only accepted once the proof-of-address requirement is outstanding: sent earlier it is accepted with a 202 and then dropped, leaving the requirement outstanding.
Which kind of address document it is. Case-sensitive: send the value exactly as listed.
UTILITY_BILL, BANK_STATEMENT, TAX_BILL, EMPLOYMENT_CERTIFICATE, PROPERTY_DEED, INVOICE A tax document, where the customer's country requires one; in Mexico, the Constancia de Situación Fiscal. JPEG, PNG or PDF, up to 10 MB. Not recorded for a customer whose verification does not collect one. See Country-specific requirements.
Issuing country of these documents, as an ISO 3166-1 alpha-3 code. Only needed when the customer's profile has no country yet.
"MEX"
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.