Report a wrong or missing record

Tell us a VIN decoded wrong or not at all, get a receipt, and read back what happened. Free.

When a decode returns valid: false and you know what the vehicle is, or returns a vehicle you can show is wrong, send it to POST /v2/feedback. You get a receipt now and can check on it later. Reporting costs 0 credits on every plan.

File a report

Bash
curl -X POST "https://api.cardog.app/v2/feedback" \
  -H "x-api-key: $CARDOG_API_KEY" \
  -H "content-type: application/json" \
  -d '{
    "kind": "decode_miss",
    "subject": { "vin": "1HGCM82633A123456" },
    "claim": { "year": 2003, "make": "Honda", "model": "Accord" },
    "evidence": [{ "type": "url", "value": "https://example.com/window-sticker.pdf" }]
  }'

The response is 202:

Example

7 keys
"response": {
"id": "fb_01J8Z3K5V6W7X8Y9Z0A1B2C3D4",
"kind": "decode_miss",
"subject": {
"vin": "1HGCM82633A123456"
},
"status": "received",
"received_at": "2026-09-12T14:03:11.000Z",
"resolution": null,
"links": {
"self": "/v2/feedback/fb_01J8Z3K5V6W7X8Y9Z0A1B2C3D4",
"subject": "/v2/vin/1HGCM82633A123456"
}
}

Keep the id. Sending the same report again within 24 hours returns this same receipt with 200 and stores nothing new, so a retry is safe.

Kinds

kindsubjectalso required
decode_missvin
decode_disputevin
recall_disputevin, or a recall: ref
spec_disputeanyclaim.field
listing_reportany
resolve_missanynote: the text that did not resolve
otherany

subject takes exactly one of vin, ref or listing_id. claim holds what you believe is true: year, make, model, trim, or a field with expected and observed. evidence takes up to 5 links or quoted excerpts, note up to 2,000 characters, and request_id names the response you are disputing when there is one. The whole body is capped at 8 KB.

Today only decode_miss and decode_dispute are acted on. Every other kind is stored, and its resolution.outcome reads queued until it is routed.

Check on it

Bash
curl "https://api.cardog.app/v2/feedback/fb_01J8Z3K5V6W7X8Y9Z0A1B2C3D4" \
  -H "x-api-key: $CARDOG_API_KEY"

Only the key that filed a report can read it. Any other id returns 404.

statusmeaning
receivedStored, not yet looked at.
triagedSomeone has looked at it.
accepted or rejectedThe verdict, with resolution.note when there is one.
shippedThe fix is live. resolution.fixed_in names the version.

What a report does not do

A report never changes a record by itself. It is evidence we check, and a decode changes only when a fix ships for every VIN it applies to.

Limits

Each key can file 60 reports a minute and 1,000 a day. Past either you get 429 rate_limited with a Retry-After header. Every invalid_vin error and every valid: false decode carries links.feedback, so an agent can find this endpoint from the response it is already holding.