Skip to main content
POST
Send a heartbeat and receive settings

Authorizations

Authorization
string
header
required

Runner token beginning with agt_r, returned once by POST /v1/runners

Body

application/json

POST /v1/runners/me/heartbeats request.

The capability report rides the first beat and any beat where the probe result changed. holds and closing ride every beat.

closing
boolean
required

True when the runner's held-sandbox list is final. Any previously held sandbox missing from holds is released immediately.

holds
string[]
required

Every fleet this runner holds a frozen sandbox for, waiting for that fleet's next event. A fleet missing here is held nowhere on this runner.

Maximum array length: 64
Required string length: 36
capability_report
object | null

What this host can enforce, when the probe result is being reported.

selftest
object | null

A verdict produced since the last beat, by request or by startup probe.

Response

OK

POST /v1/runners/me/heartbeats reply.

Carries the current assignment on EVERY beat, so a dashboard change reaches the host within one interval.

assigned_policy
object
required

The runner's current assignment.

degraded
boolean
required

Whether the row reads degraded.

heartbeat_interval_ms
integer<int32>
required

Milliseconds to wait before the next heartbeat. Use this server-provided interval to avoid being marked offline.

Required range: x >= 0
release_holds
string[]
required

Fleets among the beat's holds the runner should let go of: no longer active, or leased by another runner since. The runner destroys their sandboxes.

selftest_requested
boolean
required

An operator asked this runner to self-test. Rides the beat like the assignment does — one interval, no second endpoint, no host visit.

status
enum<string>
required

Whether to keep working, drain, or stop.

Available options:
ok,
drain,
stop
degraded_reason
string | null

Why it reads degraded.