← All docs

CMS webhook

The geodeck CMS webhook is a single signed POST endpoint that you call from your CMS whenever a page is published, updated, or unpublished. Since 2023, after Google retired the legacy /ping endpoint, this is the primary way to keep your llms.txt and search submissions fresh in 2026. Each event triggers an immediate llms.txt regeneration and queues IndexNow, Google Search Console, and (optionally) Google Indexing API pings within 5 seconds, so your changes reach search and AI crawlers without manual intervention.

What endpoint do I post to?

POST https://geodeck.icu/api/webhook/cms
X-geodeck-Signature: sha256=<hex hmac of raw body>
Content-Type: application/json

What does the payload look like?

{
  "domain": "example.com",
  "url":    "https://example.com/blog/post-slug",
  "event":  "publish"
}

event must be one of publish, update, or unpublish.

Batch submission

{
  "domain": "example.com",
  "urls": [
    "https://example.com/blog/post-one",
    "https://example.com/blog/post-two"
  ],
  "event": "update"
}

Batch mode accepts up to 500 same-host URLs per signed request. In batch mode, omit title, summary, content, and html.

How do I sign the request?

Compute HMAC-SHA256 of the raw request body using the domain's webhook secret. Send hex-encoded with the sha256= prefix.

echo -n "$BODY" | openssl dgst -sha256 -hmac "$SECRET" -hex

What HTTP responses can I expect?

  • 202 Accepted - payload queued.
  • 401 Unauthorized - missing/invalid signature.
  • 404 - unknown domain.
  • 429 - plan rate limit hit.

How should I retry on failure?

On a 5xx response from us, retry with exponential backoff (1s, 5s, 30s, 5m). After the third failure, surface the error in your CMS log.

Keep reading the rest of the Geodeck documentation, or jump to the platform pages.

Platform