FCRA API
FCRA-regulated orders for approved consumer reporting agencies and screening platforms: one order covers a sex offender search, a criminal search or both, with controls before anything is furnished, a disputes endpoint, a consumer portal and signed webhooks.
Base URL https://api.offendersearch.appIntroduction
The FCRA API is for approved consumer reporting agencies and screening platforms under a written FCRA agreement. It is an orders API: one order carries a sex offender search, a criminal search, or both, for one consumer, under one end user, one permissible purpose and one consent attestation. Orders run in the background and report back by signed webhook.
- One order, both products.
searches: [{"type":"sex_offender"},{"type":"criminal"}]— each search has its own status, result and records. - The FCRA facts travel with the order. The end user, the permissible purpose and your consent attestation are recorded on every order, with the subject’s full date of birth.
- Live where it matters. Each search runs live in every state the subject lived in and where the job or housing is, and in our data everywhere else. A source-by-source
coveragetable shows exactly what is behind every result, including aclear. - Controls before anything is furnished. Exact date-of-birth matching, state restrictions, the seven-year rules for criminal records, dispute suppressions and re-verification with the official source. Anything that fails is withheld and counted by reason.
- Disputes are an endpoint. Open a reinvestigation on a furnished record, follow it on the 30-day clock, and receive the outcome by webhook.
- A consumer portal on every order. The access code on each order lets the consumer see exactly what was furnished about them and dispute any item.
- Evidence anyone can check. Every live search keeps what the official source returned, with its hash; the stored PDF carries a QR code to a public page where anyone can confirm the file against its signed receipt without uploading it.
What FCRA workflows are for
FCRA workflows are meant primarily for tenant screening and hiring decisions — any time a result will help decide whether to rent to someone or whether to hire them (including contractors, volunteers in paid programs and promotions or retention). Those decisions are regulated by the Fair Credit Reporting Act, so the search has to run as a consumer report: with a permissible purpose, a consent attestation, accuracy controls, and a dispute path for the consumer.
- Use the FCRA API for: tenant and rental-applicant screening, pre-employment and employment screening, and any other eligibility decision your agreement covers (
permissiblePurpose:employment,tenant_screening,consumer_written_instructions,legitimate_business_need). - Use the standard Sex Offender and Criminal Search APIs for everything that is not an eligibility decision about a consumer — community safety, platform trust and safety signals reviewed by your own team, research, and monitoring.
- Not sure? If a person could be turned down for housing or a job because of the result, it is an FCRA workflow.
The lifecycle of an order
- Register the end user once — the employer or landlord the report is for, with its permissible purposes and your certification.
- Create the order with the subject, the purpose, your consent attestation, where the job or housing is, and the searches to run. You get
202and an order id at once. - Each search runs — live in the relevant jurisdictions and in our data elsewhere, matched, filtered through the controls, re-verified — and moves from
queuedtocomplete(orunavailablewhen a source cannot answer). The order ispartialwhile some searches are done and others are not. - You are told by
search.completedandorder.completedwebhooks, or you poll the order. - You read the results — the furnished records with their match evidence, and the counts of what was withheld and why — and adjudicate under your own process.
- If the consumer disputes, through you or the consumer portal, a reinvestigation runs on the 30-day clock and the outcome reaches every partner that received the record.
Your first order
curl -X POST https://api.offendersearch.app/v1/fcra/orders \
-H "X-API-Key: $OFFENDERSEARCH_KEY" \
-H "Idempotency-Key: 8f1c2a7e-order-889" \
-H "Content-Type: application/json" \
-d '{
"endUserId": "eu_3b9d71c2",
"permissiblePurpose": "employment",
"consent": { "obtainedAt": "2026-10-02T13:55:00Z", "method": "esign", "documentRef": "auth-55120" },
"subject": {
"firstName": "Jordan", "lastName": "Example", "dob": "1984-02-11",
"aliases": [{ "firstName": "Jordan", "lastName": "Sample" }],
"addresses": [{ "state": "IL", "city": "Springfield", "from": "2019-01", "to": null }]
},
"useLocation": { "state": "IL" },
"liveScope": "relevant",
"searches": [{ "type": "sex_offender" }, { "type": "criminal" }],
"clientReference": "cra-order-889",
"callbackUrl": "https://your-cra.example/hooks/offendersearch"
}'Endpoint index
| Method | Path | What it does |
|---|---|---|
| POST | /v1/fcra/end-users | Register an employer, landlord or other end user, with its permissible purposes and your certification. |
| GET | /v1/fcra/end-users/{id} | Retrieve an end user. PATCH updates its purposes or suspends it. |
| POST | /v1/fcra/orders | Create an order with a sex offender search, a criminal search, or both. Returns 202. |
| GET | /v1/fcra/orders/{id} | The order, its status, and the status and result of each search. |
| POST | /v1/fcra/orders/{id}/cancel | Cancel an order that has not completed. |
| GET | /v1/fcra/orders/{id}/searches/{searchId} | One search with the records furnished. |
| POST | /v1/fcra/searches/{searchId}/reverify | Run a search again; the old one is marked superseded. |
| GET | /v1/fcra/orders/{id}/report | The furnished report, as JSON or the stored PDF. |
| GET | /v1/fcra/orders/{id}/evidence | Every official-source capture taken for the order, with its hash. |
| GET | /v1/fcra/orders/{id}/evidence/{captureId} | One capture: exactly what the official source returned, as stored. |
| GET | /v1/fcra/receipts/{orderId} | A public signed receipt for a completed order. No key, no personal data. |
| POST | /v1/fcra/orders/{id}/disputes | Open a dispute on furnished records. |
| GET | /v1/fcra/disputes/{id} | A dispute, its due date and its outcome. GET /v1/fcra/disputes lists them. |
| POST | /v1/fcra/disputes/{id}/information | Add the consumer’s new information — the one 15-day extension. |
| PUT | /v1/fcra/webhook-endpoint | Set your webhook URL and get its signing secret. GET and DELETE too. |
| GET | /v1/fcra/events | Every event for your account, to poll when a webhook is missed. |
| POST | /v1/fcra/events/{id}/resend | Deliver one event to your webhook again. |
Documentation
Each section below is its own page, with worked examples and a markdown alternate at /docs/fcra/{section}.md.
One order, one or both searches: create it, track its status, cancel it.
POST /v1/fcra/orders · GET /v1/fcra/orders/{id} · POST /v1/fcra/orders/{id}/cancelResults & recordsPer-search results, live and data coverage by source, furnished records and withheld counts.
GET /v1/fcra/orders/{id}/searches/{searchId} · GET /v1/fcra/orders/{id}/reportEvidence & verificationOfficial-source captures, the stored PDF, the signed receipt and how to verify a report.
GET /v1/fcra/orders/{id}/evidence · GET /v1/fcra/orders/{id}/evidence/{captureId} · GET /v1/fcra/receipts/{orderId}Controls & reason codesEvery control, in the order it runs, for each search type — with the reason code it writes.
Signed, retried, identifiers-only events — and the list to poll if one is missed.
GET /v1/fcra/events · POST /v1/fcra/events/{id}/resendSandboxDeterministic test subjects for every outcome, with no live calls and no charges.
ErrorsEvery status and stable error code, and what to do about each.
Get access
FCRA Partner Access is enabled after a written FCRA agreement that sets your permissible purposes. FCRA pricing is quoted per partner — contact us for pricing. Request FCRA Partner Access, or read the program overview.