curl --request POST \
--url https://app.sahlfinancial.com/api/v1/kyc/eid \
--header 'Authorization: Bearer <token>' \
--header 'Content-Type: application/json' \
--data '
{
"reference": "client-0001",
"first_name": "Test",
"last_name": "Client",
"email": "test.client@example.com",
"country": "CA",
"language": "en",
"documents": 1,
"environment": "sandbox"
}
'const options = {
method: 'POST',
headers: {Authorization: 'Bearer <token>', 'Content-Type': 'application/json'},
body: JSON.stringify({
reference: 'client-0001',
first_name: 'Test',
last_name: 'Client',
email: 'test.client@example.com',
country: 'CA',
language: 'en',
documents: 1,
environment: 'sandbox'
})
};
fetch('https://app.sahlfinancial.com/api/v1/kyc/eid', options)
.then(res => res.json())
.then(res => console.log(res))
.catch(err => console.error(err));import requests
url = "https://app.sahlfinancial.com/api/v1/kyc/eid"
payload = {
"reference": "client-0001",
"first_name": "Test",
"last_name": "Client",
"email": "test.client@example.com",
"country": "CA",
"language": "en",
"documents": 1,
"environment": "sandbox"
}
headers = {
"Authorization": "Bearer <token>",
"Content-Type": "application/json"
}
response = requests.post(url, json=payload, headers=headers)
print(response.text){
"key": 123456,
"reference": "client-0001"
}{
"detail": "Invalid or revoked API key"
}{
"detail": {
"code": "kyc_scope_not_allowed",
"message": "This workspace is not enabled for the partner KYC API."
}
}{
"detail": "identity verification is not set up for this tenant"
}{
"detail": "identity verification is available for Canadian clients only"
}{
"code": "rate_limit_exceeded",
"message": "Too many requests. Please slow down."
}{
"code": "internal_error",
"message": "An unexpected error occurred",
"details": null
}{
"detail": "the identity verification service did not answer"
}Start an eID check
Required scope: kyc:eid.
Start an eID check: the eID provider emails the client right away.
The request is filed, pending, on the case for (environment, reference):
that record, completed by GET /eid/{key}, is what the policy’s eID
requirement reads. Nothing the partner sends to /verify can stand in for it.
Guide: eID check. The provider emails the client as soon as this call succeeds, in sandbox too.
curl --request POST \
--url https://app.sahlfinancial.com/api/v1/kyc/eid \
--header 'Authorization: Bearer <token>' \
--header 'Content-Type: application/json' \
--data '
{
"reference": "client-0001",
"first_name": "Test",
"last_name": "Client",
"email": "test.client@example.com",
"country": "CA",
"language": "en",
"documents": 1,
"environment": "sandbox"
}
'const options = {
method: 'POST',
headers: {Authorization: 'Bearer <token>', 'Content-Type': 'application/json'},
body: JSON.stringify({
reference: 'client-0001',
first_name: 'Test',
last_name: 'Client',
email: 'test.client@example.com',
country: 'CA',
language: 'en',
documents: 1,
environment: 'sandbox'
})
};
fetch('https://app.sahlfinancial.com/api/v1/kyc/eid', options)
.then(res => res.json())
.then(res => console.log(res))
.catch(err => console.error(err));import requests
url = "https://app.sahlfinancial.com/api/v1/kyc/eid"
payload = {
"reference": "client-0001",
"first_name": "Test",
"last_name": "Client",
"email": "test.client@example.com",
"country": "CA",
"language": "en",
"documents": 1,
"environment": "sandbox"
}
headers = {
"Authorization": "Bearer <token>",
"Content-Type": "application/json"
}
response = requests.post(url, json=payload, headers=headers)
print(response.text){
"key": 123456,
"reference": "client-0001"
}{
"detail": "Invalid or revoked API key"
}{
"detail": {
"code": "kyc_scope_not_allowed",
"message": "This workspace is not enabled for the partner KYC API."
}
}{
"detail": "identity verification is not set up for this tenant"
}{
"detail": "identity verification is available for Canadian clients only"
}{
"code": "rate_limit_exceeded",
"message": "Too many requests. Please slow down."
}{
"code": "internal_error",
"message": "An unexpected error occurred",
"details": null
}{
"detail": "the identity verification service did not answer"
}Authorizations
API key created in the console. Scopes: kyc:extract, kyc:verify, kyc:eid; bank:read, bank:write (Growth plan, enabled per workspace by Sahl).
Body
Your own id for the client, 1 to 64 characters of A-Z a-z 0-9 _ . : -.
1 - 64^[A-Za-z0-9_.:-]+$1 - 1001 - 100The provider emails the client a PIN and a link to this address as soon as the request is created.
Country of the client. Only Canada is accepted: CA or CAN.
2 - 3Language of the client's email and screens: en or fr.
en, fr How many pieces of ID the client must scan: 1 or 2.
1, 2 Picks the case the request is filed on. It does not stop the provider from emailing the client.
sandbox, production