Verification reports
A timestamped PDF of a search you already ran, with a source citation on every record. This is the document that goes in the file.
When to use this
When a search decided something — a visitor was admitted, a volunteer was cleared, a candidate was escalated — the file needs more than a searchId in a database. POST /v1/report renders one consolidated PDF for a search on your account: who was viewing it, what was asked, each registrant that matched, with every field on file, a source citation on each record, and the legal notice. You will build the step that requests the PDF from the searchId you stored, saves it with its X-Report-Id, and does so inside the window that makes it possible.
Before you start
- A test key, or a dashboard session — this route accepts either. The sandbox renders the production PDF for the sample people, without photographs, and bills nothing.
- A
searchIdfrom a priorPOST /v1/searchorPOST /v1/searcheson the same account, created within the last 7 days. Batch rows have nosearchIdand cannot be reported on. - Price: one PDF charge ($0.02) on top of the search that was already billed. The legacy one-shot mode — an inline
queryinstead ofsearchId— runs a new search and bills a call as well (pricing).
410. Request the PDF when the decision is made, not when the audit arrives.Step by step
- Run the search and keep the `searchId`. Search Exact Match with
dob1980-01-01. StoresearchId. - Request the report.
POST /v1/reportwith thesearchIdand the optional viewer, purpose and reference fields. The body of the200is the PDF. - Save it with its id. Read
X-Report-Id(rpt_+ 12 hex) andContent-Dispositionfrom the headers; store the id next to thesearchId. - Handle the refusals.
404for asearchIdthis account never ran;410past 7 days;400when neithersearchIdnorquerywas sent.
Step 2 — the request
curl -s -D headers.txt -o report.pdf https://sandbox.offendersearch.app/v1/report \
-H "X-API-Key: $OFFENDERSEARCH_KEY" -H "Content-Type: application/json" \
-d '{"searchId": "srch_7a89158926d834f43f66856f",
"viewerName": "Admissions desk", "viewerEmail": "desk@example.com",
"purpose": "Visitor screening", "reference": "visit-2026-10-25-0417"}'
grep -i "x-report-id\|content-disposition" headers.txtHTTP/1.1 200 OK
Content-Type: application/pdf
Content-Disposition: attachment; filename="offendersearch-verification-rpt_97a079557016.pdf"
X-Report-Id: rpt_97a079557016The body is the PDF, not JSON. viewerName, viewerEmail, purpose and reference are optional and are printed at the top of the document as a record of who ran it and why; they are not an access gate. requesterName is a legacy alias of viewerName.
What the PDF contains
- The report id and the time it was generated; the viewer identity, purpose and reference you sent.
- The query as it was run and the registries searched.
- Every matching registrant with every field on file: names and aliases, date of birth or age and how it matched, addresses and jurisdiction, offenses and risk designation, photograph where available, and the extended per-state fields.
- A source-attribution section with a citation on every record — the registry and the page it came from.
- A legal notice: informational use only; not a consumer report; the use restrictions.
Step 4 — the refusals
{ "detail": "No search found for that searchId on this account." }Reading the result
| Where | Field | Keep it for |
|---|---|---|
| Header | X-Report-Id (rpt_ + 12 hex) | The document's identity; printed on the PDF. Store with the searchId. |
| Header | Content-Disposition | The suggested filename, offendersearch-verification-{reportId}.pdf. |
| Request | searchId | Which search the report cites. It must be on this account and under 7 days old. |
| Request | viewerName, viewerEmail, purpose, reference | Printed on the first page: who, why, and your case id. |
| Request (legacy) | query, jurisdictions, locationScoped | One-shot mode: runs and bills a new search. Prefer searchId. |
Edge cases and pitfalls
- The report re-runs a reduced form of the query at report time —
firstName,lastName,dob,age,city,state,zipcode,jurisdictions,locationScoped— against the data at that moment. A search that usedcounty, a radius,q,nameMatch/prefixMatch, a non-defaultmatch, aliveblock or a clearance scope can produce a PDF that differs from the envelope you read. Request the report promptly, and for a live decision also keep the evidence documents. - Batch rows cannot be reported. Re-run the person with
POST /v1/searchto obtain asearchId. - 7 days, not 14.
/resultskeeps records for 14 days;/reportaccepts asearchIdfor 7. - It is one PDF per search, not per registrant; a search with three candidates yields one document listing all three.
- Trial accounts can call
/report; the route has no paid-entitlement gate and the PDF is metered at the PDF rate rather than as a trial unit, so expect it on the first invoice. - Proof documents are a different thing.
POST /v1/searches/{searchId}/proofrenders per-registry look-alike documents for named registries and requires billing; it is an internal add-on, not the verification report. See Verification reports for the distinction. - Not FCRA. The notice printed on the document says so: this report is not a consumer report and must not be the sole basis for an employment, housing, credit or insurance decision. That path is the FCRA Partner API.
Production checklist
- The report is requested in the same workflow step that records the decision, inside 7 days.
X-Report-Idstored withsearchId,recordIds and the reviewer's verdict.viewerName/purpose/referencefilled from your own case data so the first page answers the auditor's questions.- PDFs stored under your own retention policy; the platform keeps the search 14 days.
Related products
Product overview
- Sex offender search API
- Sex offender registry API
- Offender search API
- Background check API
- Bulk sex offender search
- Background check API pricing
- Background check API integration
- Integrations
- Free background check API
- Pay-as-you-go background check API
- Background check API in Python
- Background check API in Node.js
- NSOPW API