OpenCourt Developers
API ReferenceSignals

List signals

GET/v1/signals

The 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
AuthorizationBearer <token>

Your club API key. Send it as Authorization: Bearer oc_live_….

In: header

Query Parameters

limit?integer

Number of results, 1–100 (default 25).

Range1 <= value <= 100
starting_after?string

Cursor: the id of the last signal from the previous page.

order?string

Sequence order (default asc, oldest first). Use desc to read the most recent signals first.

Value in"asc" | "desc"
type?string

Exact public signal type.

resource_id?string

Every signal about one resource, in sequence order — the id inside data.object.

created_after?string

ISO-8601 lower bound on the signal’s emit time (inclusive).

created_before?string

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"
  }
}