API reference

The Telemetry Machine REST API, with its base URL, credentials, responses and errors.

Open in Claude

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

plaintext
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

CredentialSend it asIt may
A personal access tokenAuthorization: Bearer TOKENDo what you can do in the console, within the scopes that you gave it
An OAuth sign-in, such as an agent'sAuthorization: Bearer TOKENThe same, within the scopes that you granted
An ingest keyX-API-Key: KEYSend data, and post annotations once its annotate setting is on
A CI job's OIDC tokenAuthorization: Bearer TOKENPost 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:

200Response
{
  "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:

400Response
{
  "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.

StatusMeans
400The request is invalid. message says what to fix.
401The credential is missing, unknown or expired.
403The credential can't do this, such as a token without the scope.
404The organization has no such resource, or you can't read it.
409The request conflicts with what exists, such as a reused key.
429A limit is used up. The resource's page says which.