Authentication and limits
Tayho operators issue API keys on request. There is no public key-creation endpoint or end-user key management workflow in the MVP.Key kinds
Publishable keys use theth_pk_ prefix. They may be embedded in a browser application only when
the key has an exact origin allowlist and conservative quotas. A publishable key is an application
identifier with policy—not a substitute for wallet authorization.
Secret keys use the th_sk_ prefix and must remain on a trusted server. Never include one in a
browser bundle, mobile binary, repository, documentation example, or client-visible log.
Send either kind in a header:
/v1 REST operations. Realtime WebSockets use a single-use ticket
derived from the key instead of sending the key during the upgrade.
Scopes
Every generated REST operation shows
x-tayho-required-scope and its quota class. A key with the
wrong scope fails with 403; retrying the same key cannot fix it.
Keys can also be restricted by deployment environment, browser origin, source CIDR, status, and
expiry. Requests fail closed when a restriction cannot be satisfied.
Quota classes
Projects maintain separate per-minute budgets:readfor indexed reads;livefor RPC-backed calculations and action preparation reads;realtimefor new WebSocket connections; andsubmitfor relayed write intake and cancellation.
Rate-limit response
When admission rejects a request, expect HTTP429 with:
Retry-After, add jitter, and avoid parallel retries. The limit header describes
the rejecting budget, not necessarily every budget applied to the request.
For signed writes, reuse the same prepared SDK object or the exact same body and idempotency key.
For realtime, keep one shared subscription per application context and allow the SDK reconnect
loop to create a fresh ticket.
Authentication failures
Include
x-request-id, method, path template, status, and error code when requesting support. Never
include the API key, receipt capability, wallet signature, or full signed payload.