List signals
/v1/signalsThe club's signal history, oldest first — one record per thing that happened. This is the recovery path. If your endpoint was offline, replay the window with created_after / created_before and reconcile; you get the stored copy exactly as it was delivered, never a re-render of current state.
Narrow with type (one exact signal type) or resource_id (everything about one resource). Cursor-paginate via starting_after.
Reading the most recent instead. The default order is ascending, so page one is the club’s OLDEST signals — replaying forward is what recovery needs. Pass order=desc when you want the latest N and would otherwise have to page through the entire history to reach them. starting_after follows whichever order you asked for.
You see a filtered view. A signal whose required scope your key lacks is simply absent — not an error. That, plus any type or resource_id filter you pass, is why sequence gaps are normal and mean nothing. A webhook endpoint’s subscribed types do not filter this list.
Membership limitation. subscription.* signals cover memberships on the subscription billing engine. A club still on the legacy membership model emits none of them — the absence is expected, not a fault. Ask the club which model it is on before wiring a membership automation.
Authorization
bearerAuth Your club API key. Send it as Authorization: Bearer oc_live_….
In: header
Query Parameters
Number of results, 1–100 (default 25).
1 <= value <= 100Cursor: the id of the last signal from the previous page.
Sequence order (default asc, oldest first). Use desc to read the most recent signals first.
"asc" | "desc"Exact public signal type.
Every signal about one resource, in sequence order — the id inside data.object.
ISO-8601 lower bound on the signal’s emit time (inclusive).
ISO-8601 upper bound on the signal’s emit time (inclusive).
Response Body
application/json
application/json
application/json
application/json
curl -X GET "https://api.getopencourt.com/v1/signals"{
"object": "list",
"data": [
{
"id": "sig_1KpQ2rXvN8mZ4tYb",
"object": "signal",
"type": "customer.updated",
"created": "2026-08-28T14:30:00.000Z",
"sequence": 4821,
"api_version": "v1",
"data": {
"object": {
"id": "b2c3d4e5-f6a7-4b8c-9d0e-1f2a3b4c5d6e",
"object": "customer",
"first_name": "Jordan",
"last_name": "Reyes",
"email": "jordan.reyes@example.com"
}
},
"previous_attributes": {
"phone": "+15551234567"
}
}
],
"has_more": true,
"url": "string"
}{
"error": {
"type": "string",
"code": "string",
"message": "string",
"param": "string",
"request_id": "string"
}
}{
"error": {
"type": "string",
"code": "string",
"message": "string",
"param": "string",
"request_id": "string"
}
}{
"error": {
"type": "string",
"code": "string",
"message": "string",
"param": "string",
"request_id": "string"
}
}