# GET /v2/webhooks

**List subscriptions**

Returns webhook subscriptions for the current account (user-scoped, not key-scoped — every key on the same account sees the same registry). Ordered newest-first by `created_at`. Each row carries a `subscription_origin` discriminator naming which subscribe endpoint created it (`ticker` | `signal` | `scan`). Use `?status=` to filter; pass `next_cursor` back via `cursor=` to paginate.

## Plan access

- **Plan access.** Included on every plan.
- **Cadence.** Hobby 5m · Pro 1m · Scale 1m · Enterprise 1m.
- **Capacity.** Unlimited on every paid plan.

## Query / path parameters

| Name | In | Type | Required | Description |
|------|----|----|----------|-------------|
| `status` | query | string | no | Filter by status. Enum: `active`, `pending_verification`, `disabled`. |
| `limit` | query | integer | no | Page size. Max 100. Default: `50`. |
| `cursor` | query | string | no | Opaque cursor from the previous response. |

## Status codes

- **200** — Page of webhooks with `as_of`, `count`, `next_cursor`, and `webhooks`. The `signing_secret` field is stripped (it's only shown on create).
- **400** — Invalid `?status` value.

## Sample response

```json
{
  "as_of": "2026-05-14T11:41:01.000Z",
  "count": 2,
  "next_cursor": null,
  "webhooks": [
    {
      "id": "wh_smRsF3-z36o",
      "name": "NVDA · gap_up AND high_volume_alert",
      "q": "ticker = 'NVDA' AND (gap_up AND high_volume_alert)",
      "universe_id": null,
      "cadence": "5m",
      "target_url": "https://your-app.example.com/webhooks/tickerbot",
      "delivery": "webhook",
      "status": "active",
      "source": "v2",
      "subscription_origin": { "type": "ticker", "ref": "NVDA", "condition": "gap_up AND high_volume_alert" },
      "created_at": 1778720416,
      "updated_at": 1778720500,
      "last_match_set": ["NVDA"],
      "last_evaluated_at": 1778721240,
      "next_eval_at": 1778721540
    },
    {
      "id": "wh_kJv8Bn4Yx2Pq",
      "name": "rsi_14 > 70 · top_100",
      "q": "rsi_14 > 70",
      "universe_id": "top_100",
      "cadence": "5m",
      "target_url": "https://your-app.example.com/webhooks/tickerbot",
      "delivery": "webhook",
      "status": "active",
      "source": "v2",
      "subscription_origin": { "type": "signal", "ref": "rsi_14", "condition": ">70" },
      "created_at": 1778710200,
      "updated_at": 1778710260,
      "last_match_set": ["AAPL", "META", "NVDA"],
      "last_evaluated_at": 1778721240,
      "next_eval_at": 1778721540
    }
  ]
}
```

## Examples

### List active webhooks

Request:

```shell
curl "https://api.tickerbot.io/v2/webhooks?status=active&limit=5" \
  -H "Authorization: Bearer YOUR_KEY"
```

Response (`200`):

```json
{
  "as_of": "2026-05-14T11:41:01.000Z",
  "count": 2,
  "next_cursor": null,
  "webhooks": [
    {
      "id": "wh_smRsF3-z36o",
      "name": "NVDA · gap_up AND high_volume_alert",
      "q": "ticker = 'NVDA' AND (gap_up AND high_volume_alert)",
      "universe_id": null,
      "cadence": "5m",
      "target_url": "https://your-app.example.com/webhooks/tickerbot",
      "delivery": "webhook",
      "status": "active",
      "source": "v2",
      "subscription_origin": { "type": "ticker", "ref": "NVDA", "condition": "gap_up AND high_volume_alert" },
      "created_at": 1778720416,
      "updated_at": 1778720500,
      "last_match_set": ["NVDA"],
      "last_evaluated_at": 1778721240,
      "next_eval_at": 1778721540
    },
    {
      "id": "wh_kJv8Bn4Yx2Pq",
      "name": "rsi_14 > 70 · top_100",
      "q": "rsi_14 > 70",
      "universe_id": "top_100",
      "cadence": "5m",
      "target_url": "https://your-app.example.com/webhooks/tickerbot",
      "delivery": "webhook",
      "status": "active",
      "source": "v2",
      "subscription_origin": { "type": "signal", "ref": "rsi_14", "condition": ">70" },
      "created_at": 1778710200,
      "updated_at": 1778710260,
      "last_match_set": ["AAPL", "META", "NVDA"],
      "last_evaluated_at": 1778721240,
      "next_eval_at": 1778721540
    }
  ]
}
```

## Notes

- `signing_secret` is omitted in this response — it's only returned on the create call.
- Visibility is account-wide: every API key on this account sees the same list.

---

Interactive sandbox + parameter editor: https://tickerbot.io/docs/endpoints/webhooks/list
