Sign in

Concepts

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

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

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.