> ## 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.

# Tags

The x-recovea-tags request header: its shape, its limits, the four namespaces, and the rule that it never reaches your provider.

One request header carries every label you want on a request: which team, which feature, which of your own customers, which end user. The gateway stores the values so you can cut your spend by them. It compares and counts them; it never looks up what they mean.

## The shape

```http
x-recovea-tags: checkout,team:payments,customer:8812
```

Comma-separated. Whitespace around each piece is trimmed. Several header lines are read as one list, so this is the same request:

```http
x-recovea-tags: checkout
x-recovea-tags: team:payments,customer:8812
```

| Limit | Value |
| --- | --- |
| Tags per request | 32 |
| Characters per tag | 128 |

A 33rd tag is dropped and counted, never an error, and a tag longer than 128 characters is cut to 128. The header never fails a request because of its shape.

A second header, `x-recovea-project`, carries one project name for the request under the same 128-character bound ([Organization and keys](https://docs.recovea.ai/concepts/organization-and-keys/)).

## The four namespaces

A tag that starts with one of four prefixes is a dimension: it is kept in its own column so you can cut your spend by it. Any other tag is a plain label. The set is closed: an unknown prefix such as `foo:` is not an error, it is a plain label.

| Prefix | What it is for |
| --- | --- |
| `team:` | which of your teams made the request |
| `feature:` | which feature of your product |
| `customer:` | which of your customers it serves |
| `enduser:` | one person inside one of your customers |

The value after the colon is opaque. Nothing validates or interprets it, and nothing resolves it to a person.

`customer:` is read more strictly than the other three, because two customers must never collapse into one:

- **It is never cut short.** A value longer than 128 characters, or one that is not valid UTF-8, is dropped instead, and the request is counted with no customer. Two ids that shared their first 128 characters would otherwise count as one customer.
- **The first one decides.** Send one `customer:` tag per request; if you send more, the first is the one kept.
- **Case and spaces count.** `customer:8812` and `customer: 8812` are two customers. Whitespace around the whole piece is trimmed.
- **Put it on the call, not on the client.** The customer changes from one request to the next, and a header set once when the client is built labels every request with the first customer.

## The header never reaches your provider

`x-recovea-tags` and `x-recovea-project` are Recovea's own headers. They are removed before the request is forwarded, on every path, including a fail-open pass. Everything else you send goes through as you sent it.

## What is done with a value, and what never is

- It is compared, to find the right counter, and counted against.
- It lands on the record for the request, so you can cut your own spend by it on the platform's **Attribution** page and in its CSV export.
- It is never resolved to a person, an email, a company or a row in anybody's system. There is no such column.
- It is never put in a refusal body or a response header.
- Recovea never contacts your customers.
