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

# Resource IDs

> One format for every id, with the resource type written on the front.

Every id we accept or return follows one format, so you can tell what you are holding without
looking it up.

```
rdr_xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx
└┬┘ └──────────────┬───────────────┘
 │                 └── 32 hex characters
 └──────────────────── resource type prefix
```

The full list of prefixes:

| Resource     | Prefix |
| ------------ | ------ |
| Redirect     | `rdr`  |
| Landing page | `lnd`  |
| Group        | `grp`  |
| Domain       | `dom`  |
| Widget       | `wdg`  |
| Pixel        | `pxl`  |
| Request      | `req`  |

An id of the wrong type is rejected with `400 invalid_request` before any lookup, so passing
`rdr_…` where a landing page belongs tells you what went wrong instead of coming back as a
puzzling `404`.

## Case

IDs are case-insensitive on input, everywhere they are accepted: path parameters, body fields,
bulk arrays. Responses always use lower case.

<Note>
  Normalisation runs before duplicate checking, so `rdr_aaa…` and `RDR_AAA…` in one bulk request
  count as the same id twice, and the second fails.
</Note>

## Request ids

Every response carries `X-Request-Id`, and every error body repeats it as `error.request_id`:

```
req_xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx
```

It is not a resource, and no endpoint accepts it. Log it on failures and quote it in support
tickets — it is how we find your exact request.
