SnapRender

Signed URLs

Screenshots in any page, without exposing your API key

Sign a screenshot URL on your server, then drop it into an <img> tag, an email, a dashboard or a no-code tool. It renders for anyone who opens it, nobody can point it at another page, and it stops working when you say so. For front ends that need live captures without a proxy endpoint.

Signing is freeExpires in 1 minute to 30 daysEvery plan

A signed screenshot URL in an image tag and the capture it returns

A capture as a plain image URL

Calling the API from a browser would leak your key, and a proxy route is one more thing to build and run. A signed URL is the safe middle.

  • Your key stays on the server

    The URL carries a signature, never the key. Put it in client code, an email or a public page without worrying about who reads the source.

  • Locked to what you signed

    The target page and every option are part of the signature. Edit any of them and the request is refused, so the link cannot be reused for other sites.

  • Repeat views cost nothing

    The first open renders the page. After that it is served from cache for your plan's cache window, so a busy dashboard does not burn your quota.

Sign once, use anywhere

One server-side call, then the URL works on its own.

  1. Sign on your server

    POST /v1/screenshot/sign with the page, the options and how long the link should live: 60 seconds to 30 days, 24 hours by default.

  2. Put the URL where people look

    An <img> tag, an email template, a Slack message, a Notion or Airtable image field. No key, no headers.

  3. SnapRender checks and renders

    Each open is checked against the signature and the expiry, then rendered in real Chrome or served from cache.

curl -X POST "https://app.snap-render.com/v1/screenshot/sign" \
  -H "X-API-Key: sk_live_your_key_here" \
  -H "Content-Type: application/json" \
  -d '{"url": "https://example.com", "format": "webp", "width": 1280, "expires_in": 604800}'

Full reference: signed URLs in the docs.

See what the link returns

A signed URL renders exactly this. Try your page here, no sign-up needed.

Building for an AI agent? The MCP server has a sign tool, so the agent can share a capture link with the user.

Try it on your URL

Live capture, no signup. You get the screenshot and the exact API call that produced it.

Questions

How long does a signed URL work?

You choose with expires_in: from 60 seconds to 30 days. The default is 24 hours. After that the URL answers 410 Gone and you sign a new one.

When does it count against my quota?

Signing is free. A render counts when the URL is opened. Later opens are served from cache for your plan's cache window (1 day on Free, 7 days on Starter, 30 days on Growth and up) and do not count again.

Can someone edit the URL to capture another page?

No. The target URL and every option are covered by the signature. Change any of them and the request is refused with 403.

Can I revoke a signed URL?

Not one at a time. Revoke the API key that signed it in your dashboard and every URL it signed stops working at once. Short expiry times limit how long a shared link lives.

Which options can I sign?

The capture options: format, width, height, full_page, quality, delay, dark_mode, device preset, ad and cookie banner blocking, hide_selectors, click_selector and user_agent. Raw HTML input and custom request headers need a normal API call from your server.

Do signed URLs need an SDK?

No. One POST from any language returns the URL. The Node.js, Python and Go SDKs and the MCP server also have a sign method, so an AI agent can hand a user a link to a fresh capture.

Share captures, keep your key

Signing is free on every plan, and 200 renders a month are on us. No credit card.