no key · no human
Home › News API for AI agents › Token costs by response mode

Token costs

No other news API tells you this, and it is the single most useful number when the caller is a language model. Measured on real responses; figures are for a typical GPT/Claude tokenizer at roughly four characters per token.

Per article

ModeBytesTokensWhat you get
Metadata only, full_text=false~600 ~150Title, description, publisher, country, language, times, URL
With body, full_text=true~3,600 ~900All of the above plus 2,000–4,000 characters of text
With highlight=true~1,000 ~250Metadata plus two 200-character matched fragments

Per response

CallTokensVerdict
/v1/stats, any filter~200 Cheapest useful call in the API
/v1/search?size=5~800 Right size for answering a question
/v1/search?size=20~3,000 Default. Fine.
/v1/search?size=100~15,000 Only when code, not a model, reads the result
/v1/search?size=20&full_text=true~18,000 expensive Select first, then fetch
/v1/search?size=100&full_text=true~90,000 Will overflow most context windows
/v1/article, one article~900 The right way to get a body

The rule

Never let a model set full_text=true together with a large size. Scanning is cheap, reading is expensive. Retrieve metadata for many, fetch bodies for few. A well-built pipeline spends 80% of its tokens on the eight articles it chose and 20% on the sixty it rejected.

Cost of the same question, three ways

ApproachCallsTokens
Naive: size=50&full_text=true, feed it all in 1~45,000
Better: size=50, model picks five, fetch those 6~12,000
Best: stats, then size=60, rank in code, fetch eight 10~9,000

Five times cheaper, and the answer is better, because the eight articles were chosen rather than the first fifty being dumped in.

Trimming responses in your dispatcher

python
# keep only what the model needs to decide
KEEP = ("title", "description", "url", "published_at", "host", "country", "lang")

def slim(results):
    return [{k: a.get(k) for k in KEEP if a.get(k)} for a in results]

Dropping id, crawled_at, image, categories, country_source and tld cuts roughly 35% off a metadata response. Keep them when your own code needs them; strip them before the text reaches a model.

Latency, while we are counting

CallTypicalp99
/v1/search, filtered40 ms107 ms
/v1/search, full-text query60 ms150 ms
/v1/stats90 ms220 ms
/v1/article25 ms60 ms

Measured at 1,247 requests per second across the cluster with zero errors.