Skip to content

API referenceWebhook events

webhook.test

A webhook event: the signed JSON body we send to your endpoints.

When it fires

Sent once when an endpoint is registered, to prove it. A 2xx makes the endpoint active.

We POST it to every active endpoint you registered with the Webhooks endpoints. A 2xx acknowledges it; anything else is retried. The webhooks guide covers delivery, retries and replays.

Headers

HeaderDescription
X-ShortsIntel-Signaturet=<unix seconds>,v1=<hex HMAC-SHA256 over "<t>.<body>">; two v1 during a rotation overlap.
X-ShortsIntel-Event-IdThe event id, evt_..., same as the body's id.
X-ShortsIntel-Event-TypeThe dotted event type, same as the body's type.

Payload

application/json, the same shape for every event; fields that do not apply to webhook.test are null or left out.

object

The thin webhook payload, exactly the bytes that were signed.

  • idstringrequiredEvent id, evt_.... Stable for one fact: a replay or a re-emission carries the same id, so dedupe on it.
  • typestringrequiredone of run.completed, tracker.changed, webhook.testrun.completed, tracker.changed or webhook.test.
  • created_atstringrequiredformat date-timeWhen the event was created.
  • run_idstringrequirednullableThe Run behind the event.
  • kindstringrequirednullableThe Run's kind, lower case, e.g. research.
  • statusstringrequirednullablecompleted, partial or failed.
  • charge_creditsnumberrequirednullableWhat the Run cost, as GET /v1/runs/{id} shows it.
  • tracker_idstringrequirednullableOn tracker.changed.
  • change_report_idstringrequirednullableOn tracker.changed.
  • collectionsarray of objectOn tracker.changed only: the Collections the Tracker sits in as of the event, by id and name, so you can route changes without a lookup. Absent on other events.
    • idstringrequiredThe Collection's id.
    • namestringrequiredThe Collection's name.

Example payload

Indented for reading. The bytes on the wire are compact, and the signature covers those raw bytes.

{
  "id": "evt_kZ8Qw3n1TfLd0aZmVbYpRc",
  "type": "webhook.test",
  "created_at": "2026-09-08T09:14:02.911Z",
  "run_id": null,
  "kind": null,
  "status": null,
  "charge_credits": null,
  "tracker_id": null,
  "change_report_id": null,
  "links": {
    "webhook": "https://www.shortsintel.com/v1/webhooks/whe_6d2f10ab44"
  }
}

Verifying the signature

Verify the signature header against the raw body before you trust or parse it. The webhooks guide walks through it with a worked example and verifiers in TypeScript and Python: Verifying a signature.