Skip to main content

Authentication

The Tella API uses Bearer token authentication. Send a Tella API key or a WorkOS access token in the Authorization header.

Getting your API key

  1. Sign in to Tella
  2. Navigate to Settings > API Keys
  3. Click Create key
  4. Copy and securely store your key
API keys are shown only once when created. If you lose your key, you’ll need to generate a new one.

Using your API key

Include your API key in the Authorization header of every request:

Example request

WorkOS access tokens

You can also send a WorkOS access token as a Bearer token to /v1 endpoints. A claimed WorkOS agent-registration token authenticates as the Tella user who claimed it, in the workspace identified by its org_id claim. Unclaimed registrations and tokens without a recognized workspace cannot authenticate to the public API. See Tella’s agent authentication guide for the registration and claim flow.

API key format

Tella API keys follow this format:
  • Prefix: tella_pk_ (identifies it as a Tella public API key)
  • Suffix: 32 random alphanumeric characters

Security best practices

  • Don’t commit API keys to version control
  • Don’t include them in client-side code
  • Use environment variables to store keys
Generate new API keys periodically and revoke old ones. This limits the impact if a key is compromised.
Create separate API keys for development, staging, and production environments.

Idempotent requests

A request that creates or changes something (POST, PATCH, PUT, DELETE) can be resent safely by sending an Idempotency-Key header: any string of at most 255 characters that is unique for your credential, such as a UUID. If the first attempt completed but its response was lost (timeout, dropped connection), the resend returns the stored outcome instead of applying the change again. For a claimed agent registration, keys remain scoped to the same registration when its access token rotates.
  • The outcome is stored for 24 hours and replayed for an identical request (same method, path, query string and body).
  • Reusing a key with a different request returns 400 bad_request.
  • Resending while the first attempt is still running returns 409 conflict; retry after a moment.
  • 429 rate_limited, 409 edit_conflict and pre-execution 503 unavailable outcomes are not stored, so those requests can be retried with the same key.
  • A generic 500 server_error is stored and replayed because the failure may have happened after the change was applied. Check whether it applied before trying again with a new key.
  • If the key itself cannot be recorded, the request is not executed and answers 503 unavailable with a Retry-After header; resend it unchanged.
  • A key whose first attempt ended without recording an outcome (for example, the request was cut off) keeps returning 409 conflict rather than running the request again. If a resend still answers 409 after a few minutes, check whether the change applied, then continue with a new key.
Requests without the header are never deduplicated. MCP tool calls use the same mechanism through _meta.idempotencyKey; see MCP server.

Error responses

401 Unauthorized

Returned when the Bearer credential is missing or invalid:
Common causes:
  • Missing Authorization header
  • Incorrect API key format
  • Revoked or expired API key

403 Forbidden

Returned when the API key doesn’t have permission for the requested resource:

409 Conflict

Returned when the request conflicts with the resource’s current state, for example a resend whose first attempt under the same Idempotency-Key is still in progress:

503 Service Unavailable

Returned when a dependency refused before the request did anything, for example when an Idempotency-Key could not be recorded. Unlike a 500, nothing was executed: resend the same request after the Retry-After delay.

404 Not Found

Returned when the API path doesn’t exist:
Use the docsUrl value to find the supported endpoint and method.

Revoking API keys

To revoke an API key:
  1. Go to Settings > API Keys
  2. Find the key you want to revoke
  3. Click Revoke
Revoked keys immediately stop working for all requests.
Last modified on September 28, 2026