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 '{ "events": [ { "instance": "example", "message": "example", "name": "example", "payload": "example", "ts": "2026-04-15T12:00:00Z" } ], "logs": [ { "correlation_id": "example", "facility": "example", "message": "example", "severity": "example", "source": "example", "ts": "2026-04-15T12:00:00Z" } ], "metrics": [ { "instance": "example", "name": "example", "ts": "2026-04-15T12:00:00Z", "value": 1 } ], "owner": { "kind": "component", "ref": "example" }, "properties": [ { "instance": "example", "name": "example", "ts": "2026-04-15T12:00:00Z", "value": "example" } ], "source": "example", "ts": "2026-04-15T12:00:00Z" }'

Accepts per-lane observations (metrics, properties, events) and raw log lines for one owner and publishes them onto the ingest lane. Each lane validates against its own catalog: an unregistered name is rejected and reported in the response rather than silently dropped, and a property or event payload violating its type’s schema refuses the batch with a 422. 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
events

Natively caught occurrences, validated against event_type

Array<object> | null
object
instance

Discriminates many occurrences of one name on one owner

string
message

The occurrence’s human-readable line

string
name
required

A registered event_type name

string
>= 1 characters
payload

The occurrence’s structured payload, validated against the event_type’s payload schema

ts

When this occurred; defaults to the batch timestamp, then to ingest time

string format: date-time
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
metrics

Numeric observations, validated against metric_type

Array<object> | null
object
instance

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

string
name
required

A registered metric_type name

string
>= 1 characters
ts

When this was observed; defaults to the batch timestamp, then to ingest time

string format: date-time
value
required

The numeric observation

number format: double
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
properties

Categorical observations, validated against property_type and each type’s validation schema

Array<object> | null
object
instance

Discriminates many values of one name on one owner

string
name
required

A registered property_type name

string
>= 1 characters
ts

When this was observed; defaults to the batch timestamp, then to ingest time

string format: date-time
value
required

The observed value, shaped by the type’s data_type and validated against its validation schema

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
events
required
integer format: int64
logs
required
integer format: int64
metrics
required
integer format: int64
properties
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"
}