API
GET /v1/verifications/{id}/documentreturns more.type(passport,id,driver_license,residence_permit,other; an open enum,otheris declared and not yet produced) andissuing_country(ISO 3166-1 alpha-2,XKfor Kosovo) are added todocumenton every workspace. Identity (KYC) workspaces also getmiddle_name,gender(F,M,X;Xis declared and not yet produced),nationality,place_of_birth,issue_dateandexpiry_dateinfields, so the object carries ten fields.- Age workspaces keep the four fields (
first_name,last_name,date_of_birth,document_number) and add onlytypeandissuing_country. The six KYC-only keys are absent, notnull. - Dates are
YYYY-MM-DDornull. A document that prints only the month or year of expiry reports the last day of that period. A permanent document (for examplePERMANENTE) reads as anullexpiry_date. - Fix: a partially printed birth date is now
nullinstead of a string such as1968-04. - Fix: an empty text field is now
nullinstead of"". - Fix: the sex letter of a Mexican voter card or driving licence created before 20 August 2026 17:00 UTC is now
null. The document service read it inverted for most women until then. - The tenant MCP server returns the same
documentobject fromlist-verificationswithselect: ["document"]. - SDK releases to match:
@proofage/node0.9.0,proofage(Python) 0.4.0,proofage/php-sdk0.4.0 andproofage/laravel-client0.9.4. The new keys are optional in their types andtypeandgenderare open, so a value added later does not break them. See Reading results and Data models.
Decisions
- Two new decline reasons,
selfie.liveness.failedandselfie.liveness.unavailable. They appear on workspaces that use the AWS liveness check (beta). See Decision reasons.
API
- Errors are always JSON. Every error from
api.proofage.xyzis JSON, with or withoutAccept: application/json. Before, a 404 or 403 came back as an HTML page and a validation error as a redirect. A missing verification answers404 {"message": "Resource not found"}. See Errors. - Consent checks the workspace.
POST /v1/verifications/{id}/consentanswers403for a verification of another workspace, like the other verification endpoints. - An
external_idsent as an array is a422validation error, not a500. - The OpenAPI spec lists only the fields integrations send and receive; the browser SDK’s own fields are gone from it.
- Switching an age workspace from ID documents to facial age estimation needs a minimum age of 18 in the same request, unless the workspace already has 18.
- SDK releases to match:
@proofage/node0.8.1,proofage(Python) 0.3.1,proofage/php-sdk0.3.2 andproofage/laravel-client0.9.2. The fields only the ProofAge widget sends are deprecated in all of them: they still work, and will be removed in the next minor release. The Postman collection now signs every request itself; see Postman collection.
SDKs and API
- New SDK releases:
@proofage/node0.7 and 0.8,proofage(Python) 0.3,proofage/php-sdk0.3.0 and 0.3.1, andproofage/laravel-client0.9.0 and 0.9.1. Every request now names the SDK and its version, so support can see which client sent it. - Signed creates only tie a verification to your user.
POST /v1/verificationswithout an HMAC signature now ignoresexternal_idandcallback_url. Sign create requests on your backend; see API authentication.
MCP server
- The MCP server serves the developer documentation and the OpenAPI spec as resources, and a new integration guide tool gives an agent everything it needs to integrate a workspace end to end.
get-verification-statsreturns the dashboard’s figures.- Support specialists can use the MCP server, with the tools their role allows, and can erase a person’s personal data on request.
Console and widget
- Workspace checks renamed. Creating a workspace is one question, “What should this workspace check?”: Identity (KYC), or Age verification by ID document or Facial age estimation. The age setting is now called Minimum age. API fields are unchanged.
- Verification links: create a verification by hand from the Verifications page, with a QR code. See Verification links.
- Dashboard: verification volume and resubmission insights, filterable by workspace.
- The widget shows your workspace’s branding from the first frame, and takes its language from the link, then the session, then the browser.