Webhooks
Notify HTTPS endpoints about entry and master publish lifecycle events with HMAC signatures. Use them for ISR or external sync (Standard plan+).
What you have (done state)
| Item | State |
|---|---|
| Endpoint | HTTPS receiver URL is ready |
| Webhook | Created in Console; events subscribed |
| Verify | X-Luno-Signature verified over the raw body |
| Follow-up | Body fetched via Public API; revalidate (etc.) runs |
When to use
- Cache revalidation for Next.js and similar stacks
- Notify Slack or your own workers
- Update search indexes or CDN on publish
Checklist
- [ ] Registered URL + events under Console Settings → Webhooks
- [ ] Stored the secret in env (shown only once)
- [ ] Test publish shows a successful delivery
- [ ] After verify, you can refetch the body from Public API
Do this now
- Prepare a receiver URL (e.g.
/api/webhook/luno) - Create a webhook in Console; subscribe to
entry.published(etc.) - Publish an entry and confirm delivery history
- Refetch the body after delivery (payload has no
data)
bash
curl "https://api.luno.rest/public/p/{projectId}/v1/form-sets/blog/entries/my-first-post?include_snapshot=true"ts
const { project_id, form_set_slug, entry_slug } = payload
const res = await fetch(
`https://api.luno.rest/public/p/${project_id}/v1/form-sets/${form_set_slug}/entries/${entry_slug}?include_snapshot=true`
)bash
# "Write a signed entry.published handler that revalidates /blog"- Signature code: Webhooks reference
Next
| Goal | Page |
|---|---|
| Payload, signatures, examples | Webhooks reference |
| Scheduled publishing | Scheduled publishing |
| Read-only path C | API only done state |