API keys
Creating, rotating, and revoking API keys that authenticate requests to the Telmoni API, with rotation grace periods and security practices.
An API key (token) authenticates scripts, services, background workers, and the
Telmoni CLI to the Telmoni API. API keys belong
to a Project and are managed from the project's API keys page
(/{organization}/{project}/api-keys).
Creating a key
Project Owners and Admins can mint, rotate, and revoke API keys.
- Navigate to your project's API keys page.
- Select Mint key, which opens the form over the page, as New project opens.
- Provide a name describing what service uses the key (up to 100 characters), and optionally a description (up to 500).
- Choose what it opens: Send spans, the
ingestscope, which opens/otlp/v1/traces; Read the API, thereadscope, which opens/v1; or both. Both are on to start; a key needs at least one. A key baked into an agent's process should send alone, so a leak of it reads nothing. - Choose when it expires: 30 days, 90 days (the default), 1 year, or Never (not recommended).
Where the api_tokens feature flag is off, for the deployment or for the
organization, minting and rotating are refused with "API keys are switched off
right now."; revoking always works. The console
lets each person mint 5 keys, rotate 10 and revoke 20 a minute.
The raw token is displayed exactly once upon creation. Copy and store it in your secret manager immediately. Telmoni stores only a SHA-256 hash of the token; the plaintext appears in the mint or rotate answer alone.
Every key begins with the prefix telmoni_.
Using a key
Include the key as a bearer token in the HTTP Authorization header:
$ curl -H "Authorization: Bearer $TELMONI_API_KEY" https://api.telmoni.com/v1/organizationEach lane needs its scope: /v1 the read scope, and
/otlp/v1/traces, where spans are sent, the ingest scope. A
live key without the scope a lane needs is refused with 403
/errors/authz/forbidden.
The Telmoni CLI uses it from the TELMONI_API_KEY environment
variable, for each command and without saving it, asking first at a terminal,
or saves it with telmoni login --with-key, which reads it from standard input:
$ telmoni status # with TELMONI_API_KEY set to a key holding read
$ telmoni login --with-key < key.txtThe client SDKs send spans to ingest with a
key holding the ingest scope, from their configuration or TELMONI_API_KEY:
import { Telmoni } from 'telmoni';
const client = new Telmoni({ apiKey: process.env.TELMONI_API_KEY });A key is minted in a project, is deleted with it, and follows it if the project
is transferred to another organization. On /v1 it reads its project's
organization (GET /v1/organization) and its project's roster
(GET /v1/members), never the organization's whole roster: a key reads no more
than the project Admin who minted it can see. A key remains active regardless
of whether the individual user who created it leaves the project.
Who can see keys
Anyone on the project (Owner, Admin, or Member) can view the list of active keys: each key's name, what it opens, creation date, last-used date (written at most once a minute, so a busy key is not a write per request), and expiration date. The secret itself is never visible after creation.
Rotating a key
To replace a key while the old one keeps working for a day, select Rotate on its row on the API keys page.
Rotating a key produces a new telmoni_ token (shown once) and keeps the
previous token valid for a 24-hour grace period, or until its own expiry if
that comes sooner. Both tokens authenticate during that window; after it, the
old one is refused like a revoked key. The replacement keeps the key's name,
description and scopes, is recorded as minted by whoever rotated it, and expires 90 days
after rotation, whatever the old key's expiry was.
Minting, rotating and revoking a key are each recorded in the project's audit log.
Revoking a key
To immediately terminate a compromised or decommissioned key, select Revoke
on its row. Revocation takes effect immediately: subsequent requests using that
token fail with 401 Unauthorized. The record of a revoked or expired key is
deleted seven days later by the retention sweep.
Key security best practices
- Isolate by workload: Create distinct API keys for each service or automation rather than sharing a single key across multiple tasks.
- Rotate with grace windows: Rotate rather than revoke a key in use: the old key keeps authenticating for up to 24 hours while you deploy the new one.
- Server-side only: Keep API keys in environment variables or secure vault systems on servers. Never embed API keys into client-side code, frontend browsers, or mobile applications.
Agent skill
The telmoni skill: what it teaches a coding agent about Telmoni, and how to install it in Claude Code, Codex, Cursor, Antigravity, OpenCode and other agents that read SKILL.md.
Sending spans
Ingest over OpenTelemetry's protocol: the endpoint, the key it takes, what a span must carry, what is kept and what is dropped at the door, the answer, and the limits.