Skip to content

Push telemetry for an owner

POST
/telemetry:push
curl --request POST \
--url https://example.com/api/v1/telemetry:push \
--header 'Content-Type: application/json' \
--data '{ "logs": [ { "correlation_id": "example", "facility": "example", "message": "example", "severity": "example", "source": "example", "ts": "2026-04-15T12:00:00Z" } ], "owner": { "kind": "component", "ref": "example" }, "samples": [ { "instance": "example", "name": "example", "number": 1, "text": "example" } ], "source": "example", "ts": "2026-04-15T12:00:00Z" }'

Accepts samples and raw log lines for one owner and publishes them onto the ingest lane. The registry decides where each sample lands (metric, state, or a caught event); an unregistered name is rejected and reported in the response rather than silently dropped. Gated by telemetry:push, and the caller’s scope must cover the declared owner; an out-of-scope owner is a non-disclosing 404.

Media type application/json
object
$schema

A URL to the JSON Schema for this object.

string format: uri
logs

Raw untyped log lines. No registry gate

Array<object> | null
object
correlation_id

Threads related lines and their derived events

string
facility

The line’s facility, when classified

string
message
required

The raw log text

string
>= 1 characters
severity

The line’s severity, when classified

string
source

The channel the line arrived on; falls back to the batch source

string
ts

When the line arrived; defaults to the batch timestamp

string format: date-time
owner
required

The entity every row in the batch lands under

object
kind
required

The owner arc. Only component today; system and location arrive with #422

string
Allowed values: component
ref
required

The owning entity, by name or id

string
>= 1 characters
samples

Registry-resolved observations. The registry decides which table each lands in

Array<object> | null
object
instance

Discriminates many values of one name on one owner (three fan speeds, per-port counters)

string
name
required

The canonical property name, or a registered event_type name

string
>= 1 characters
number

The value for a metric-kind property

number format: double
text

The value for a state-kind property, or the message for an event_type

string
source

Who observed this batch (recorded as the provenance source on every row)

string
ts

Batch timestamp; a per-item timestamp overrides it

string format: date-time

Accepted

Media type application/json
object
$schema

A URL to the JSON Schema for this object.

string format: uri
accepted
required
object
logs
required
integer format: int64
samples
required
integer format: int64
rejected

Names dropped by reject-not-project. Reported synchronously so a caller learns about a typo

Array<object> | null
object
name
required
string
reason
required
string
Example
{
"$schema": "/api/v1/schemas/PushOutputBody.json"
}

Error

Media type application/problem+json
object
$schema

A URL to the JSON Schema for this object.

string format: uri
detail

A human-readable explanation specific to this occurrence of the problem.

string
errors

Optional list of individual error details

Array<object> | null
object
location

Where the error occurred, e.g. ‘body.items[3].tags’ or ‘path.thing-id’

string
message

Error message text

string
value

The value at the given location

instance

A URI reference that identifies the specific occurrence of the problem.

string format: uri
status

HTTP status code

integer format: int64
title

A short, human-readable summary of the problem type. This value should not change between occurrences of the error.

string
type

A URI reference to human-readable documentation for the error.

string format: uri
default: about:blank
Example
{
"$schema": "/api/v1/schemas/ErrorModel.json",
"detail": "Property foo is required but is missing.",
"instance": "https://example.com/error-log/abc123",
"status": 400,
"title": "Bad Request",
"type": "about:blank"
}