Receipts and headers
Every call says what it was and what it cost on the reply itself, and the account keeps a record of each call without its content.
Reply headers
moth-request-idThe call's id, req_ and 20 characters, on every reply including errors. The same id is in x-request-id and request-id, which the OpenAI and Anthropic SDKs readmoth-charged-microsWhat the call cost in millionths of a dollar, on a chat reply that succeeded and isn't streamed. A media job reports its cost as charged_usd once it endsretry-afterSeconds to wait, on most 429, 503 and 529 errorsStreams
A stream's headers are sent before its cost is known, so an OpenAI-format stream that ends normally reports the charge in its last usage chunk as charged_micros when you set stream_options.include_usage to true. A stream that ends in an error sends no usage chunk, and an Anthropic-format stream doesn't report the charge at all, so read those calls in activity.
{"object": "chat.completion.chunk", "choices": [], "usage": {"prompt_tokens": 290, "completion_tokens": 180, "total_tokens": 470}, "charged_micros": 447}What is recorded
Each settled call is recorded by account, key, model, token counts or units, charge and time taken, and the prompt and the reply are not recorded anywhere. Usage adds the records up by day and by model, and activity lists the latest 200 calls.


How long it is kept
- Each call's record is kept for 90 days, then folded into one total per day, account and model, without the key, and deleted.
- Server logs hold ids, counts and statuses, never content, in one file per UTC day, deleted seven days after that day began.
- A job's record is deleted 24 hours after the job ends, and its files can't be fetched after that.
Quote the request id. When you write to us about a call, send its moth-request-id within six days, while the logs still hold it.