Scrollify's API lets you list, create, and download exports, and create scheduled captures, programmatically. This is what internal teams — compliance, audit, QA, marketing ops — use to archive pages on a repeatable, automated basis instead of clicking through the UI. See archiving pages for compliance for the workflow this is built for. The API uses Bearer token authentication via an API key you generate in your account settings.
API access requires a Pro plan or higher. Free and Starter accounts can upgrade from Settings → API Access.
All requests must include your API key as a Bearer token in the Authorization header.
Authorization: Bearer <your-api-key>
Generate a key in Settings → API Access. Each user has one active key at a time. Rotating generates a new key and invalidates the old one immediately. If your plan drops below Pro, the key stops working immediately (it does not need to be revoked separately).
A key carries one or more scopes, controlling what it can do:
| Scope | Grants |
|---|---|
exports:read | List and get exports, download outputs. |
captures:write | Create a one-off export job, and create/list/enable/disable/delete scheduled captures. |
Keys generated from Settings → API Access currently receive both scopes by default. Pass {"scopes": ["exports:read"]} in the generation request body for a read-only key.
https://scrollify.io
List all exports for the authenticated user. Returns the same shape as the in-app library.
{
"object": "list",
"data": [
{
"jobId": "01JXXXXXXXXXXXXXXXXXXXXXXX",
"url": "https://example.com/page",
"status": "ready",
"createdAt": "2026-06-17T10:00:00.000Z",
"outputs": [
{
"outputId": "01JXXXXXXXXXXXXXXXXXXXXXXX",
"format": "mp4",
"status": "ready",
"downloadUrl": "/api/v1/outputs/01JXXX.../download"
}
]
}
]
}
Get a single export by its jobId (ULID).
Same shape as a single element from the list above. Returns 404 if not found or not owned by the key holder.
Requires captures:write. Create a new capture job — the same pipeline the browser UI uses. Runs immediately.
{
"url": "https://example.com/disclosures",
"outputs": ["mp4"],
"viewportWidth": 1280
}
curl -X POST https://scrollify.io/api/v1/exports \
-H "Authorization: Bearer <key>" \
-H "Content-Type: application/json" \
-d '{"url":"https://example.com/disclosures","outputs":["mp4"]}'
Returns 201 with the created job (poll GET /api/v1/exports/:jobId for status). Returns 400 on an invalid payload.
Requires captures:write. Lets an internal team set up a recurring dated archive of a URL without a browser session — the primitive behind compliance page archiving.
List scheduled captures for the key owner.
curl -X POST https://scrollify.io/api/v1/schedules \
-H "Authorization: Bearer <key>" \
-H "Content-Type: application/json" \
-d '{"url":"https://example.com/disclosures","interval_minutes":10080,"outputs":["mp4"]}'
See GET /api/v1/schedules/intervals for valid interval_minutes values (e.g. weekly = 10080). Plan limits on active schedule count apply the same as in the UI.
Body: {"enabled": true|false}.
Each output object includes a downloadUrl field when status is "ready". Append the base URL and request it with the same Authorization header — the server streams the file with a Content-Disposition: attachment header.
curl -H "Authorization: Bearer <key>" \
https://scrollify.io/api/v1/outputs/<outputId>/download \
-o my-export.mp4
Note: Download counts are tracked for each output. View counts are tracked when a share link is viewed.
| Endpoint | Limit | Window |
|---|---|---|
GET /api/v1/exports | 60 requests | 60 seconds |
GET /api/v1/exports/:jobId | 120 requests | 60 seconds |
POST /api/v1/exports | 10 requests | 60 seconds |
GET /api/v1/schedules | 60 requests | 60 seconds |
POST /api/v1/schedules, PATCH, DELETE | 20 requests | 60 seconds |
GET /api/v1/outputs/:id/download | 72 requests | 60 seconds |
Exceeding a limit returns 429 Too Many Requests.
{ "error": "Human-readable error message" }
| Status | Meaning |
|---|---|
401 | Missing, invalid, or revoked API key |
403 | Key holder's plan no longer includes API access (below Pro), or the key is missing the required scope |
404 | Export not found or not owned by key holder |
429 | Rate limit exceeded |
500 | Unexpected server error |