# Paginated off-exchange (TRF) prints

`GET https://flow-api.skylit.ai/v1/dark-pool/trades`

API: Flowseeker. Credits: 5.

Server-side filtered dark-pool prints from the off-exchange tape
(FINRA TRF). Defaults to **today (ET)** with a
**$1,000,000** minimum notional (the blocks-by-default rule); pass
`min_notional=0` for the full firehose. The trade-date span is capped
at **31 days** per request — page with `limit`/`offset` or narrow the
range for more. Prints carry **no side, BBO, or greeks**. Pagination
state (`limit`, `offset`, `count`, `hasMore`) is returned in `meta`.

## Authentication

Send your Skylit API key as a bearer token: `Authorization: Bearer <key>`. No other header is accepted.

## Parameters

| Name | In | Type | Required | Description |
| --- | --- | --- | --- | --- |
| `tickers` | query | string | no | Comma-separated tickers to include (e.g. `AAPL,NVDA`). Omit for all names. |
| `date` | query | string (date) | no | Single trade date (`YYYY-MM-DD`, ET). Defaults to today (ET). |
| `date_start` | query | string (date) | no | Inclusive start of a trade-date range (`YYYY-MM-DD`, ET). Max span 31 days. |
| `date_end` | query | string (date) | no | Inclusive end of a trade-date range (`YYYY-MM-DD`, ET). Max span 31 days. |
| `time_start` | query | string | no | Inclusive lower bound of the time-of-day window (`HH:MM`, ET). |
| `time_end` | query | string | no | Inclusive upper bound of the time-of-day window (`HH:MM`, ET). |
| `min_notional` | query | number (double) | no | Minimum notional (USD). Defaults to 1,000,000. Pass 0 for the firehose. (default `1000000`) |
| `max_notional` | query | number (double) | no |  |
| `min_size` | query | integer | no |  (min 0) |
| `max_size` | query | integer | no |  (min 0) |
| `min_price` | query | number (double) | no |  |
| `max_price` | query | number (double) | no |  |
| `sectors` | query | string | no | Comma-separated GICS sectors to include. |
| `industries` | query | string | no | Comma-separated GICS industries to include. |
| `venue` | query | string | no | Reporting venue filter. Omit for both. (one of `FINN`, `FINC`) |
| `limit` | query | integer | no | Page size (server caps at 5000). (default `500`; min 1; max 5000) |
| `offset` | query | integer | no | Row offset for pagination. (default `0`; min 0; max 50000) |
| `order` | query | string | no | Sort by trade time. (one of `asc`, `desc`; default `desc`) |

## Example request

```bash
curl "https://flow-api.skylit.ai/v1/dark-pool/trades" \
  -H "Authorization: Bearer $SKYLIT_API_KEY"
```

## Responses

### 200

Paginated dark-pool prints for the requested filters.

Shape (placeholder values):

```json
{
  "data": [
    {
      "timestamp": "2026-07-02T14:31:05.123Z",
      "ticker": "SPY",
      "price": 0,
      "size": 0,
      "notional": 0,
      "venue": "FINN",
      "sector": "string",
      "industry": "string"
    }
  ],
  "meta": {
    "timestamp": "string",
    "requestId": "d7574836",
    "limit": 0,
    "offset": 0,
    "count": 0,
    "hasMore": false
  }
}
```

### 400

Request validation failed.

invalidParam:

```json
{
  "error": {
    "code": "BAD_REQUEST",
    "message": "Invalid parameter 'timeframe': must be one of [1m, 5m, 15m, 1h, 4h, 1d, 1w, 1M]"
  }
}
```

### 401

Missing or invalid API key.

missingKey:

```json
{
  "error": {
    "code": "UNAUTHORIZED",
    "message": "Authentication required"
  }
}
```

### 402

The account's shared Skylit credit balance is lower than this route's cost. Top up to continue. Carries `X-Credits-Remaining: 0`.

Headers: `X-Credits-Remaining`.

outOfCredits:

```json
{
  "error": {
    "code": "insufficient_credits",
    "message": "Out of credits. Top up to continue making requests."
  }
}
```

### 403

API key invalid, revoked or expired, or the account's API access is suspended (`account_suspended`).

accountSuspended:

```json
{
  "error": {
    "code": "account_suspended",
    "message": "API access has been suspended for this account. Contact support."
  }
}
```

### 429

Per-minute rate limit exceeded.

Headers: `Retry-After`.

tooFast:

```json
{
  "error": {
    "code": "RATE_LIMITED",
    "message": "Rate limit of 100 req/min exceeded. Retry after 18s."
  }
}
```

### 503

Underlying data source temporarily unavailable, or the credit balance could not be verified (`credit_check_failed`). Safe to retry.

ingestionLag:

```json
{
  "error": {
    "code": "UNAVAILABLE",
    "message": "Live feed is degraded; please retry in a few seconds."
  }
}
```

creditCheckFailed:

```json
{
  "error": {
    "code": "credit_check_failed",
    "message": "Could not verify credit balance. Please retry."
  }
}
```
