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

# Contents pricing

> What a Contents download costs — the per-export baseline, the per-row rate, how max_rows drives the bill, and where to read your exact rate before you fetch.

A Contents download is priced by what it returns. A **card CSV export** carries a flat per-export baseline plus a per-row rate. A **web page extraction** is a flat per-page rate. Every price below is also readable from the API before you fetch, so you never have to infer a bill from this page.

## What a card CSV export costs

```
cost = baseline_usd + row_cpm_usd × rows / 1000
```

| Component           | Rate                                                             |
| ------------------- | ---------------------------------------------------------------- |
| Per-export baseline | `$0.001`, charged once per export regardless of size             |
| Per-row rate        | From `$0.01` per 1,000 rows, and higher for some premium sources |
| Row ceiling         | 2,000 rows per export. A larger `max_rows` is clamped to it      |

`rows` is the number of rows the export actually returns, which is the smaller of `max_rows` and the rows the card holds. Every returned row is billed, from the first, and a card with fewer rows than your cap bills only the rows it returns.

### A worked example

A 2,000-row card at the base rate, exported in full:

```
$0.001 + $0.01 × 2000 / 1000  =  $0.021
```

The same card from a premium source that bills `$0.10` per 1,000 rows:

```
$0.001 + $0.10 × 2000 / 1000  =  $0.201
```

## Read your exact rate before you fetch

Do not assume the floor rate. Every downloadable card in a Search or Answer response carries an `export_pricing` object, and its `row_cpm_usd` is **that card's rate for your account** — already adjusted for the card's source and for any negotiated terms on your account:

```json theme={null}
"export_pricing": {
  "baseline_usd": 0.001,
  "row_cpm_usd": 0.01,
  "max_rows_ceiling": 2000
}
```

Put those numbers into the formula above and you get the charge exactly. That is the reliable way to price an export — a rate table on a docs page cannot account for per-source rates or per-account terms, and `export_pricing` can.

<Note>
  `export_pricing` also carries a deprecated `free_rows` field, always `0`. Ignore it; it will be removed.
</Note>

### Quote without fetching

Send `quote_only: true` on a Contents request to price an export without retrieving it or being charged. You get the `cost` back with no content and no charge. Search and Answer have no equivalent — see [Search inline contents vs. the Contents API](#search-inline-contents-vs-the-contents-api).

## How `max_rows` drives the bill

`max_rows` is the single field that decides the size of a card export, so it is the field that decides the bill.

| `max_rows`  | Rows returned                                                  | Billed             |
| ----------- | -------------------------------------------------------------- | ------------------ |
| omitted     | The whole card, up to 2,000 (20 per card on Search and Answer) | Every row returned |
| a number    | That many, up to 2,000                                         | Every row returned |
| above 2,000 | 2,000                                                          | 2,000              |

Set `max_rows` when you need a slice. A 50-row preview of a premium card costs `$0.006` where the full 2,000 rows cost `$0.201`.

<Note>
  On Search and Answer, `max_rows` is a **per-card** cap. A response holding five cards bills each one separately, each with its own baseline.
</Note>

### What bounds a multi-card search response

One search response cannot bill without limit, however many cards it holds. All cards share a budget of 2,000 billable rows, spent in card order, so a 20-card request at `max_rows: 2000` does not bill 40,000 rows. Once the budget is spent, later cards still return a small preview rather than nothing — they are not dropped, and they still carry their own `export_pricing` so you can fetch the rest through Contents.

`truncated` and `total_rows` tell you when this happened: a card can come back with fewer rows than you asked for because the budget ran out, not because the card was small.

## Search inline contents vs. the Contents API

Card data reaches you two ways, priced identically per row but shaped very differently:

|                               | Search / Answer inline                           | Contents API                                          |
| ----------------------------- | ------------------------------------------------ | ----------------------------------------------------- |
| How you ask                   | `sources.data.include_contents: true`            | `POST /api/v1/contents` with the card's `webpage_url` |
| Rows when you omit `max_rows` | 20 per card                                      | The whole card, up to 2,000                           |
| Scope of `max_rows`           | Per card — a five-card response bills five times | The one card in the request                           |
| Delivery                      | Always inline in the response body               | `mode: url` for a presigned link, or `mode: inline`   |
| Price a call first            | Not available                                    | `quote_only: true`                                    |
| Serialization                 | CSV                                              | `csv`, `json_records`, `json_compact`, or `card_json` |

Both charge the same per-export baseline and per-row rate, so the difference in cost is entirely the difference in rows.

<Note>
  **`quote_only` is Contents-only.** There is no way to price a Search or Answer response before running it. If you need a quote, read `export_pricing` off the card and compute it, or call Contents with `quote_only: true`.
</Note>

The small inline default is deliberate: a search response can hold many cards, and each one bills separately, so a `/contents`-sized default would multiply the bill by the number of cards in the response. Reach for inline contents when you want a usable preview alongside the results, and for the Contents API when you want the card's full data.

## What a web page extraction costs

Text extraction from a web page is a flat `$0.001` per page. `max_rows` does not apply — it has no rows.

## Where to find what you were charged

* **Per item** — every `ContentItem` carries a `cost` in USD: what that one download cost.
* **Per request** — when your account is billed pay-as-you-go, the response carries a `usage` object whose **`total_cost_usd`** is the request total. (`usage.data` is only the inline-data component, and is omitted when a request inlined none.) On accounts that are not metered per request the `usage` key is **absent**; that is expected, and the per-item `cost` fields are still populated.
