Contract v1 · generated reference
Authentication
Identity is one input to authority; it is never permission by itself.
| Transport | Caller proof | Server decision |
|---|---|---|
| Callable | Firebase ID token plus required App Check token | Re-derive role, membership and resource ownership |
| Firestore/Auth SDK | Firebase SDK session or method-specific credential | Security rules and Firebase Auth policy |
| Webhook | Provider signature over the unmodified raw body | Timestamp, provider mode and inbox/replay checks |
| Scheduled | Managed platform invocation | Platform-only trigger and bounded idempotent work |
Step-up and token recovery
Consequential staff actions can require recent authentication. HandleSTEP_UP_REQUIRED by completing the approved reauthentication flow, then issue a fresh request. Handle EXPIRED by refreshing the relevant credential or quote; do not silently replay a mutation.
Never trust client authority
Do not send or accept a client-selected user id, organization id, role or owner as proof of permission. The server must derive those values from verified context and authoritative state.
Common integration contract
Sandbox and Production are isolated
Run examples only in a governed sandbox or local emulator. Sandbox identities, App Check tokens, payment fixtures and data do not grant Production access. The typed ports do not ratify a public numeric quota; enforcement may be stricter. Honor RATE_LIMITED and the server's retry-after value.
Authentication and authorization
Firebase Auth proves identity. App Check proves the approved app where a callable requires it. Roles, organization membership, requester identity and resource ownership are derived and rechecked by the server.
Authentication guideErrors and recovery
Stable error codes distinguish validation, denial, conflict, expiry, authority pending, rate limiting and temporary unavailability. Never infer success from an HTTP redirect or a browser state.
Error catalogueIdempotency, concurrency and retry
Reuse an idempotency key only for an identical retry. A new intent needs a new key. Preserve version preconditions and reload after a conflict.
Retry guidanceChanges and escalation
Check compatibility before adopting a new contract version. Review the changelog, service status and support guidance before retrying a persistent failure.
| Family | Client decision |
|---|---|
| Authentication / authorization | Refresh or step up only when instructed; do not retry a denial unchanged. |
| Validation / conflict / expiry | Correct or reload state, then obtain confirmation for a new intent. |
| Rate limited / unavailable | Honor retry-after and use bounded backoff; inspect service status. |
| Unknown / server | Fail closed and escalate with a privacy-safe correlation id. |
Executable network examples are published only when the exact wire schema is producer-proven. Check the selected operation's example-availability status; an unresolved schema is a release blocker, not permission to guess.
Verified examples and local-only recovery snippets