Push telemetry for an owner
const url = 'https://example.com/api/v1/telemetry:push';const options = { method: 'POST', headers: {'Content-Type': 'application/json'}, body: '{"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"}'};
try { const response = await fetch(url, options); const data = await response.json(); console.log(data);} catch (error) { console.error(error);}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.
Request Body required
Section titled “Request Body required ”object
A URL to the JSON Schema for this object.
Raw untyped log lines. No registry gate
object
Threads related lines and their derived events
The line’s facility, when classified
The raw log text
The line’s severity, when classified
The channel the line arrived on; falls back to the batch source
When the line arrived; defaults to the batch timestamp
The entity every row in the batch lands under
object
The owner arc. Only component today; system and location arrive with #422
The owning entity, by name or id
Registry-resolved observations. The registry decides which table each lands in
object
Discriminates many values of one name on one owner (three fan speeds, per-port counters)
The canonical property name, or a registered event_type name
The value for a metric-kind property
The value for a state-kind property, or the message for an event_type
Who observed this batch (recorded as the provenance source on every row)
Batch timestamp; a per-item timestamp overrides it
Responses
Section titled “ Responses ”Accepted
object
A URL to the JSON Schema for this object.
object
Names dropped by reject-not-project. Reported synchronously so a caller learns about a typo
object
Example
{ "$schema": "/api/v1/schemas/PushOutputBody.json"}default
Section titled “default ”Error
object
A URL to the JSON Schema for this object.
A human-readable explanation specific to this occurrence of the problem.
Optional list of individual error details
object
Where the error occurred, e.g. ‘body.items[3].tags’ or ‘path.thing-id’
Error message text
The value at the given location
A URI reference that identifies the specific occurrence of the problem.
HTTP status code
A short, human-readable summary of the problem type. This value should not change between occurrences of the error.
A URI reference to human-readable documentation for the error.
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"}