IDPass
An IDPass is a remote identity verification. Rather than you submitting document details for a synchronous DVS check (as the ID check endpoints do), an IDPass produces a secure hosted link that the individual opens themselves to photograph their documents, complete a liveness check and consent to the verification. Because a person has to interact with the hosted link, an IDPass is asynchronous: the launch call returns immediately and you poll for the result.
IDPasses can be launched in two ways:
- Entity-bound (
POST /v1/entities/{uuid}/idpasses) - tied to a saved entity. The supplieddobmust match the entity's date of birth. - Adhoc (
POST /v1/adhoc-idpasses) - a one-off verification with no entity record.
Both forms share the same configuration, the same response shape and the same polling, PDF and image endpoints described below.
Endpoints
| Endpoint | Method | Purpose |
|---|---|---|
/v1/idpasses |
GET |
List IDPasses on the account. Filter by source (entity/adhoc) and status. |
/v1/idpasses/{uuid} |
GET |
Show a single IDPass with full configuration, status, document/validation summaries, activity log and image metadata. Poll this for the result. |
/v1/entities/{uuid}/idpasses |
POST |
Launch an entity-bound IDPass. Returns 202 Accepted. |
/v1/adhoc-idpasses |
POST |
Launch an adhoc IDPass. Returns 202 Accepted. |
/v1/idpasses/{uuid}/pdf |
GET |
Download the verification certificate PDF (only once the IDPass is terminal). |
/v1/idpasses/{uuid}/images/{type} |
GET |
Download a single verification image as raw bytes (only when return_verification_images was set). |
Both launch endpoints are chargeable and accept the Idempotency-Key header. The product billed depends on how many document verification steps are configured. The PDF and image endpoints are not billed - they read from the on-record IDPass.
Manual correction of an IDPass result and cancellation of an in-flight IDPass remain portal-only functions; they are not exposed through the API.
Discoverability from ID checks
When an ID check was satisfied by an IDPass, the ID check show/list payloads (/v1/id-checks/... and /v1/adhoc-id-checks/...) embed a lightweight idpass shell - its uuid, status, verification_status and idpass_link - alongside an idpass_url pointing at the full IDPass resource. Follow idpass_url to GET /v1/idpasses/{uuid} for the complete record. Conversely, the IDPass detail payload carries an id_check block linking back to the originating check.
Lifecycle and status
The launch response is 202 Accepted and carries the IDPass uuid, its detail_url, and the hosted idpass_link. Poll GET /v1/idpasses/{uuid} until status reaches a terminal value:
status |
Meaning |
|---|---|
new |
Created; the individual has not opened the link yet. |
opened |
The individual has opened the hosted link. |
in_progress |
Documents are being submitted/processed. |
complete |
Terminal. Verification finished - read verification_status (passed, review or failed) for the outcome. |
expired |
Terminal. The link validity window elapsed before completion. |
failed |
Terminal. The verification could not be completed. |
cancelled |
Terminal. Cancelled in the portal. |
completed is true once any terminal status is reached. A review outcome means the identity was verified but has been flagged for review in the portal - treat it as not yet passed until it has been looked at. Because completion depends on a person, polling can run for minutes to hours - poll every few seconds initially, then back off to a longer interval (e.g. every 30-60 seconds), and rely on link_validity_days for the upper bound.
Delivery
config.delivery_method controls how the hosted link reaches the individual:
manual- the link is returned to you asidpass_linkand you deliver it yourself.sms- WatchEye sends the link by SMS toconfig.delivery_phone(an Australian mobile,04XXXXXXXX). The link is still returned asidpass_linkas well.
Worked example
The example below launches an adhoc IDPass, polls for the result, then downloads the certificate and a verification image.
1. Launch the IDPass
curl -X POST https://portal.watcheye.com.au/api/v1/adhoc-idpasses \
-H "Authorization: Bearer <key>|<secret>" \
-H "Content-Type: application/json" \
-H "Idempotency-Key: 7c3f9a1e-2b44-4f6a-9d2e-8a1b6c5d4e3f" \
-d '{
"data": {
"first_name": "John",
"last_name": "Smith",
"dob": "1980-06-23"
},
"config": {
"link_validity_days": 7,
"check_liveness": true,
"document_1_allowed_types": ["licence"],
"document_2_allowed_types": ["medicare"],
"require_id_photo": false,
"return_verification_images": true,
"delivery_method": "sms",
"delivery_phone": "0412345678"
}
}'
The response is 202 Accepted. The data block holds what exists at launch: the IDPass's identifier, configuration, delivery details, the hosted link and the ID check it belongs to. The verification outcome, summaries, log and images are not part of it - they come from GET /v1/idpasses/{uuid} once the individual has completed the link. Abridged, note the uuid, the detail_url to poll, and the hosted idpass_link:
{
"data": {
"uuid": "5b1c7c8e-0b6e-4f0a-9b3a-1f2e3d4c5b6a",
"source": "adhoc",
"delivery_method": "sms",
"idpass_link": "https://idpass.globaldata.net.au/idpass?token=abcd123456",
"detail_url": "/v1/idpasses/5b1c7c8e-0b6e-4f0a-9b3a-1f2e3d4c5b6a"
},
"api_reference": "9f8e7d6c-..."
}
Because delivery_method is sms, the individual receives the idpass_link by text message. Treat idpass_link as opaque: pass it on exactly as returned and do not parse or rebuild it. (See the sandbox note below for how this behaves in sandbox.)
2. Poll for the result
curl -H "Authorization: Bearer <key>|<secret>" \
https://portal.watcheye.com.au/api/v1/idpasses/5b1c7c8e-0b6e-4f0a-9b3a-1f2e3d4c5b6a
Keep polling until status is terminal. A completed pass looks like:
{
"data": {
"uuid": "5b1c7c8e-0b6e-4f0a-9b3a-1f2e3d4c5b6a",
"status": "complete",
"completed": true,
"verification_status": "passed",
"return_verification_images": true,
"images": [
{ "type": "id_photo", "title": "ID Photo", "mime_type": "image/jpeg", "url": "/v1/idpasses/5b1c7c8e-0b6e-4f0a-9b3a-1f2e3d4c5b6a/images/id_photo" },
{ "type": "licence_front", "title": "Drivers Licence Front", "mime_type": "image/jpeg", "url": "/v1/idpasses/5b1c7c8e-0b6e-4f0a-9b3a-1f2e3d4c5b6a/images/licence_front" }
],
"pdf_url": "/v1/idpasses/5b1c7c8e-0b6e-4f0a-9b3a-1f2e3d4c5b6a/pdf"
},
"api_reference": "..."
}
3. Download the certificate PDF
Once status is terminal, fetch the certificate. The PDF streams as raw bytes with a Content-Disposition filename, so write the body straight to a file:
curl -H "Authorization: Bearer <key>|<secret>" \
https://portal.watcheye.com.au/api/v1/idpasses/5b1c7c8e-0b6e-4f0a-9b3a-1f2e3d4c5b6a/pdf \
-o idpass-certificate.pdf
Requesting the PDF before the IDPass is terminal returns 409 Conflict - keep polling and retry.
4. Download a verification image
When the IDPass was launched with return_verification_images: true, each entry in the images array can be fetched by its type. Images also stream as raw bytes (image/jpeg):
curl -H "Authorization: Bearer <key>|<secret>" \
https://portal.watcheye.com.au/api/v1/idpasses/5b1c7c8e-0b6e-4f0a-9b3a-1f2e3d4c5b6a/images/id_photo \
-o id-photo.jpg
Requesting a type that was not captured, or any image when return_verification_images was false, returns 404.
Sandbox behaviour
IDPasses work end-to-end in sandbox using the same endpoints and response shapes as live, against the sandbox environment - so you can launch, poll and download without consuming live credit.
To exercise the hosted verification flow you open the idpass_link yourself and upload a synthetic identity document. The sample licences and passports to use, and the result each one produces, are listed under IDPass Test Documents (login required).
SMS delivery in sandbox
In sandbox, no real SMS is sent. When you launch a sms-delivery IDPass on a sandbox account, the message is recorded as sent but is not handed to the SMS gateway, so no text reaches the delivery_phone. The idpass_link is still returned in the launch response, so use that value to open the hosted flow during testing. On a live account the SMS is delivered normally.