> ## Documentation Index
> Fetch the complete documentation index at: https://docs.predexon.com/llms.txt
> Use this file to discover all available pages before exploring further.

# Data Credits & Pricing

> How bulk tick downloads are priced: prepaid credits, quotes, and download charges

Bulk tick downloads are priced by **download size**, not per request — one call can authorize gigabytes of Parquet. Charges come out of a **prepaid data-credit balance** on your organization, completely separate from your monthly API request quota.

<Note>
  **Private preview.** Tick datasets require your organization to be enabled per dataset, and credits are currently granted by the Predexon team. **[Request access →](mailto:team@predexon.com?subject=Data%20credits%20access%20request)** Self-serve top-ups are coming; until then, ask us to top up your balance.
</Note>

## Pricing

Priced per **GiB of compressed Parquet** (what you actually download — zstd compression makes this roughly 8–15× smaller than the raw data it represents).

| Dataset          | Price            | Typical full day        |
| ---------------- | ---------------- | ----------------------- |
| Polymarket ticks | **\$2.00 / GiB** | \~12.7 GiB → \~\$25     |
| Kalshi ticks     | **\$6.00 / GiB** | \~1.1 GiB → \~\$7       |
| Opinion ticks    | **\$6.00 / GiB** | \~3 MB → \$0.50 minimum |

Every download has a **\$0.50 minimum charge**. Prices are preview pricing and rounded up to the cent; `market_id`-filtered downloads are priced on the pruned files only, so single-market pulls are usually at or near the minimum.

Your balance, enabled datasets, and charge history live in the dashboard at **[predexon.com/data-credits](https://predexon.com/data-credits)**.

## Get a quote first

`GET /v2/data/ticks/quote` prices a download without charging anything. Same parameters as the download endpoint.

```bash theme={null}
curl -s -H "x-api-key: $PREDEXON_API_KEY" \
  "https://api.predexon.com/v2/data/ticks/quote?venue=kalshi&date=2026-06-25"
```

```json theme={null}
{
  "dataset": "ticks",
  "venue": "kalshi",
  "date": "2026-06-25",
  "total_bytes": 1269674310,
  "total_rows": 191500047,
  "price_cents": 710,
  "currency": "usd",
  "balance_cents": 5000,
  "quote_id": "ba661ff9-9c05-45cd-bf9e-a45a6fa29f95",
  "expires_at": "2026-07-04T21:03:18.475Z"
}
```

Quotes are optional. Pass the `quote_id` to the download to lock the quoted price until `expires_at` (\~30 minutes); or just call the download directly and pay the current price.

## When you're charged

You're charged **when signed URLs are issued** — the moment `GET /v2/data/ticks` returns — not when you fetch the files. Two properties make this safe to script against:

* **Retries never double-charge.** Repeating the same request (same venue, dates, market filter) within **24 hours** returns fresh signed URLs against the original charge, free. If your download script dies or the \~1-hour URLs expire, just re-run the same request.
* **Failures are refunded automatically.** If the data service fails after your balance was debited, the charge is refunded before you see the error.

Charge details ride on the download response headers:

| Header                                | Meaning                                           |
| ------------------------------------- | ------------------------------------------------- |
| `x-predexon-cf-data-price-cents`      | Price of this download                            |
| `x-predexon-cf-data-charged-cents`    | Amount actually debited (`0` on a re-issue)       |
| `x-predexon-cf-data-reused`           | `true` when re-issued against a prior charge      |
| `x-predexon-cf-data-balance-cents`    | Balance after this request                        |
| `x-predexon-cf-data-authorization-id` | Charge reference (quote this in support requests) |

## Errors

| Status | Code                                                  | Meaning                                                                                       |
| ------ | ----------------------------------------------------- | --------------------------------------------------------------------------------------------- |
| `401`  | `missing_api_key` / `invalid_api_key`                 | No or bad `x-api-key`                                                                         |
| `403`  | `dataset_not_enabled`                                 | Your organization isn't enabled for this dataset — [request access](mailto:team@predexon.com) |
| `402`  | `insufficient_data_credits`                           | Balance below the price (`price_cents` and `balance_cents` included)                          |
| `403`  | `spend_cap_exceeded`                                  | Daily spend cap on your account would be exceeded                                             |
| `409`  | `quote_expired` / `quote_mismatch` / `quote_consumed` | The `quote_id` is stale, for different parameters, or already used — re-quote or omit it      |
| `404`  | `not_final`                                           | Requested day isn't compacted yet (data is finalized T-1 at \~06:00 UTC)                      |

Nothing is ever charged on an error: quotes never debit, and validation (including `not_final`) runs before any charge.

## Datasets

<Columns cols={3}>
  <Card title="Polymarket Ticks" href="/data-signals/ticks/polymarket">Every top-of-book CLOB price change</Card>
  <Card title="Kalshi Ticks" href="/data-signals/ticks/kalshi">Full orderbook-delta firehose</Card>
  <Card title="Opinion Ticks" href="/data-signals/ticks/opinion">Complete orderbook deltas</Card>
</Columns>
