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
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 keysKeep 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
| kind | subject | also required |
|---|---|---|
decode_miss | vin | |
decode_dispute | vin | |
recall_dispute | vin, or a recall: ref | |
spec_dispute | any | claim.field |
listing_report | any | |
resolve_miss | any | note: the text that did not resolve |
other | any |
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
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.
| status | meaning |
|---|---|
received | Stored, not yet looked at. |
triaged | Someone has looked at it. |
accepted or rejected | The verdict, with resolution.note when there is one. |
shipped | The 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.