Back to blog
ProductPermalinksAPI

Permalinks: screenshot URLs that stay put

Store a capture with no expiry, optionally refresh it on a schedule, and revoke it when you are done. A tour of the persistence option.

Thien Nguyen
Thien Nguyen
Creator & Maker
· Aug 5, 2026· 2 min read

By default, capture files live on the CDN for a limited time (cdnTtl, one day unless you change it). That is right for most workloads - you download the file or hand it to a user, and you are done. But some screenshots need to stick around: an image embedded in a README, a thumbnail in an email template, an archive record.

That is what permalinks are for.

Creating a permalink

{
  "url": "https://example.com",
  "persistence": { "enabled": true }
}

The capture is stored with no expiration and the returned fileUrl stays valid until you revoke it. cdnTtl is ignored for persistent captures.

Keeping it fresh

A permanent URL is more useful when the image behind it stays current. Set refreshInterval in seconds and Snapopa re-captures the page on that schedule, serving the new image at the same URL:

{
  "url": "https://example.com/status",
  "persistence": { "enabled": true, "refreshInterval": 86400 }
}

Each refresh is a real capture and is billed like one, so pick an interval that matches how often the page actually changes.

Revoking

When you no longer need a permalink, revoke it with its UUID:

curl -X POST https://api.snapopa.com/revoke/<uuid> \
  -H "Authorization: Bearer $SNAPOPA_API_KEY"

The file is deleted and any scheduled refreshes stop. You can also manage permalinks from the Permalinks page in the dashboard.

Ideas

  • A live screenshot of your landing page in your GitHub README.
  • Thumbnails for a directory site that update weekly.
  • A daily snapshot of a competitor's pricing page, one URL per competitor.
Try Snapopa

Reading about screenshots? Try the API.

100 free tokens on signup. No credit card. One request is all it takes.

$ curl https://api.snapopa.com/capture \
    -H "Authorization: Bearer sk_•••" \
    -d '{"url":"https://stripe.com"}'

✓ 200 OK
{ "data": { "fileUrl": "https://cdn.snapopa.com/…" } }