Skip to main content

Events

Every payload has the same shape, so one handler covers all five — branch on event.
article.unpublished is the only event whose result we wait for. Answer 2xx once the post is off your site; on anything else the article stays Published in seosorted, the dashboard shows the error, and nothing is marked as taken down. The payload still carries the publishedAt and publishedUrl of the post being removed, so you can match it against what you stored at publish time.

Headers

X-SeoSorted-Delivery is unique per attempt — use it as an idempotency key. See verifying the signature.

Body

A real delivery, with the body fields truncated:

Fields

string
required
One of article.published, article.updated, article.deleted, test.
string
required
ISO 8601 timestamp of when we built the payload.
string
required
Matches the X-SeoSorted-Delivery header.
object
required
object
required
Take body.markdown if you store Markdown, body.html if you render directly. They are the same content — the HTML is rendered from the Markdown at delivery time.

A minimal handler

Express