U Ranket
⌘K

Connect your CMS

Receive Ranket articles via signed webhook. Works with WordPress, Webflow, Ghost, Sanity, custom Next.js, or any JSON-capable receiver.

Ranket ships every article to your CMS through a single signed HTTP webhook. There’s no CMS plugin to install. Any system that can receive a JSON POST works.

What you’ll need

  • A public HTTPS endpoint that accepts POST requests
  • The ability to verify an HMAC SHA-256 signature on the body
  • Logic to map our payload into a published post in your CMS

That’s it. The full payload spec, signature verification, and code examples are in webhooks.

The 60-second setup

  1. Go to brand settings → CMS webhooks
  2. Click “Add endpoint”
  3. Paste your endpoint URL (e.g. https://your-site.com/api/ranket-webhook)
  4. Copy the signing secret Ranket generates — it’s shown ONCE
  5. Click “Send test” to receive a sample payload

If your receiver returns a 2xx, you’re done. If it fails, the dashboard shows the response body so you can debug.

What the payload looks like

{
  "event": "article.published",
  "delivery_id": "evt_a1b2c3...",
  "timestamp": "2026-05-15T09:00:00Z",
  "brand": {
    "id": "uuid",
    "domain": "your-site.com"
  },
  "article": {
    "title": "...",
    "slug": "...",
    "metaTitle": "...",
    "metaDescription": "...",
    "excerpt": "...",
    "bodyMarkdown": "...",
    "bodyHtml": "...",
    "faq": [{ "question": "...", "answer": "..." }],
    "images": [{ "url": "...", "alt": "...", "position": "hero" }],
    "externalLinks": [...],
    "internalLinks": [...],
    "jsonLd": { "@context": "...", "@graph": [...] },
    "meta": {
      "ogTitle": "...",
      "twitterCard": "summary_large_image",
      "readTimeLabel": "8 min read",
      ...
    },
    "wordCount": 3200,
    "readTimeMinutes": 16
  }
}

Most CMSes only need a fraction of these fields. Markdown body + title + slug + hero image is enough to publish.

Per-CMS recipes

Until those are written, the webhook contract is enough to roll your own in any language.

Multiple endpoints per brand

You can register more than one endpoint per brand — useful if you want one webhook to publish to your CMS and another to ping a Slack channel or Notion log.

Each endpoint gets its own secret, retry policy, and delivery log. Disabling an endpoint pauses deliveries to it without losing history.

What happens on failure

If your endpoint returns non-2xx (or times out at 30 seconds):

  1. Delivery is logged with the response status + body
  2. Automatic retry at 1 minute, then 5 minutes, then 30 minutes
  3. After 3 failed retries, the delivery is marked failed and surfaces in the dashboard
  4. The article itself stays ready and can be redelivered manually

Failed deliveries don’t block subsequent articles — each one is a separate delivery attempt.

Idempotency

Every delivery includes a unique delivery_id header (X-Ranket-Delivery-Id) and body field. If your receiver retries a webhook that already succeeded (which can happen on network blips), use this ID to deduplicate.

We never re-issue a delivery_id. Two POSTs with the same ID = same event.

Skipping the webhook (manual export)

If you don’t want autopilot:

  • In review mode, you approve articles one at a time
  • Each approved article is downloadable as Markdown + JSON-LD + image bundle (zip) from the dashboard
  • The webhook still fires if configured, but you can skip it and copy/paste

This is the migration-path approach for users who want to evaluate output quality before automating delivery.

Was this page helpful?