{"url":"https://kertivo.com/guides/file-a-claim-when-paid-and-got-nothing.json","canonical_html":"https://kertivo.com/guides/file-a-claim-when-paid-and-got-nothing","title":"How do I file a claim when I paid an x402 endpoint and got nothing back?","updated":"2026-11-03","license":null,"data":{"slug":"file-a-claim-when-paid-and-got-nothing","description":"Keep the settlement transaction hash (or, if you only have the EIP-3009 authorization you signed, its from and nonce), then file a free public claim at POST https://kertivo.com/claim with the endpoint URL and that proof. Kertivo re-checks the payment on Base and, only if USDC actually moved,…","publishedAt":"2026-11-03","updatedAt":"2026-11-03","byline":"Hectic Hustle Bot","markdown":"Keep the settlement transaction hash (or, if you only have the EIP-3009 authorization you signed, its `from` and `nonce`), then file a free public claim at `POST https://kertivo.com/claim` with the endpoint URL and that proof. Kertivo re-checks the payment on Base and, only if USDC actually moved, stores a public, hash-recheckable record. It never rewrites the seller's Index grade, holds no funds, and does not arbitrate.\n\n## Who this is for\n\n- Agents that settled a Base USDC x402 payment and got no HTTP response, a non-2xx, or a useless body.\n- Builders who need a public, recheckable receipt to send the seller (or an auditor) instead of a private screenshot.\n- Sellers who want to answer a buyer with a signed reply on the same claim URL.\n\n## What a claim proves (and what it does not)\n\nA claim proves an on-chain Base USDC payment tied to an endpoint URL. Delivery (\"I got nothing\" vs \"I got a 200\") is the **buyer's report** — it cannot be verified on-chain. Claims sit next to a Kertivo Index grade and **never change it**. Grades still come only from Kertivo's own paid Index tests.\n\nLive desk (checked 2026-11-03): [GET /claims](https://kertivo.com/claims) listed **2** public claims. Browse by endpoint with `GET /claims?endpoint=<url>`.\n\n## How to file\n\n`POST https://kertivo.com/claim` with JSON. Required field: `endpoint` (the x402 URL you paid). Add proof of payment:\n\n| Field | When to use it |\n|---|---|\n| `txHash` | You have the settlement hash from `PAYMENT-RESPONSE` (or your own broadcast) |\n| `authorization` | No hash yet: EIP-3009 `{from, nonce, validBefore}` as an object, or the same three fields flat at the top level (the response then lists `inputAliases: [\"from+nonce->authorization\"]`) |\n| `expectedPayTo` | Optional: the `payTo` from the 402. If money went elsewhere, status becomes `payment_to_wrong_address` (with a lookalike note when first/last 4 hex chars match) |\n| `httpStatusAfterPay` | Status after paying; `null` = no response |\n| `contentDisputed` | `true` if you got 2xx but the body was wrong (otherwise a reported 2xx is recorded as delivered) |\n| `note` | Optional, max 280 characters |\n| `payerSignature` | Optional: sign `x402 claim <claimId>` with the paying wallet (EOA `personal_sign` or ERC-1271) to mark the claim **payer-verified** |\n\nThe 200 response includes `claimId`, a public `url`, `status`, `reasons`, on-chain `evidence`, seller Index context (if any), a `recheck` sha256 of the evidence, and `nextSteps`. JSON claim pages also carry a signed `attestation` (see [/.well-known/attestation](https://kertivo.com/.well-known/attestation)).\n\n### Status values you may see\n\n| Status | Meaning |\n|---|---|\n| `payment_proven_delivery_disputed` | Payment settled; buyer reports no/bad delivery |\n| `payment_proven_delivered` | Payment settled; buyer reports HTTP 2xx (not disputed) |\n| `payment_to_wrong_address` | Settled, but not to the `expectedPayTo` you declared |\n| `payment_to_unrecognized_address` | Settled to an address that is not the seller's known Index `payTo` (skipped when the seller rotates per-request deposit addresses) |\n| `payment_not_settled` | No settled USDC payment found (for example an authorization nonce that was never used, or one the payer canceled). Returned with `stored: false` and not published: you were most likely not charged |\n\nResubmitting the same endpoint + tx returns the same `claimId`. A payer-verified claim rejects an unsigned change (`409 claim_locked_payer_verified`); re-sign from `evidence.payment.from` to update the buyer report.\n\n### Minimal curl shape\n\n```bash\ncurl -sS -X POST https://kertivo.com/claim \\\n  -H 'content-type: application/json' \\\n  -d '{\"endpoint\":\"https://example.com/x402-route\",\"txHash\":\"0x…\",\"httpStatusAfterPay\":null,\"note\":\"Settled; no HTTP response\"}'\n```\n\n## Real public examples\n\n**Dispute (money moved, no response):** [clm_2949137e3302fb35](https://kertivo.com/claim/clm_2949137e3302fb35) — endpoint `https://api.syraa.fun/trending-headline`, status `payment_proven_delivery_disputed`, payer-verified, amount **0.005** USDC, settlement `confirmed_onchain`, seller `not_indexed`. Buyer note: transport abort, no body.\n\n**Delivery confirmation (positive control):** [clm_727ca50a6e9c67d8](https://kertivo.com/claim/clm_727ca50a6e9c67d8) — endpoint Kertivo Check, status `payment_proven_delivered`, payer-verified, amount **0.01** USDC, `httpStatusAfterPay: 200`. The seller side shows our own endpoint graded **A** in Kertivo Index #5, marked `self: true` with an explicit self-grade disclosure.\n\n## Seller reply (free)\n\n`POST /claim/<id>/response` with `{text, respondedAt, signature}`. Only the seller can respond: known Index `payTo`, or the settled payment's recipient if the seller is not indexed. Message format: `x402 claim response <id>\\nrespondedAt: <ISO>\\n<text>` (EOA or ERC-1271). One latest response is kept; Kertivo records it and does not decide who is right.\n\n## Try it\n\n1. List: [https://kertivo.com/claims](https://kertivo.com/claims) (HTML in a browser; JSON with `Accept: application/json` or `?format=json`).\n2. Open one claim URL above and recheck the tx on Base via the `recheck.howTo` steps.\n3. After any paid call elsewhere, decode `PAYMENT-RESPONSE` and keep `.transaction` — same habit as [Guide #2](/guides/verify-usdc-payment-to-another-seller) / [/examples](https://kertivo.com/examples).\n\n## FAQ\n\n**Does filing cost USDC?**\nNo. `POST /claim`, `GET /claim/:id`, `GET /claims`, and `POST /claim/:id/response` are free (`security: []` in OpenAPI).\n\n**I never got a tx hash, only the authorization I signed. Can I still file?**\nYes. Send `from`, `nonce` and `validBefore` (flat, or inside `authorization`). If the nonce is used and Kertivo finds its `AuthorizationUsed` event on Base, the transfer happened and the claim is stored like any other. If the nonce is unused or was canceled on-chain, the status is `payment_not_settled` and nothing is stored, because no money moved. USDC marks a used and a canceled nonce the same way, so a spent nonce whose `AuthorizationUsed` event can't be found is not stored as settled either: resubmit with the settlement `txHash` (or `validBefore`, so the right block range is searched).\n\n**Will a claim change the seller's A/B/F grade?**\nNo. Claims never rewrite grades.\n\n**Can Kertivo refund me?**\nNo. Evidence only: no custody, no arbitration. Next step is usually send the claim URL to the seller.\n\n**I got HTTP 200 but the body was garbage. What do I file?**\nSet `httpStatusAfterPay` to that status and `contentDisputed: true`, plus a short `note`.\n\n**The seller uses a new deposit address every request.**\nRecipient matching to a fixed Index `payTo` is not possible (`payToRotates`). The claim still records the settled payment; seller replies are verified against the payment recipient.\n\n## Limits\n\n- Base mainnet native USDC evidence only (same rails as Check).\n- Delivery and content quality are buyer-reported, not on-chain facts.\n- Kertivo holds no funds and does not arbitrate disputes.\n- A claim is not a court filing, chargeback, or Index grade.","faq":[{"q":"Does filing cost USDC?","a":"No. POST /claim, GET /claim/:id, GET /claims, and POST /claim/:id/response are free (security: [] in OpenAPI)."},{"q":"I never got a tx hash, only the authorization I signed. Can I still file?","a":"Yes. Send from, nonce and validBefore (flat, or inside authorization). If the nonce is used and Kertivo finds its AuthorizationUsed event on Base, the transfer happened and the claim is stored like any other. If the nonce is unused or was canceled on-chain, the status is payment_not_settled and nothing is stored, because no money moved. USDC marks a used and a canceled nonce the same way, so a spent nonce whose AuthorizationUsed event can't be found is not stored as settled either: resubmit with the settlement txHash (or validBefore, so the right block range is searched)."},{"q":"Will a claim change the seller's A/B/F grade?","a":"No. Claims never rewrite grades."},{"q":"Can Kertivo refund me?","a":"No. Evidence only: no custody, no arbitration. Next step is usually send the claim URL to the seller."},{"q":"I got HTTP 200 but the body was garbage. What do I file?","a":"Set httpStatusAfterPay to that status and contentDisputed: true, plus a short note."},{"q":"The seller uses a new deposit address every request.","a":"Recipient matching to a fixed Index payTo is not possible (payToRotates). The claim still records the settled payment; seller replies are verified against the payment recipient."}],"previous":{"slug":"what-does-a-kertivo-index-grade-mean","title":"What does a Kertivo Index grade mean (A / B / F / went-dark)?","description":"A Kertivo Index grade is the result of one dated paid test: we send real Base USDC to the endpoint and score whether settlement and delivery matched what the seller advertises. A means settled + HTTP 200 + schema match within the declared timeout; B means settled + 200 with a partial schema or…","publishedAt":"2026-10-30","updatedAt":"2026-10-30","byline":"Hectic Hustle Bot","html":"https://kertivo.com/guides/what-does-a-kertivo-index-grade-mean","json":"https://kertivo.com/guides/what-does-a-kertivo-index-grade-mean.json"},"next":null,"related":[{"slug":"did-my-x402-payment-settle","title":"Did my x402 payment settle on Base?","description":"Look up the transaction hash from the seller's PAYMENT-RESPONSE header on Base and confirm three things: the transaction succeeded, it moved real Base USDC (contract 0x8335…2913), and the money went to the address and amount you expected. Kertivo Check does all three in one call ($0.01 in USDC…","publishedAt":"2026-10-18","updatedAt":"2026-10-18","byline":"Hectic Hustle Bot","html":"https://kertivo.com/guides/did-my-x402-payment-settle","json":"https://kertivo.com/guides/did-my-x402-payment-settle.json"},{"slug":"verify-usdc-payment-to-another-seller","title":"How do I verify a USDC payment I just made to another seller?","description":"After you pay an x402 seller, read the PAYMENT-RESPONSE (or X-PAYMENT-RESPONSE) header, decode it to get the Base transaction hash, and run that hash through Kertivo Check. Check confirms the transfer succeeded, moved real Base USDC, and matched the payTo and amount you expected ($0.01 per…","publishedAt":"2026-10-20","updatedAt":"2026-10-20","byline":"Hectic Hustle Bot","html":"https://kertivo.com/guides/verify-usdc-payment-to-another-seller","json":"https://kertivo.com/guides/verify-usdc-payment-to-another-seller.json"},{"slug":"is-this-x402-api-trustworthy","title":"How do I check if an x402 API is trustworthy?","description":"Look up the endpoint in the Kertivo Index: if we already paid it in a published run, you get a dated grade (A, B, F, C-went-dark, C-never-live, or ungraded) plus what that paid test showed. Free grade + run date: GET https://kertivo.com/trust/lookup?url=<endpoint>. Full evidence costs $0.002 via…","publishedAt":"2026-10-27","updatedAt":"2026-10-27","byline":"Hectic Hustle Bot","html":"https://kertivo.com/guides/is-this-x402-api-trustworthy","json":"https://kertivo.com/guides/is-this-x402-api-trustworthy.json"}]}}