PDF417 barcode (AAMVA)
We decode the PDF417 barcode on the back of US driver licenses and state IDs and compare every field with the printed front.
Constaia answers valid, invalid or review, with the reasons and the extracted data. Zero retention by default.
Pick a fictitious sample or upload your own document and see the verdict in seconds. The full demo also shows the JSON and the code.
We do not keep the document: it is deleted as soon as the analysis ends (storage "none").
Click “Analyze document” to see the verdict, the reasons and the extracted data.
See the full demoYour code does not interpret text: it gets a stable status and the list of reasons in your language.
Right type and every rule met: not expired, in the right person's name, old enough, recent enough.
type_match · not_expired · min_age_yearsA different document type or a critical rule that fails: expired, a different holder, a missing signature, paystub totals that don't add up.
type_mismatch · require_signature · not_expiredLow confidence, poor quality or doubtful signals, such as a photo of a screen. It reaches you via webhook for review.
low_confidence · glare · screen_photo_suspectedAI reads and classifies. Then deterministic rules verify everything that can be computed: barcodes, check digits, dates and totals.
We decode the PDF417 barcode on the back of US driver licenses and state IDs and compare every field with the printed front.
The official 3-7-1 checksum on direct deposit forms, voided checks and bank letters.
123456780: 3·7·1 checksum mod 10 = 0
21+ or any minimum age from the date of birth, on your reference date.
birth_date 1988-07-04 → 38 ≥ 21
Not expired today or on your reference date, and issued within the last N days.
expiry_date 2030-07-04 > 2026-09-29
Structure rules for SSNs, ITINs and EINs. A format check, not an IRS TIN match.
EIN 12-3456789: valid prefix and length
Gross pay, deductions, net pay and year-to-date amounts must add up. If not, the verdict is invalid.
gross 4,200.00 − 1,012.40 = net 3,187.60
Every copy of an ID you keep is a copy you have to protect. With Constaia you check the document and, by default, the file is deleted as soon as the analysis ends.
What we don't do: Constaia is not biometric KYC and does not prove that a document is authentic. A matching barcode or valid check digits don't prove it either. We are not a consumer reporting agency and do not provide consumer reports under the FCRA. Driver license data is covered by the DPPA and state law: use it only for a permitted purpose. Warnings are signals for you to decide on.
Read the DPAA REST API with JavaScript and PHP SDKs, deterministic test keys and examples for your framework.
curl https://api.constaia.com/v1/analyze \
-H "Authorization: Bearer $CONSTAIA_API_KEY" \
-F "file=@us_driver_license_specimen.png" \
-F 'options={
"expect": "us_driver_license",
"checks": {
"not_expired": true,
"min_age_years": 21
},
"storage": "none"
}'168
Driver licenses and state IDs from all 50 states, federal and tax forms, paystubs, bank statements, COIs and insurance cards, with their fields and validators. For everything else, your own JSON schema.
us_driver_licensepassportus_w9us_paystubus_acord_25Onboarding and Form I-9 prep, age checks, rentals, gig platforms, insurance, clinics and events: anywhere a document decides whether someone can go ahead.
150 free documents a month, then prepaid packs in US dollars that are valid for 12 months. No subscription, no minimums.
No. We check that the document is the type you expect, that its data is consistent (the PDF417 barcode matches the front, dates make sense) and that it meets your rules. That doesn't prove authenticity: fake IDs with consistent data exist. We flag signals such as a possible screen photo or a possible edit. If you need identity verification with selfies and liveness, use a biometric KYC provider.
Not by default. With storage "none" the file is deleted as soon as the analysis ends. You can choose "temporary" (deleted after the hours you set) or "persistent" (kept until you delete it via the API). With keep_results false we don't keep the extracted fields either.
Files travel over TLS and are encrypted at rest with AES-256-GCM per account. By default (storage "none") the file is deleted as soon as the analysis ends, and with keep_results false the extracted fields are not kept either. We don't collect selfies or biometric data. If you have specific data residency requirements, talk to us.
One credit per document of up to 2 pages (a driver license, front and back, is 1 credit). You get 150 free credits a month, then prepaid packs from $0.0274 per credit, valid for 12 months. classify costs 0.2 credits. We don't charge for failures on our side or for documents rejected for quality before OCR.
Yes. ck_test_ keys use a simulated provider with deterministic responses based on the file name, free of charge. This page also has a live demo with 5 real analyses a day.
Confidence is below the threshold or there are doubtful signals, such as glare or a photo of a screen. A person should take a look. You can receive these cases via webhook (analysis.review_required).
Constaia can help you check the documents new hires present: document type, expiry and name match. It does not replace the employer's Form I-9 obligations, the physical or remote document examination the rules require, or E-Verify.
Driver license data is protected by the federal Driver's Privacy Protection Act and state laws, so use it only for a permitted purpose. We act as your service provider: our DPA includes CCPA/CPRA service provider terms, and by default we keep neither the file nor the fields. This is not legal advice.
Add On Dev Solutions S.L., a software company based in Spain that builds registration and licensing software for sport. Constaia grew out of validating those documents every day.
Create your account, copy the test key and validate your first document in five minutes.