Skip to main content

Confirm

Are you sure?

Changelog · August 29, 2026

Cache, timing and quota on every response

Tell a free cache hit from paid work, and see where you stand before you run out.

By · Last updated: August 2026

TL;DR

Every response with a request behind it now carries X-Result-Token, X-Cache (hit, miss or partial), X-Cache-Age, X-Processing-Time-Ms and the quota headers — sync and async, hit and miss, success and failure. Webhook payloads carry the same facts in an additive meta object.

Free plan, no credit card. 1,000 credits a month.

Most endpoints answer in plain text — Markdown, HTML, a base64 image — that you pipe straight into a file, so headers are the only place for metadata. A caller couldn't tell a free cache hit from paid work, which is the whole point of tuning max_age, and the only way to learn your quota was to run out.

A fact we don't have is omitted, never zeroed: an async accept on a cache miss carries no processing time, because nothing has happened yet.

A cache hit
X-Result-Token: 0Zx3…9aQ
X-Cache: hit
X-Cache-Age: 5400
X-Processing-Time-Ms: 14
X-Quota-Cost: 0
X-Quota-Remaining: 18750

FAQ

Frequently asked questions

How do I know a response was a free cache hit?
X-Cache: hit, and X-Quota-Cost: 0.
Do async callers get this metadata?
Yes, in the webhook payload's meta object, with the same facts typed rather than stringified.
Is processing time reported for an async accept?
Only on a cache hit. On a miss nothing has run yet, so the header is omitted rather than set to zero.

Try it on the free plan.

Free plan, no card. Confirm your email and your API key is live — you'll be making real requests in minutes.