Idempotency and request IDs
Making a mutation safe to retry, and making a failure traceable afterwards.
Universe implementation Verified 2026-08-31
Describes what a Bitcoin Universe service actually does today. It is not a statement about the protocol in general.
- Page ID
-
develop/idempotency-and-request-ids - Normative authority
- Universe implementation documentation
- Networks
- mainnet
- Documentation version
- 2026.08
- Audience
- developer, integrator
- Owner
- bitcoin-universe-docs
- Sources
-
- Universe ARC-20 index and Marketplace v1 authority
at
670030e50071private repository - Universe Atomicals NFT, Realm, and Subrealm index
at
1d9109c68d95private repository
- Universe ARC-20 index and Marketplace v1 authority
at
Это содержимое пока не доступно на вашем языке.
Request identifiers
Section titled “Request identifiers”Every response carries a request identifier. It is the field to log, and the field to quote in a support question.
Log it on success as well as on failure. A wrong result you cannot trace is much harder to explain than a failure you can.
Idempotency keys
Section titled “Idempotency keys”Marketplace mutations require an Idempotency-Key. It makes a retry safe: the same key for the
same request returns the same result rather than performing the action twice.
Rules:
- Generate one key per logical action, not per HTTP attempt.
- Reuse it for every retry of that action.
- Never reuse it for a different action.
- Store it with your own record of the action, so a retry after a restart uses the same key.
- Treat a conflict as a signal that the key was reused for different content, and inspect rather than retrying.
Idempotency scope
Section titled “Idempotency scope”Keys are scoped per protocol lane. The four Marketplace authorities are isolated, so a key used in one lane does not collide with the same key in another.
Replay protection
Section titled “Replay protection”Public mutations also carry a timestamp and a nonce inside the signed string, which makes replay of a captured request detectable. Idempotency and replay protection solve different problems:
| Control | Prevents |
|---|---|
| Idempotency key | Your own retry performing the action twice |
| Timestamp and nonce | Someone else replaying a captured request |
You need both.
A safe retry loop
Section titled “A safe retry loop”- Generate and persist an idempotency key.
- Send the request.
- On 429, 500, or 503, wait with exponential backoff and jitter, then retry with the same key.
- On 409, stop and inspect. Do not retry with a new key hoping it works.
- On success, record the result and the request identifier.
- Bound the number of attempts.
Source
Section titled “Source”Authentication and errors.