Skip to content

Documentation

Save the page again

POST/v1/links/{link}/snapshotsSnapshots

Saves 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

ParameterTypeRequiredDescription
linkstring, in the pathrequiredThe link's id, or its ending.

Request body

JSON, sent with Content-Type: application/json.

FieldTypeRequiredDescription
captureboolean | string | string[]optionalSave 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.
waitbooleanoptionalHold 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_ageintegeroptionalReuse 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

FieldTypeDescription
snapshotSnapshotThe saved copy, when capture was sent.
snapshot.idstringThe version's id; ?v=<id> on any format ending opens this version.
snapshot.statuspending | running | ok | skipped | failedpending 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.reasonstring, null
snapshot.reusedbooleanTrue when a copy of the page saved moments earlier was used.
snapshot.saved_atstring
snapshot.captured_atstring, null
snapshot.sourcestringThe address that was saved: the link's destination at the time.
snapshot.final_urlstring, nullWhere the browser ended up, after redirects.
snapshot.titlestring, null
snapshot.descriptionstring, null
snapshot.formatsobjectEach 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.fingerprintsobject, nullSHA-256 of each saved file, by file name, once saved: proof of what the page said and when.
snapshot.markdownstringThe page as Markdown, with wait.

Errors

StatusMeaning
400The body or query is invalid. details names each field.
401The API key is missing, malformed or revoked.
404No link by that id or ending in this account.
429Either the key exceeded its requests-per-second limit (honor Retry-After), or a daily or plan quota is used up (details.reason).

Back to getting started