Identifiers
ID format, prefixes, key formats and the rules that make identifiers safe to log and route on.
Format
Rules:
- Opaque to clients. Never parse an ID beyond its prefix. Length and alphabet may change.
- Globally unique, including across regions. The random component is 64 bits; collision probability is negligible at any realistic volume.
- Not sequential. IDs leak no ordering and no volume information.
- Case-sensitive.
sess_2kQ9xwR4andsess_2kq9xwr4are different IDs. - Safe to log. IDs are not secrets. Keys and tokens are, and are never logged.
Prefixes
| Prefix | Object |
|---|---|
org_ | Organization |
proj_ | Project |
mem_ | Member |
eu_ | End user |
key_ | API key record (not the key itself) |
sess_ | Session |
run_ | Run |
tcall_ | Tool call |
tpl_ | Template |
vol_ | Volume |
snap_ | Snapshot |
bprof_ | Browser profile |
pol_ | Policy |
node_ | Node (internal) |
pool_ | Warm pool (internal) |
evt_ | Webhook event |
whep_ | Webhook endpoint |
inv_ | Invoice |
cred_ | Credit |
pl_ | Price list |
aud_ | Audit entry |
req_ | Request (returned as X-Request-Id) |
Credentials
Credentials have their own format, deliberately different from object IDs so they are visually distinct in a log or a code review.
| Form | Example | Lives | Capability |
|---|---|---|---|
| Secret key | wb_sk_live_… | Server only | Everything in its scope set |
| Publishable key | wb_pk_live_… | Browser, mobile | Mint scoped end-user tokens, nothing else |
| Session token | wb_st_… | An end user's client | One session, short TTL, no control-plane writes |
The wb_ marker exists so that GitHub secret scanning, gitleaks and similar tools can recognise a
leaked key. A key detected in a public repository is revoked automatically and the organization's
owners are notified.
test keys operate against a separate test environment with simulated compute: the full API, no
real sandboxes, no charges.
Digests
Templates and policies are identified by content hash, because the name is a moving pointer and the digest is what actually ran.
tpl_base_ubuntu_24_04@sha256:9f3c1a… template, pinned pol_build_tools@7 policy, version-pinned pol_build_tools@sha256:4b8e2d… policy, digest-pinned
Session records always store the resolved digest, never the friendly name. "Which image was this session running" must be answerable years later, after the name has been repointed many times.
Idempotency keys
Client-generated, opaque to the platform, up to 255 characters. A UUID v4 is the recommended choice.
Idempotency-Key: 7c9e6679-7425-40de-944b-e07fc1f90ae7
Scoped to (api_key, route, key) and retained 24 hours. See pagination and
idempotency.
Request IDs
Every response carries X-Request-Id: req_…. Include it in any support conversation; it resolves to
the full request trace, including the placement decision if the request created a session.
Cursors
Pagination cursors are opaque, signed, and tied to the query that produced them.
cursor=eyJ0IjoxNzU5NzQ…
Changing any filter invalidates the cursor. Cursors expire after one hour. Never construct one.
Regions and zones
Not prefixed, because they appear in hostnames.
bom1 region bom1-b zone
Region codes are a three-letter locality plus an ordinal. The ordinal distinguishes independent
builds in the same metro, which may have different capabilities — a second Mumbai region would be
bom2 and might offer tiers the first does not.
Meter names
Dotted, lowercase, with the unit implied by the suffix.
tier2.session_s per-second, tier-specific cpu_ms shared across tiers egress_gb storage.volume_gib_month
Tier-specific meters are prefixed with the tier; shared meters are not. Meter names are part of the API contract — a renamed meter would break every customer's cost reporting, so names are added and deprecated, never repurposed.