Skip to main content
An eID check proves that a client who is not in front of you is the person on their ID. The client receives an email with a PIN and a link, scans an ID and takes a selfie in the eID provider’s app. Three endpoints cover it. Scope for all three: kyc:eid. In this version the engine accepts Canadian clients only for eID. The samples on this page therefore use country CA, unlike the rest of the guides, which use MA.

Before you start

environment does not change the provider. A request made with environment: "sandbox" still emails the client and still calls the provider. environment only chooses which case the request is filed on. Use an email address you control when you test.

Start a check

The answer:
key is the id you poll with. The PIN is sent to the client only and is never returned to you. The request is filed as pending on the case for (workspace, environment, reference). A new request for the same reference and environment replaces the record, because you started the client’s verification over. The provider stores the request under a client id made of your workspace and your reference, which is what keeps another workspace from reading it.

States

There is no callback from the provider. You poll GET /v1/kyc/eid/{key}. Sahl derives the state from the poll. pending, passed, failed and archived are also the status Sahl records on the case. Only passed meets a policy’s eID requirement.

Poll

GET /v1/kyc/eid/{key} has one optional query parameter, environment (default sandbox). It only places a request that was started before Sahl kept the eID record. A request made through POST /v1/kyc/eid keeps its own environment. Sahl sets no polling interval. The only cap is the 100 requests a minute per IP. A reasonable schedule is every 30 seconds for the first 10 minutes, then every 5 minutes. The client has to open the email, so minutes to hours are normal. A finished check (complete, or archived) is the moment Sahl records the outcome on the case, and the first poll that sees it sends the kyc.eid_completed webhook. Later polls stay quiet.

Answer when complete

The values are fake, produced by the same function the API uses.

The checks

Provider messages and their severity:

Report

GET /v1/kyc/eid/{key}/report returns the provider’s report as application/pdf with Content-Disposition: attachment; filename="eid-<key>.pdf". It is for the client’s file.

Keep the result

Fetch the result and the PDF within about seven days of the check. After that the provider deletes the personal details. Sahl records the outcome (status, completion time) on your case when a poll first sees the end state, but the identity block and the PDF come from the provider, so store what you need.

Meeting a policy eID requirement

A workspace policy can require a remote eID check for a person not met face to face (eid_required_non_face_to_face). /verify and /assess then add a critical check policy:eid_non_face_to_face: Only Sahl’s own record meets the requirement. A check you send in extra_checks with an id starting eid: is renamed partner:eid:... and never counts. Use the same reference and environment for the eID request and for the /verify call. Poll the check to completion before you call /verify, because the outcome is recorded by the poll.

Errors