Documentation
Save the page again
POST
/v1/links/{link}/snapshotsSnapshotsSaves the page the link points to now, as a new version. Answers at once with the version's format URLs, or with wait once it is saved. Free saves 50 pages a day and keeps 10 versions per link; Pro saves 1,000 and keeps 100. A page anyone saved in the last max_age seconds is reused and costs nothing. Also available as the MCP tool save_page.
Parameters
| Parameter | Type | Required | Description |
|---|---|---|---|
link | string, in the path | required | The link's id, or its ending. |
Request body
JSON, sent with Content-Type: application/json.
| Field | Type | Required | Description |
|---|---|---|---|
capture | boolean | string | string[] | optional | Save the page the link points to. true saves every format (Markdown, text, a full-page screenshot, a PDF and a web archive); a list or comma list picks some: markdown, text, screenshot, pdf, archive. The answer comes back at once with snapshot.formats; those URLs work right away and fill in seconds later. |
wait | boolean | optional | Hold the answer until the page is saved (up to about 25 seconds) and include its Markdown in snapshot.markdown. Without it the answer is immediate. |
max_age | integer | optional | Reuse a copy of the same page saved this many seconds ago or less (default 3600). 0 always loads the page again. |
Example request
curl -s -X POST "https://snip.link/v1/links/spring-menu/snapshots" \
-H "Authorization: Bearer $SNIP_KEY" \
-H "Content-Type: application/json" \
-d '{"capture":true,"max_age":0}'Example response
{
"snapshot": {
"id": "5f0f3a2e-8c1b-4b0e-9d6a-1f2e3d4c5b6a",
"status": "ok",
"reason": null,
"reused": false,
"saved_at": "2026-10-23T09:12:40.000Z",
"captured_at": "2026-10-23T09:12:46.000Z",
"source": "https://example.com/menus/spring-2026",
"final_url": "https://example.com/menus/spring-2026",
"title": "Spring menu",
"description": "Seasonal dishes, served from March to May.",
"formats": {
"md": "https://snip.link/spring-menu.md?v=5f0f3a2e-8c1b-4b0e-9d6a-1f2e3d4c5b6a",
"pdf": "https://snip.link/spring-menu.pdf?v=5f0f3a2e-8c1b-4b0e-9d6a-1f2e3d4c5b6a",
"jpg": "https://snip.link/spring-menu.jpg?v=5f0f3a2e-8c1b-4b0e-9d6a-1f2e3d4c5b6a"
},
"fingerprints": {
"markdown": "9f86d081884c7d659a2feaa0c55ad015a3bf4f1b2b0b822cd15d6c15b0f00a08"
}
}
}Response fields
| Field | Type | Description |
|---|---|---|
snapshot | Snapshot | The saved copy, when capture was sent. |
snapshot.id | string | The version's id; ?v=<id> on any format ending opens this version. |
snapshot.status | pending | running | ok | skipped | failed | pending or running: being saved. ok: saved. skipped: the page asks not to be archived (noarchive), so nothing was kept. failed: the page could not be loaded; reason says why. |
snapshot.reason | string, null | |
snapshot.reused | boolean | True when a copy of the page saved moments earlier was used. |
snapshot.saved_at | string | |
snapshot.captured_at | string, null | |
snapshot.source | string | The address that was saved: the link's destination at the time. |
snapshot.final_url | string, null | Where the browser ended up, after redirects. |
snapshot.title | string, null | |
snapshot.description | string, null | |
snapshot.formats | object | Each format this version can be had in, by extension, as the short link with that ending: md, txt, html (a reading view), pdf, jpg, png, webp, avif, json (the page's facts and words), csv (its tables) and mhtml. Private links' URLs carry a signature that works for a day. |
snapshot.fingerprints | object, null | SHA-256 of each saved file, by file name, once saved: proof of what the page said and when. |
snapshot.markdown | string | The page as Markdown, with wait. |
Errors
| Status | Meaning |
|---|---|
| 400 | The body or query is invalid. details names each field. |
| 401 | The API key is missing, malformed or revoked. |
| 404 | No link by that id or ending in this account. |
| 429 | Either the key exceeded its requests-per-second limit (honor Retry-After), or a daily or plan quota is used up (details.reason). |