SnapRender

Webhook notifications

Webhooks that tell your code when captures are ready

Stop polling. SnapRender sends a signed POST to your server when a batch finishes, a scheduled capture runs, a watched page changes, or your quota runs low. For backends, Slack bots and no-code flows that should act on a capture the moment it exists.

Included in every planHMAC-SHA256 signedRetried for over an hour

The signed webhook request your server receives when a batch finishes

Your server hears about it first

A loop that asks "done yet?" every few seconds wastes calls and still reacts late. A webhook arrives once, when there is something to do.

  • React the moment it happens

    Store a finished batch, post a page change to Slack, or pause a job when quota runs low, without a polling loop.

  • Know it came from SnapRender

    Every delivery is signed with your own secret. Ten lines of code reject anything forged before you act on it.

  • Survives a bad minute

    If your endpoint is down, the delivery is retried after 1, 5 and 15 minutes and after an hour. A test call checks your setup first.

Five events, one format

The body is JSON. The event name is in the X-SnapRender-Event header and the signature in X-SnapRender-Signature.

EventFires whenYou get
screenshot.completedA batch has captured its last URLJob ID, status, total, completed and failed counts
change.detectedA scheduled capture differs from the last one by more than your thresholdSchedule, URL, share of the page changed, SHA-256 and a download link
capture.completedAny scheduled capture finishes, changed or not, or failsThe same fields, with changed true or false
quota.warningYou have used 80% of your monthly rendersPlan, used, limit and remaining
quota.exceededYou have used all of themThe same fields

Set up in three calls

Register once, verify every delivery, test before you rely on it.

  1. Register your URL

    POST /v1/webhooks with the address and the events you want. Keep the whsec_ secret from the response.

  2. Verify each delivery

    Hash the raw body with your secret and compare it with X-SnapRender-Signature. Answer 2xx within 10 seconds.

  3. Send a test event

    POST /v1/webhooks/{id}/test delivers a signed test event and reports the status code your server returned.

curl -X POST "https://app.snap-render.com/v1/webhooks" \
  -H "X-API-Key: sk_live_your_key_here" \
  -H "Content-Type: application/json" \
  -d '{"url": "https://your-server.com/hooks/snaprender",
       "events": ["screenshot.completed", "change.detected"]}'

# The response includes the signing secret, shown once:
# { "id": "...", "secret": "whsec_...", "events": [...] }

Full reference: webhooks in the docs. The Node.js, Python and Go SDKs have webhook helpers.

Questions

Which events can a webhook receive?

screenshot.completed when a batch finishes, capture.completed after every scheduled capture, change.detected when a scheduled capture differs from the last one by more than your threshold, and quota.warning and quota.exceeded at 80% and 100% of your monthly renders. Each webhook subscribes to the events you choose.

How do I verify a delivery?

Every request carries an X-SnapRender-Signature header: sha256= followed by the HMAC-SHA256 of the raw request body, keyed with your webhook secret (the whsec_ value returned when you registered it). Compute the same value and compare. The event name is in X-SnapRender-Event.

What happens if my server is down?

Answer with a 2xx status within 10 seconds. If a delivery fails, SnapRender retries after 1 minute, 5 minutes, 15 minutes and 1 hour: five attempts in all. If every attempt fails, that event is dropped and the webhook stays on. Only when nothing has reached your endpoint for 72 hours is the webhook paused; a successful test call (POST /v1/webhooks/{id}/test) turns it back on.

How many webhooks can I register?

Up to 5 per account, each with its own URL, secret and list of events. For example, one for your backend and one for a Slack bridge.

Can I test my endpoint before going live?

Yes. POST /v1/webhooks/{id}/test sends a signed test event to your URL and tells you which status code your server answered.

Do I need a webhook to hear about page changes?

No. Scheduled captures can email you when a page changes, with a link to the before and after, side by side. Webhooks are for when your own code should react.

Stop polling, start reacting

Free plan, every feature, webhooks included. No credit card.