Documentation menu

Webhooks

Events delivered to your endpoint as signed POST requests: run.completed, episode.failed, threshold.crossed, regression.detected, estop.triggered. Acknowledge with any 2xx.

EVENT run.completed

A run finished and its result is available

Sent when any run reaches `completed`. The payload carries the full result — n, rate, CI, clusters, both meters, cost.

ParameterInTypeDescription
id *bodystring
type *bodyrun.completed | episode.failed | threshold.crossed | regression.detected | estop.triggered
created *bodystring
data *bodyobject

Example payload

{
  "id": "evt_3301",
  "type": "run.completed",
  "created": "2026-08-29T11:37:48Z",
  "data": {
    "run_id": "run_8842",
    "result": {
      "n": 612,
      "success_rate": 0.874,
      "ci95": [
        0.846,
        0.898
      ],
      "cost_usd": 3812
    }
  }
}

EVENT episode.failed

An episode failed, with its cluster

Sent per failed episode when subscribed. `cluster` names the failure mode, e.g. `grasp_slip`.

ParameterInTypeDescription
id *bodystring
type *bodyrun.completed | episode.failed | threshold.crossed | regression.detected | estop.triggered
created *bodystring
data *bodyobject

Example payload

{
  "id": "evt_3312",
  "type": "episode.failed",
  "created": "2026-08-28T16:11:02Z",
  "data": {
    "run_id": "run_8842",
    "episode": 214,
    "cluster": "grasp_slip",
    "video_url": "https://artifacts.roborama.com/run_8842/ep_214/video.mp4"
  }
}

EVENT threshold.crossed

A threshold contract's target was met on soak tier

The contract escalates to the verification tier; `on_verified` fires after confirmation there.

ParameterInTypeDescription
id *bodystring
type *bodyrun.completed | episode.failed | threshold.crossed | regression.detected | estop.triggered
created *bodystring
data *bodyobject

Example payload

{
  "id": "evt_4407",
  "type": "threshold.crossed",
  "created": "2026-09-12T02:40:19Z",
  "data": {
    "contract_id": "run_9107",
    "checkpoint": "acme/skill-v4@ckpt-2210",
    "soak_result": {
      "n": 1188,
      "success_rate": 0.992,
      "ci95": [
        0.985,
        0.995
      ]
    },
    "escalating_to": "g1-edu-pro@fw2.3"
  }
}

EVENT regression.detected

A gate or matrix found a regression vs. a prior run

ParameterInTypeDescription
id *bodystring
type *bodyrun.completed | episode.failed | threshold.crossed | regression.detected | estop.triggered
created *bodystring
data *bodyobject

Example payload

{
  "id": "evt_5150",
  "type": "regression.detected",
  "created": "2026-09-14T08:03:55Z",
  "data": {
    "run_id": "run_8901",
    "vs": "run_8821",
    "robot": "g1-edu-pro@fw2.4",
    "environment": "kitchen-std@v1.2",
    "delta_pts": -10.5,
    "cluster": "grasp_slip"
  }
}

EVENT estop.triggered

An emergency stop fired in a cell running your policy

The run is stopped, the episode is marked `estop`, and the cell is inspected before resuming. Partial results are kept.

ParameterInTypeDescription
id *bodystring
type *bodyrun.completed | episode.failed | threshold.crossed | regression.detected | estop.triggered
created *bodystring
data *bodyobject

Example payload

{
  "id": "evt_6001",
  "type": "estop.triggered",
  "created": "2026-09-02T19:22:31Z",
  "data": {
    "run_id": "run_8905",
    "cell": "cell-g1-04",
    "episode": 88,
    "reason": "workspace_intrusion"
  }
}