Stored files
Screenshots, PDFs and the HTML of failed pages, kept for a while and linked from the response.
A request can produce files: screenshots and PDFs, captures taken by actions, and, when a page fails, the HTML it came back with. Each one is kept in storage for a while, and the response links it.
In the response
A file keeps its content_type and its bytes (data, base64), and gets three more keys:
"screenshot": {
"content_type": "image/png",
"data": "iVBORw0KGgo…",
"file_id": "file_1f0c9a…",
"url": "https://<your API host>/v1/files/file_1f0c9a…",
"expires_at": "2026-11-27T10:12:03.000Z"
}Dashboard → Logs keeps the link, not the bytes: open a request there to see its captures as long as they're kept.
Download a file
GET /v1/files/{id} with your API key returns the file itself, for its owner only:
curl "$SCRAPE_ENGINE_URL/files/file_1f0c9a…" -H "Authorization: Bearer $SCRAPE_ENGINE_KEY" -o page.pngOnce it expired, the answer is 404 NOT_FOUND.
Debug HTML of failed pages
When a page answers with an error status (a 403 from an anti-bot wall, a 404…), the failed page gets debug_html: the HTML it came back with, as a link only (no data), so you can see what the site showed.
{
"target_url": "https://example.com/item/42",
"error": { "code": "HTTP_ERROR", "message": "HTTP 403 for https://example.com/item/42 (blocked by cloudflare)", "status": 403, "blocked_by": "cloudflare" },
"debug_html": { "content_type": "text/html", "file_id": "file_8b…", "url": "https://<your API host>/v1/files/file_8b…", "expires_at": "…" }
}It's downloaded as a file, never shown as a page on our domain.
How long files are kept
| Plan | Kept |
|---|---|
| Free | 1 day |
| Go (any credit pack) | 7 days |
| Pro | 30 days |
| Scale | 90 days |
The duration is set when the file is stored, from your plan at that time. Storing files costs nothing more: you pay for the screenshot or PDF itself (see Credits).