The only capture that costs nothing is the one you do not repeat
A cache hit does not open a browser, so it does not consume a credit. That is a billing rule, not a promotion.
cachecache_ttlcache_keycurl --fail-with-body "https://api.pagecapture.dev/v1/take" \
-H "X-Access-Key: $PAGECAPTURE_KEY" \
-H "Content-Type: application/json" \
--data '{"url":"https://example.com","format":"jpg","cache":true,"cache_ttl":86400}' \
-o capture.jpgVerified 2026-08-13 by running the published code against a fixture.
Configure it in the playgroundWhat it does
- Serves a matching previous capture from storage and charges nothing for it.
- Keys the entry on everything that changes a pixel — viewport, format, dark mode, blockers, scripts — and on nothing that does not.
- Scopes every entry to your organization. There is no shared cache between customers.
What it does not do
- Does not cache by URL. Two requests for the same URL with different options are different captures and are stored as such.
- Does not offer a short TTL. Four hours is the minimum as well as the default; anything shorter would be a cache that mostly misses while still promising freshness.
- Does not include delivery options in the key. `webhook_url`, `external_identifier`, `attachment_name` and `response_type` do not change a pixel, so they never split an entry.
Every limit on this page is the one the API enforces
These rows are read from the same parameter table that validates your request. Nothing here is transcribed, so a number cannot drift from the behaviour it describes.
| Parameter | Type | Default | Range | Endpoints | Cache key |
|---|---|---|---|---|---|
cacheServe and store this capture from the cache. Cache hits are never charged. | boolean | false | — | /v1/take, /v1/animate | Out |
cache_ttlCache lifetime in seconds. Minimum and default 4 hours, maximum 30 days. | integer | 14400 | 14,400 – 2,592,000 | /v1/take, /v1/animate | Out |
cache_keyCustom cache key, scoped to your organization. | string | — | — | /v1/take, /v1/animate | Out |
How it behaves next to the rest of the request
cache_ttlCache lifetime in seconds. Minimum and default 4 hours, maximum 30 days.
Seconds, from 4 hours to 30 days. Choose it from how often the target changes, not from how often you call — the second number is what the cache is for.
cache_keyCustom cache key, scoped to your organization.
Your own key, scoped to your organization, for when you want the invalidation boundary to be a content version of yours rather than the request shape.
external_identifierYour own correlation id, echoed in logs, JSON responses and webhooks.
Your correlation id travels with the request and stays out of the cache key on purpose: tagging a capture must never split the cache entry it should have hit.
Errors this option can produce
None of them is billable. No error code in the catalog is.
Related capabilities
All capabilities100 successful captures a month, every feature unlocked, no card.
Get an API keyPageCapture Engineering · reviewed by PageCapture API maintainers · Verified 2026-08-13 by running the published code against a fixture.