Skip to content

HTTP API

Freebird exposes public protocol routes and a separately protected operator control plane. Route availability can also depend on configuration and readiness state. The lists below describe the supported V4 surface.

Public issuer routes

The issuer publishes discovery metadata and accepts blinded issuance requests:

Method Path Role
GET /.well-known/issuer V4 issuer metadata.
POST /v1/oprf/issue One V4 blinded issuance evaluation.
POST /v1/oprf/issue/batch Bounded V4 batch issuance.

V4 issuance accepts a blinded element and may require a request-bound sybil_proof. See Client Sybil Proofs for its contract.

Public verifier routes

Method Path Role
GET /health Basic verifier health.
GET /ready Readiness after configured dependencies are available.
GET /.well-known/verifier Verifier ID, audience, scope digest, and accepted token families.
POST /v1/check Validate a V4 token without consuming it.
POST /v1/verify Validate and consume a token; replay is rejected.
POST /v1/verify/batch Bounded batch validation and consumption.

The single-token verification body is:

{"token_b64":"<base64url token>"}

/v1/check and /v1/verify return a response containing ok and verified_at; failures may include an error code. A successful check does not consume the token. A successful verify records its spend/nullifier, so a later verify of the same token is rejected. Batch requests contain a tokens array of objects with token_b64; the batch response contains per-item results and aggregate counters. Batch limits are enforced by the service.

Health and issuer process routes

The issuer also has process/readiness checks at /healthz and /readyz. These are distinct from verifier /health and /ready. Use the endpoints exposed by the deployment in its health checks; do not assume a health route is an issuance or verification route.

Admin routes

Issuer and verifier admin routers live under /admin. They require X-Admin-Key: <ADMIN_API_KEY> or the authenticated session cookie created by POST /admin/login. Restrict this control plane at the network boundary; it is not a public client API. The complete supported operator route inventory is in Admin Operations, including invitations, vouching, WebAuthn, keys, and audit operations.

For issuance proofs and browser operations, also consult Client Proofs and WebAuthn Browser Flow.

Transport and errors

Production traffic must use HTTPS through the configured trusted proxy and REQUIRE_TLS=true. Public routes are rate-limited. Clients should handle generic verification/issuance failures and stable replay rejection without depending on internal error text. Never put private keys, blinding state, capabilities, bearer bodies, or nullifiers in URLs or logs.