# GET /v2/signals/{signal}

**As-of signal matches**

Time-travel form of `GET /v2/signals/{signal}`. Pass `?asof=YYYY-MM-DD` (or full ISO) and the server returns the set of tickers where the signal was true (booleans) or where the numeric value satisfied your `condition` at the close of that day. Sourced from `signal_daily_state`. Same response envelope as the live call, with `_meta.resolution: "daily"` and `_meta.frozen_fields` listing the columns whose values aren't historized.

## Plan access

- **Plan access.** Included on every plan.
- **Rate limit.** Hobby 600/min · Pro 2,000/min · Scale 10,000/min.
- **History.** All-time on every paid plan.

## Query / path parameters

| Name | In | Type | Required | Description |
|------|----|----|----------|-------------|
| `signal` | path | string | yes | A column on `ticker`. Boolean flags are detected automatically; numerics require a `condition`. Example: `rsi_14`. |
| `asof` | query | string | yes | Target date as `YYYY-MM-DD` or full ISO timestamp. The server returns the match set as of the close of this day. Example: `2024-01-22`. |
| `condition` | query | string | no | Required for numeric signals. Single-bounded condition: `<op><value>`. Operators: `>`, `>=`, `=`, `!=`, `<`, `<=`. Ignored for boolean flags. Example: `>70`. |
| `universe` | query | string | no | Scope to a system or caller-owned universe slug. |
| `limit` | query | integer | no | Page size. Max 200. Default: `50`. |
| `cursor` | query | string | no | Opaque cursor from the previous response. |

## Status codes

- **200** — Page of matching tickers at `asof` with `as_of`, `count`, `next_cursor`, and `results`. `_meta.resolution: "daily"` and `_meta.frozen_fields` describe the historical envelope.
- **400** — Missing/malformed `asof`, numeric signal called without `condition`, or invalid cursor.
- **404** — Signal name does not exist on the schema.

## Sample response

```json
{
  "as_of": "2024-01-22",
  "signal": "rsi_14",
  "condition": ">70",
  "count": 3,
  "next_cursor": "eyJhZnRlcl92YWx1ZSI6ODcuMywiYWZ0ZXJfdGlja2VyIjoiVFNNIn0",
  "_meta": {
    "resolution": "daily",
    "frozen_fields": ["name", "sector", "industry", "asset_type", "exchange"]
  },
  "results": [
    { "ticker": "NVDA", "name": "NVIDIA Corp",         "value": 88.41 },
    { "ticker": "META", "name": "Meta Platforms Inc.", "value": 78.92 },
    { "ticker": "TSM",  "name": "Taiwan Semiconductor","value": 73.05 }
  ]
}
```

## Examples

### Who was overbought on Jan 22, 2024?

Request:

```shell
curl "https://api.tickerbot.io/v2/signals/rsi_14?asof=2024-01-22&condition=>70&limit=3" \
  -H "Authorization: Bearer YOUR_KEY"
```

Response (`200`):

```json
{
  "as_of": "2024-01-22",
  "signal": "rsi_14",
  "condition": ">70",
  "count": 3,
  "next_cursor": "eyJhZnRlcl92YWx1ZSI6ODcuMywiYWZ0ZXJfdGlja2VyIjoiVFNNIn0",
  "_meta": {
    "resolution": "daily",
    "frozen_fields": ["name", "sector", "industry", "asset_type", "exchange"]
  },
  "results": [
    { "ticker": "NVDA", "name": "NVIDIA Corp",         "value": 88.41 },
    { "ticker": "META", "name": "Meta Platforms Inc.", "value": 78.92 },
    { "ticker": "TSM",  "name": "Taiwan Semiconductor","value": 73.05 }
  ]
}
```

### Boolean flag — who was at a 52-week high that day

Request:

```shell
curl "https://api.tickerbot.io/v2/signals/at_52w_high?asof=2024-01-22&limit=3" \
  -H "Authorization: Bearer YOUR_KEY"
```

Response (`200`):

```json
{
  "as_of": "2024-01-22",
  "signal": "at_52w_high",
  "condition": null,
  "count": 47,
  "next_cursor": "eyJhZnRlcl90aWNrZXIiOiJBQVAifQ",
  "_meta": { "resolution": "daily", "frozen_fields": ["name", "sector", "industry", "asset_type", "exchange"] },
  "results": [
    { "ticker": "NVDA", "name": "NVIDIA Corp",           "value": true },
    { "ticker": "META", "name": "Meta Platforms Inc.",   "value": true },
    { "ticker": "MSFT", "name": "Microsoft Corp.",       "value": true }
  ]
}
```

## Notes

- Static fields aren't historized — `name`, `sector`, `industry`, `asset_type`, and `exchange` reflect their *current* values. `_meta.frozen_fields` lists exactly which ones.
- For per-ticker time series of one signal across many bars (not a point-in-time snapshot), use [Signal history](/api/endpoints/signals/history).
- All paid plans get full asof history. Missing daily state for the requested date returns an empty `results` array with the echoed `asof`.

---

Interactive sandbox + parameter editor: https://tickerbot.io/api/endpoints/signals/asof
