> ## Documentation Index
> Fetch the complete documentation index at: https://docs.recovea.ai/llms.txt
> Use this file to discover all available pages before exploring further.

# Content-free by schema

The metering record has no field that can hold a prompt, a completion or a tool argument. That is a property of the schema, not a retention policy.

Recovea does not promise to delete your prompts. It has nowhere to put them. The metering is content-free by schema: every field of the record the gateway writes for a request is an id, a count, a timing, a status or a value from a closed list, and there is no field that can hold a prompt, a completion, a tool argument, a raw path or a header value.

## What the record holds

For each request that goes through the gateway, one metering event:

| Kind | Fields |
| --- | --- |
| Ids | the request id, your organization, the key the request used |
| What was called | the provider, the endpoint class, the model you asked for and the model that answered |
| Counts | input, output, cached, reasoning and cache-write tokens, as your provider reported them; request and response sizes in bytes |
| Outcome | the provider's status, its finish or stop reason (from the provider's own closed list), whether it streamed |
| Timings | start, first byte from the provider, finish, and the time the gateway added |
| Cost, on a declared upstream | the cost the destination reported, when it reported one |
| Your labels | your tags, your project and your run id, exactly as you sent them |

A count your provider did not report is null, never a guess. The receipt written from the event is narrower still: twelve fields of ids, counts, a cost, a price-list version and a basis ([Prove](https://docs.recovea.ai/products/prove/)).

## What the gateway reads, and what it keeps

The gateway reads your provider's response as it passes through, to take the usage block the provider reports: the token counts. It keeps the counts and nothing else. Request and response bodies are never buffered or written down, and the gateway's logs and metrics follow the same schema rule.

On a streaming chat completion the usage block only arrives if the request asks for it, so the gateway asks on your behalf when your request says nothing about `stream_options`, and leaves the request alone when it does ([Meter](https://docs.recovea.ai/products/meter/#what-the-gateway-does)).

## The only text of yours that is stored

Your own labels: the values of `x-recovea-tags`, `x-recovea-project` and `x-recovea-run-id`. They are opaque. They are stored as you sent them so you can cut your spend by them, and nothing interprets them or resolves them to a person ([Tags](https://docs.recovea.ai/concepts/tags/)).

Recovea never reads a prompt to decide what a request was for. Every label on a cost comes from you.

## The same rule on the passive tap

The [passive tap](https://docs.recovea.ai/reference/passive-tap/) reports a call's envelope from your own process instead of routing it. Its schema is a published table of fifteen fields, and the server refuses a whole batch that carries any field not in the table, rather than trimming it, because trimming a field would mean reading it first.
