Tags
The x-recovea-tags request header: its shape, its limits, the four namespaces, and the rule that it never reaches your provider.
On this page
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
x-recovea-tags: checkout,team:payments,customer:8812Comma-separated. Whitespace around each piece is trimmed. Several header lines are read as one list, so this is the same request:
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).
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:8812andcustomer: 8812are 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.