API reference
The Telemetry Machine REST API, with its base URL, credentials, responses and errors.
The Telemetry Machine API is organized around the resources of your organization. It takes JSON request bodies, returns JSON, and uses standard HTTP status codes. Each resource's page describes its object and its endpoints:
- Annotations: deploys, changes and comments, drawn on your charts.
- CI trust rules: the repositories whose CI jobs may post annotations without a stored secret.
To do something, rather than look up a field, start from a guide, such as Annotations. Telemetry goes over OTLP, not through this API (refer to Send OpenTelemetry), and events go to JSON events.
Base URL
https://telemetrymachine.com/api/organizations/{org}{org} is your organization's slug, the part after telemetrymachine.com/ when you're signed in. A credential works only in its own organization.
Authentication
| Credential | Send it as | It may |
|---|---|---|
| A personal access token | Authorization: Bearer TOKEN | Do what you can do in the console, within the scopes that you gave it |
| An OAuth sign-in, such as an agent's | Authorization: Bearer TOKEN | The same, within the scopes that you granted |
| An ingest key | X-API-Key: KEY | Send data, and post annotations once its annotate setting is on |
| A CI job's OIDC token | Authorization: Bearer TOKEN | Post annotations, from a repository that a trust rule lets in |
Create a personal access token in Settings → Personal tokens. Each endpoint says which credentials it takes, and which scope a token needs.
Responses
A response wraps its result in an envelope, with the result in data:
{
"status": 200,
"data": {
"public_id": "ann_01m5x9q2r7t4k8w3e6y1p0z5ab",
"type": "deploy",
"message": "checkout 1.42.0"
}
}A list puts its items in data under the resource's plural name, such as annotations. Times are RFC 3339 in UTC, such as 2026-10-26T13:50:04.000Z. Send times with a zone.
Errors
A failed request gets a 4xx or 5xx status, and a body that says why:
{
"statusCode": 400,
"message": ["type must be one of deploy, change, comment"],
"error": "Bad Request"
}message is a list when the body fails validation, and a string otherwise. A field that an endpoint doesn't take is refused with 400, so a misspelled field name never passes silently.
| Status | Means |
|---|---|
| 400 | The request is invalid. message says what to fix. |
| 401 | The credential is missing, unknown or expired. |
| 403 | The credential can't do this, such as a token without the scope. |
| 404 | The organization has no such resource, or you can't read it. |
| 409 | The request conflicts with what exists, such as a reused key. |
| 429 | A limit is used up. The resource's page says which. |