Read a proof of address
/v1/proof-of-address/readThe proof-of-address reader on a bill or statement: name match against the name you send, address, issue date and age, issuer, document type, QR-bill and PDF forensics. It assists and never approves. Asynchronous: answers 202, then proof_of_address.read.completed. CHF 0.25 when the reader read the file; refunded when it could not. Needs the poa:read scope. The file is not stored.
Send your API key in the x-api-key header.
Headers
- Idempotency-Keystring8–200 chars
Reuse on retries (printable non-space ASCII). For 24 hours the same key and the same request return the saved answer and check id without a second charge; a different request under the key returns 409.
Request bodyapplication/jsonrequired
- given_namesstringrequired
- surnamestringrequired
- countrystring
Expected country of the address, ISO 3166-1.
- postcodestring
Expected postcode; answered as postcode_match.
- max_age_daysintegerdefault 90
One of
306090180 - reference_idstring≤ 128 chars
Your own id, echoed in the answer.
- sandbox_outcomestring
Sandbox keys only: which test answer to return. No model runs and nothing is charged.
One of
passreviewunreadable - filestringrequired
PDF, JPEG, PNG, WebP, HEIC or AVIF, at most 10 MB.
Responses
202Accepted. Poll the check or wait for its webhook.
- check_idstringuuidrequired
- productstring
- environmentstring | null
- statusstringrequired
One of
PROCESSINGCOMPLETEDFAILED - sandboxboolean
- created_atstringdate-time
- completed_atstring | nulldate-time
- reference_idstring
- poll_urlstring
- resultobject
Show 20 child propertiesHide child properties
- check_idstringuuid
- productstring
- environmentstring | null
- sandboxboolean
- checked_atstringdate-time
- reference_idstring
- signed_resultstring
The same answer as an ES256 JWS, verifiable with /.well-known/jwks.json.
- statestring
One of
PASSREVIEWERROR - readboolean
Whether the reader read the file (what is charged).
- consistentboolean
- findingsarray of string
- document_typestring | null
- issuerstring | null
- issued_onstring | null
- age_daysinteger | null
- name_scorenumber | null
- addressobject | null
- postcode_matchboolean | null
- qr_billobject | null
- pdfobject | null
- errorobject
Show 2 child propertiesHide child properties
- codestring
- messagestring
- 400Invalid input.
- 401Missing, unknown or expired API key.
- 402The balance does not cover the check.
- 403The key lacks the product's scope, its IP allowlist refuses the caller, or (code production_not_allowed) the organization may not use production yet.
- 409The Idempotency-Key is in progress (Retry-After: 1) or was used with a different request.
- 413A file or the body is too large.
- 415A file is not of an accepted type (checked by its bytes, not its name), or the body is neither multipart nor JSON.
- 429More than 60 calls in a minute for this product.
- 503The check could not run on our side. Nothing was charged; retry later with the same Idempotency-Key.
curl -X POST https://api-verify.secuveri.com/v1/proof-of-address/read \
-H "x-api-key: $SECUVERI_API_KEY" \
-H "content-type: application/json" \
-H "Idempotency-Key: signup-1042-retry-safe" \
-d '{
"given_names": "<given names>",
"surname": "<surname>",
"file": "<file>"
}'{
"check_id": "6f1c2e0a-8f43-4f7e-9a51-2b7c1d9e4a10",
"environment": "<environment>",
"status": "PROCESSING",
"completed_at": "2026-10-23T09:12:44.120Z"
}