Download the content behind a search result

Changed on
post/api/mpp/v1/contents

Request

  • Base URL
    https://tako.com
  • URL
    https://tako.com/api/mpp/v1/contents
  • Auth
    none declared

Request body

urlstring required

The result URL to fetch downloadable content for (a TakoCard.webpage_url or a WebResult.url). A Tako card URL yields a CSV of the card's data; any other URL yields the page's extracted text.

mode'url' | 'inline'

How contents reach the caller. URL returns a short-lived presigned file download; INLINE returns the content in the response body.

content_format'csv' | 'json_records' | 'json_compact' | 'card_json'

Serialization of tabular (Tako card) data. Web content is always raw text and carries no content format (content_format is null).

max_rowsinteger nullable

Optional cap on the rows a Tako card export returns and is priced against. When omitted, it depends on mode: 'url' returns the whole card, up to the card's export_pricing.max_rows_ceiling (at most 100,000 rows), and 'inline' returns up to 2,000 rows. Tako clamps larger values to that ceiling. When a card holds more rows than the cap, csv, json_records, and json_compact keep the rows with the latest dates, counting back from the card's latest date even when that date is in the future, as on a forecast. A card without a date column keeps its first rows instead. Sports cards cut differently: a league schedule keeps the tab the card shows, then the tabs nearest to it, and a game, standings, or team stats card keeps an even share of each table. The kept rows stay in the card's own order. card_json cuts each card type its own way: a price or indicator series keeps its newest readings, a forecast or ranking keeps its first records, and those sports cards keep rows from the same tabs and tables as their csv. Every row returned bills at the per-1,000-row rate, on top of the flat per-export baseline. Tako never bills more rows than it returns, so a card holding fewer rows than this cap bills only what it holds. Every card format returns the rows up to this cap and bills them, including card_json. Web URLs ignore this field. A card export can hold up to 100,000 rows. Don't read a large export directly into a model's context: at about 15 tokens per row, 10,000 rows cost about 150,000 tokens. Write the export to a file, on disk or in memory, and have the agent parse it with code. Give the model only the rows or results it needs. To cap the export instead, set max_rows.

offsetinteger

Number of rows to skip before the export starts, counted in the card's own row order. Use it with max_rows to export one slice of a long list, such as rows 100 to 149 with offset=100 and max_rows=50. It works only on cards whose export keeps their first rows. A card with a date column, a sports card, or content_format=card_json answers 422 to any offset above 0, because those exports don't keep rows in a fixed order from the top: a dated card keeps its newest rows, a sports card keeps rows by tab or table, and card_json cuts each card type its own way. offset plus max_rows can't reach past the card's export_pricing.max_rows_ceiling. An offset at or past the card's last row returns an empty payload with total_rows set, and an API-key caller isn't charged for it. To page through a card, stop when a call returns fewer rows than max_rows: truncated stays true on a card that lists a capped slice of a larger set. The row order isn't guaranteed to stay the same between calls, so check the rows you receive, for example by name. Web URLs ignore this field.

max_charsinteger

Character cap on extracted web page text. Ignored for Tako card URLs (they use max_rows). Omit it and Tako returns the full page text, up to the maximum this field allows. To truncate, pass a smaller value.

quote_onlyboolean

When true, return only the price of the export (cost + export_pricing) without fetching content or charging. The response item's payload and url fields are null, and the request is free. One exception: a card_json quote returns 'card_data_schema', the shape the export would deliver. Test 'content_format' for null to tell a quote from a delivery. max_rows shapes the quote. An omitted max_rows defaults the way a real export does: the whole card for mode 'url', and 2,000 rows for 'inline'. The quote reads mode only for that default. A quote ignores offset when pricing, so it stays an upper bound, and it can't tell whether the card has a date column: a quote with offset above 0 can succeed on a card whose export then answers 422. Every format prices a quote from max_rows, so a quote is instant and makes no call to a data provider. A quote is an upper bound on the charge: an export of a card with fewer rows than the cap bills less. For a card with data from a source priced per unit, the quote also covers the most that data can charge, which export_pricing reports as variable_cost_max_usd. A card_json export is truncated to max_rows like every other format, so the charge can never exceed the quote for the same cap. A card_json quote reports no total_rows, because it does not build the payload. The same export-safe gate applies, so an unexportable card still returns 403, and a card type with no card_json shape still returns 422.

premiumboolean

When true, reveal premium cells and bill them. A card's premium columns (see manifest[].premium_class) are withheld by default: a withheld cell reads [premium: withheld] in CSV and is null in JSON formats. This is the only way to receive their values. Some cards link each row to a card for that single record. To reveal one record's premium cells, request the URL in that row's tako_url column with premium=true. To reveal them for every record the card's export returns, up to max_rows, request the card itself. The export then charges export_pricing.premium_row_cpm_usd[class] per 1,000 premium records, on top of the standard row rate. A premium record is a distinct company or person that the delivered rows hold a value for in a column of that class; premium_rows on the item reports the counts. The flag has no effect on a card without premium columns and on web URLs, and is rejected with content_format=card_json, which carries no premium plumbing. Over MPP, premium=true is refused with a 403 before any charge, unless quote_only is also true.

zdrboolean nullable

Request zero data retention. Set it to true and Tako keeps no copy of the URL in its logs, and fetches a web page only through its zero-data-retention provider. Available only to accounts that Tako has enabled; any other account gets a 403. To turn it on, contact support@tako.com. Omit it for standard retention.

Example request

{
  "url": "https://tako.com/card/abc123",
  "max_rows": 100,
  "offset": 100,
  "max_chars": 50000,
  "highlights": {
    "query": "funded backlog fiscal 2027 guidance"
  }
}

Response

Downloadable content behind a result.

request_idstring required

Unique identifier for this request.

Changes

    • breaking

      response property contents/items/dataset/anyOf[subschema #1: TakoDataset]/rows/items/items/ list-of-types was widened by adding types array to media type application/json of response 200

    • breaking

      response property contents/items/records/anyOf[subschema #1]/items/additionalProperties/ list-of-types was widened by adding types array to media type application/json of response 200

    • warning

      added the new array enum value to the ////// response property for the response status

    • warning

      added the new array enum value to the ////// response property for the response status

    • info

      added the new optional request property