Offendersearch
FCRA API Reference

Disputes & reinvestigation

Open a dispute on a furnished record, follow the 30-day clock, and get the outcome.

Base URL https://api.offendersearch.app

Open a dispute

When a consumer disputes a record you received from us, open a reinvestigation on the order. Name the records, the reason, the consumer’s statement, and when the dispute reached you — the 30-day clock runs from that moment (15 U.S.C. § 1681i(a)(1)).

POST /v1/fcra/orders/{id}/disputes
curl -X POST https://api.offendersearch.app/v1/fcra/orders/fo_7c1e9b2a4d3f/disputes \
  -H "X-API-Key: $OFFENDERSEARCH_KEY" \
  -H "Content-Type: application/json" \
  -d '{
    "recordIds": ["crim:IL-SANGAMON:2021CR004417"],
    "reason": "not_me",
    "consumerStatement": "I have never lived in Sangamon County.",
    "receivedAt": "2026-10-03T09:12:00Z"
  }'
FieldRequiredDescription
recordIdsyesOne or more furnished recordId values from this order.
reasonyesnot_me, inaccurate, incomplete, outdated or other.
consumerStatementnoWhat the consumer told you, in their words.
receivedAtyesWhen the dispute reached you. dueAt is 30 days later.

The dispute object

GET /v1/fcra/disputes/{id}
{
  "id": "fd_9a0e44",
  "orderId": "fo_7c1e9b2a4d3f",
  "origin": "partner",
  "recordIds": ["crim:IL-SANGAMON:2021CR004417"],
  "reason": "not_me",
  "consumerStatement": "I have never lived in Sangamon County.",
  "status": "investigating",
  "receivedAt": "2026-10-03T09:12:00Z",
  "dueAt": "2026-11-02T09:12:00Z",
  "extendedAt": null,
  "overdue": false,
  "notes": null,
  "changes": null,
  "resolvedAt": null
}
StatusMeaning
receivedLogged; the clock is running.
investigatingThe record is being checked with the authority that holds it.
verifiedThe record was confirmed as furnished. Nothing changes.
modifiedThe record was corrected. changes lists what changed.
deletedThe record was removed, or found not to be the consumer’s.
unable_to_verifyIt could not be verified in time. It is treated as deleted.

If the consumer sends new information during the investigation, add it with POST /v1/fcra/disputes/{id}/information and { "statement": "…" }. That is the one 15-day extension (15 U.S.C. § 1681i(a)(1)(B)): dueAt moves and extendedAt records when. It returns 409 dispute_not_extendable once the dispute is resolved, already extended or past due. overdue is true for an open dispute past dueAt.

What an outcome does

  • deleted and unable_to_verify suppress the record from every later order about the same consumer (disputed_suppressed).
  • modified applies the correction to every later order.
  • A record.corrected event goes to every partner that received the record, not only the one that opened the dispute.

Disputes from the consumer portal

A consumer can also dispute directly through the consumer portal. That creates the same dispute object with origin: "consumer_portal", and you receive dispute.created for your order. A dispute that reaches us through our consumer request form and concerns one of your orders appears with origin: "consumer_request". GET /v1/fcra/disputes?status=&orderId= lists every dispute on your orders.