Skip to main content
When using agent.serve(), you can protect HTTP endpoints with authentication. Set agent.auth to an auth provider and all requests to /run and webhook endpoints require valid credentials.

API Key Authentication

Clients send the key via the X-API-Key header or the Authorization: Bearer <key> header:
str | Set[str]
required
A single API key or a set of allowed keys.
str
default:"X-API-Key"
HTTP header name to read the key from. Falls back to the Authorization header if the primary header is empty.
User ID is derived from the key hash: apikey_<sha256[:12]>.

JWT Authentication

Clients send a Bearer token in the Authorization header:
str
required
Secret key or public key for token validation.
str
default:"HS256"
JWT algorithm.
str
Expected audience claim.
str
Expected issuer claim.
User ID is extracted from token claims, checking sub, then user_id, then id. Remaining claims are available in AuthContext.metadata.
Requires pyjwt: pip install pyjwt or pip install 'definable[jwt]'

Allowlist Authentication

For messaging interfaces (Telegram, Discord), use AllowlistAuth to restrict access by user ID:
Set[str]
required
Set of allowed user IDs.
Set[str]
Optional set of allowed chat/group IDs.
Set[str]
Optional platform filter. When set, the provider only applies to requests from these platforms (e.g., {"telegram", "discord"}). Returns None for other platforms.
AllowlistAuth only applies to AuthRequest instances (messages from interfaces). It returns None for raw HTTP requests, making it safe to combine with API key auth.

Composite Authentication

Chain multiple providers with CompositeAuth. It tries each in order and returns the first successful result:
This is the recommended pattern for agents that serve both HTTP endpoints and messaging interfaces — API keys protect /run while the allowlist controls messaging access.
AuthProvider
One or more auth providers. At least one is required. Supports mixed sync/async providers.

Per-Webhook Auth Override

Individual webhooks can override the agent-level auth:

AuthContext

When authentication succeeds, the provider returns an AuthContext:

Custom Auth Provider

Implement the AuthProvider protocol to create your own auth backend:
The authenticate method can be sync or async. Return AuthContext on success, None on failure (returns 401).

Auth Bypass

  • /health is always public
  • Webhooks with auth=False bypass authentication
  • In dev mode, /docs, /redoc, and /openapi.json are also public