Claude Platform Docs

Update a Telemetry Destination

POST/v1/organizations/telemetry_destinations/{destination_id}

Change a telemetry destination's settings, its state, or which workspaces it covers.

Send at least one field. Omitted fields keep their stored values, except the registered headers, which a change of the endpoint's hostname or port removes. Only display_name, traces, traces.endpoint_url, traces.content_mode, traces.max_content_bytes, and individual headers values accept null.

If another request changes the destination while the update runs, the API returns a 409 conflict_error. Read the destination again, then retry the update.

See the OpenTelemetry export guide to learn more about changing a destination.

Path parameters
destination_id: string

ID of the destination (tdst_...).

Headers
"anthropic-version": optional string
"anthropic-beta": optional array of AnthropicBeta

Optional header to specify the beta version(s) you want to use.

One of the following:
string
"message-batches-2024-09-24"
"prompt-caching-2024-07-31"
"computer-use-2024-10-22"
"computer-use-2025-01-24"
"pdfs-2024-09-25"
"token-counting-2024-11-01"
"token-efficient-tools-2025-02-19"
"output-128k-2025-02-19"
"files-api-2025-04-14"
"mcp-client-2025-04-04"
"mcp-client-2025-11-20"
"dev-full-thinking-2025-05-14"
"interleaved-thinking-2025-05-14"
"code-execution-2025-05-22"
"extended-cache-ttl-2025-04-11"
"context-1m-2025-08-07"
"context-management-2025-06-27"
"model-context-window-exceeded-2025-08-26"
"skills-2025-10-02"
"fast-mode-2026-02-01"
"output-300k-2026-03-24"
"user-profiles-2026-03-24"
"user-profiles-2026-08-18"
"user-profiles-2026-09-04"
"advisor-tool-2026-03-01"
"managed-agents-2026-04-01"
"cache-diagnosis-2026-04-07"
"dreaming-2026-04-21"
"thinking-token-count-2026-05-13"
"server-side-fallback-2026-06-01"
"server-side-fallback-2026-07-01"
"fallback-credit-2026-06-01"
"fallback-credit-2026-07-01"
"agent-memory-2026-07-22"
"mid-conversation-tool-changes-2026-07-01"
"compact-2026-01-12"
"computer-use-2025-11-24"
"mcp-tunnels-2026-06-22"
"structured-outputs-2025-11-13"
"task-budgets-2026-03-13"
"thinking-display-updates-2026-08-18"
"ce-user-management-2026-07-13"
"mid-conversation-output-config-2026-07-01"
"thinking-binding-controls-2026-08-01"
"mid-conversation-system-clear-at-2026-08-21"
"compact-2026-09-04"
"inline-tools-2026-09-15"
"mcp-client-2026-09-15"
"ce-plugins-2026-09-01"
"spend-limit-reads-2026-09-26"
"telemetry-destinations-2026-08-11"
Body
display_name: optional string or null

New human-readable name, 1 to 255 characters. Null clears it.

endpoint_url: optional string

The new base URL of the destination's OTLP/HTTP endpoint. The same rules as on create apply.

A change of hostname or port first removes every registered header, so send the headers for the new endpoint in the same request. When the destination has a traces.endpoint_url, such a change must also set traces.endpoint_url to a URL with the new hostname and port, or to null. A change of the path alone keeps the headers.

maxLength2048
headers: optional map[string] or null

Headers to set or remove. The API merges them into the destination's headers by name.

Names compare case-insensitively. A string value sets or replaces that header. A null value removes it. Headers that you omit don't change. The field itself can't be null.

A request that sets a header value must also include endpoint_url. The current URL is accepted.

The resulting set must stay within the same limits as on create. When the request sets a value, each stored value that it doesn't set counts as 4,096 bytes toward the 16,384-byte limit, because you can't read its real length. So to change one header of a destination that has four or more other headers, send the values of the others again in the same request.

Whether the destination receives deliveries after the update. The field can't be null.

One of the following:
BetaTelemetryDestinationStateEnabledParams object{ type: "enabled" }

Start deliveries to the telemetry destination again.

This doesn't reset delivery_health.

type: "enabled"
BetaTelemetryDestinationStateDisabledParams object{ type: "disabled" }

Stop deliveries to the telemetry destination.

Spans produced while it is disabled aren't delivered later. A destination that is already disabled keeps its reason.

type: "disabled"
traces: optional BetaTelemetryDestinationTracesParams { content_mode, enabled, endpoint_url, max_content_bytes } or null

The traces settings to change. Omitted settings keep their stored values.

null sets every traces setting to its create default.

content_mode: optional BetaTelemetryDestinationContentMode or null

What the exported spans contain. Defaults to metadata_only on create.

On update, null sets metadata_only.

One of the following:
"metadata_only"

The spans contain identifiers, timing, status, token counts, and similar metadata. They don't contain prompt text, completion text, or tool inputs and outputs.

"content"

The spans contain the same metadata as metadata_only, plus message and tool content.

An organization with a data-handling restriction, such as under HIPAA, can't choose this mode. The API exports only metadata for such an organization, even to a destination that already has content.

enabled: optional boolean

Whether the destination receives traces. Defaults to true on create. It cannot be null.

endpoint_url: optional string or null

The full URL of your collector's traces endpoint, for a collector that takes traces on a path other than /v1/traces. The API posts traces to it exactly as given and appends nothing.

The same rules as for endpoint_url apply, except that any path is allowed. It must have the same scheme, host, and port as endpoint_url. At most 2,048 characters.

On create, null is the same as leaving it out. On update, null removes it. The API then posts traces to endpoint_url with /v1/traces appended. A change of this URL alone keeps the registered headers.

maxLength2048
max_content_bytes: optional number or null

The most bytes of content that one exported span can contain, from 1 up to the API's maximum. null sets no bound, so only the API's maximum applies.

On create, leaving it out is the same as null. The error for a value above the maximum states the maximum.

formatint32

The new workspace scope, in the same form as on create. The field can't be null.

The API refuses an update that changes the type or sends workspace_ids while the destination's list has more than 750 workspaces. Remove workspaces one at a time until 750 or fewer remain, then send the update again.

One of the following:
Returns
BetaTelemetryDestination object{ type: "telemetry_destination", id, created_at, 8 more }

An OpenTelemetry destination: an OTLP/HTTP endpoint, the request headers sent with every delivery to it, what the exported spans contain, and which workspaces it covers. A destination belongs to an organization. A workspace's spans go to every enabled destination that covers it.

Update a Telemetry Destination
curl https://api.anthropic.com/v1/organizations/telemetry_destinations/$DESTINATION_ID \
    -H 'Content-Type: application/json' \
    -H 'anthropic-version: 2023-06-01' \
    -H 'anthropic-beta: telemetry-destinations-2026-08-11' \
    -H "X-Api-Key: $ANTHROPIC_API_KEY" \
    -d '{}'
Returns Examples
Response 200
{
  "id": "id",
  "created_at": "2019-12-27T18:11:19.117Z",
  "delivery_health": {
    "last_error": "last_error",
    "last_error_at": "2019-12-27T18:11:19.117Z",
    "last_success_at": "2019-12-27T18:11:19.117Z"
  },
  "display_name": "display_name",
  "endpoint_url": "endpoint_url",
  "header_names": [
    "string"
  ],
  "state": {
    "type": "enabled"
  },
  "traces": {
    "content_mode": "metadata_only",
    "enabled": true,
    "endpoint_url": "endpoint_url",
    "max_content_bytes": 0
  },
  "type": "telemetry_destination",
  "updated_at": "2019-12-27T18:11:19.117Z",
  "workspaces": {
    "type": "all"
  }
}