curl --request GET \
--url https://app.sahlfinancial.com/api/v1/kyc/eid/{key} \
--header 'Authorization: Bearer <token>'const options = {method: 'GET', headers: {Authorization: 'Bearer <token>'}};
fetch('https://app.sahlfinancial.com/api/v1/kyc/eid/{key}', 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/{key}"
headers = {"Authorization": "Bearer <token>"}
response = requests.get(url, headers=headers)
print(response.text){
"key": 123456,
"complete": true,
"passed": true,
"identity": {
"documentType": "PASSPORT",
"documentNumber": "P1234567",
"expiryDate": "2030-05-01",
"birthDate": "1988-04-12",
"firstName": "Test",
"lastName": "Client"
},
"checks": [
{
"id": "eid:liveness",
"label": "Selfie passed the liveness check",
"severity": "critical",
"passed": true,
"detail": ""
},
{
"id": "eid:face_match",
"label": "Face on the ID matches the selfie (score 3 or more)",
"severity": "critical",
"passed": true,
"detail": "score 4 of 4, confidence 97%"
},
{
"id": "eid:name_match",
"label": "Name on the ID matches the name on the request",
"severity": "critical",
"passed": true,
"detail": ""
}
],
"completed_date": "2026-10-07T12:00:00Z"
}{
"detail": "Invalid or revoked API key"
}{
"detail": {
"code": "kyc_scope_not_allowed",
"message": "This workspace is not enabled for the partner KYC API."
}
}{
"detail": "Not Found"
}{
"detail": [
{
"loc": [
"<string>"
],
"msg": "<string>",
"type": "<string>",
"input": "<unknown>",
"ctx": {}
}
]
}{
"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"
}Get an eID check
Required scope: kyc:eid.
Where the check stands, what it proved, and its checks for the verdict.
When the check has finished, Sahl records the outcome on the case the
request was filed on (metadata_json.eid), before the eID provider’s seven-day
retention runs out. environment only places a request started before
that record existed; one POST /eid filed keeps its own.
Guide: eID check.
curl --request GET \
--url https://app.sahlfinancial.com/api/v1/kyc/eid/{key} \
--header 'Authorization: Bearer <token>'const options = {method: 'GET', headers: {Authorization: 'Bearer <token>'}};
fetch('https://app.sahlfinancial.com/api/v1/kyc/eid/{key}', 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/{key}"
headers = {"Authorization": "Bearer <token>"}
response = requests.get(url, headers=headers)
print(response.text){
"key": 123456,
"complete": true,
"passed": true,
"identity": {
"documentType": "PASSPORT",
"documentNumber": "P1234567",
"expiryDate": "2030-05-01",
"birthDate": "1988-04-12",
"firstName": "Test",
"lastName": "Client"
},
"checks": [
{
"id": "eid:liveness",
"label": "Selfie passed the liveness check",
"severity": "critical",
"passed": true,
"detail": ""
},
{
"id": "eid:face_match",
"label": "Face on the ID matches the selfie (score 3 or more)",
"severity": "critical",
"passed": true,
"detail": "score 4 of 4, confidence 97%"
},
{
"id": "eid:name_match",
"label": "Name on the ID matches the name on the request",
"severity": "critical",
"passed": true,
"detail": ""
}
],
"completed_date": "2026-10-07T12:00:00Z"
}{
"detail": "Invalid or revoked API key"
}{
"detail": {
"code": "kyc_scope_not_allowed",
"message": "This workspace is not enabled for the partner KYC API."
}
}{
"detail": "Not Found"
}{
"detail": [
{
"loc": [
"<string>"
],
"msg": "<string>",
"type": "<string>",
"input": "<unknown>",
"ctx": {}
}
]
}{
"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).
Path Parameters
The key returned by POST /v1/kyc/eid.
Query Parameters
Only places a request started before Sahl kept the eID record. A request made through POST /v1/kyc/eid keeps its own environment.
sandbox, production Response
OK
True once the client has scanned a document.
True when complete and no critical eID check failed.
What the check proved. Possible keys: documentType, documentNumber, expiryDate, birthDate, firstName, lastName, address. Empty until complete.
Show child attributes
Show child attributes