> From TickerLayer docs, SignalPoint API: https://tickerlayer.com/docs/signalpoint#signalpoint-list
> REST base URL https://api.tickerlayer.com, API key in the `x-api-key` header. WebSocket wss://stream.tickerlayer.com?apiKey=YOUR_API_KEY. Full API reference: https://tickerlayer.com/llms-full.txt

## List signals

**Endpoint:** `GET /signals`

Signals newest first. Filters combine with AND. Every response names the partner under meta.attribution; show that notice wherever you show the signals.

### Query parameters

| Parameter | Type | Description |
| --- | --- | --- |
| `ticker` | string | Instrument symbol, for example KO or BTC. |
| `direction` | string | Trade direction. Values: `buy`, `sell`. |
| `timeframe` | string | Holding horizon. Values: `intraday`, `short_term`, `swing`, `long_term`. |
| `asset_type` | string | Instrument type. Values: `stock`, `crypto`. |
| `signal_class` | string | Kind of signal; leave it out for both. Values: `source`, `momentum`. |
| `status` | string | Open or closed signals. Values: `open`, `closed`. |
| `since / before` | string | ISO-8601 window on the generation time. To page back, pass `meta.next_before` as `before` unchanged: it carries the id, so signals that share a second are never skipped. |
| `updated_since` | string | Everything created, closed or corrected after this point. Start with an ISO-8601 time, then pass back `meta.next_updated_since`. |
| `limit` | integer | Page size, 1 to 100. Default: `25`. |

### Request

```bash
curl -sS "https://api.tickerlayer.com/signals?status=open&limit=3" \
  -H "x-api-key: <YOUR_API_KEY>"
```

### Response

```json
{
  "status": "ok",
  "data": [ { "id": 21141, "ticker": "EL", "...": "..." } ],
  "meta": {
    "count": 3,
    "has_more": true,
    "next_before": "2026-09-03T05:35:16.000Z|21098",
    "attribution": { "provider": "TradeZing", "notice": "Powered by TradeZing" }
  }
}
```
