The short version: request metadata, with identifiers stored as salted hashes. Not your payloads. One page, matching what the code actually does.
Every API call writes one request-log row, used for operating the service and computing public metrics (uptime, call counts, revenue buckets). Each row holds:
Quota counters (free tiers, demo tier) keep the same kind of hashed identifier with first-seen and last-seen timestamps.
We do not store request bodies or the content of what buyers ask: not the research queries, not the code sent for verification, not the job payloads. Paid POSTs may carry an Idempotency-Key; when they do, the request body is hashed (never stored) and the answer is cached for up to 24 hours so a retry replays it without a second charge. Card numbers never touch us: Stripe processes the card payment, and at claim time we receive only the checkout session id and the buyer's email address, which is stored with the credit account.
Two flows are outside our logs by nature. Stripe payments are processed by Stripe under their privacy policy; we never see card details. x402 payments settle in USDC on Base, a public chain: the payer wallet, the amount, and the transaction hash are visible to anyone who looks, forever. The CDP facilitator (Coinbase) sees the payment payloads it settles. Server logs live on one DigitalOcean droplet with access restricted to the operator.
Request-log rows and quota counters are kept for service operation and metrics; there is no advertising use and no sale of data. Ask for deletion of records tied to your wallet, key hash, or email at hello@attester.dev and we delete them, except where an on-chain record or a legal obligation makes that impossible. On-chain transfers cannot be altered or removed by anyone.