Don't have a native Sorank integration for your CMS? The Webhook connector lets you push your generated articles to any URL, Zapier, Make, n8n or a custom endpoint on your own coded website, so you can publish your content wherever you need it.
When you publish an article in Sorank, we send a POST request with a structured JSON payload to the URL you configured. Your endpoint or automation tool can then process the payload and create the post on your blog, custom website, or any other tool that accepts incoming HTTP requests.
This is the single most important thing to understand about the Webhook connector. On our side, Sorank packages everything you need inside the JSON (title, slug, full HTML body, meta description, images, language and more) and fires it to your URL. As soon as that JSON is successfully sent, Sorank marks the delivery as success.
That "success" status only confirms one thing: the data left Sorank and your endpoint accepted it. We have no way of knowing what happens next on your side. We cannot detect whether your code actually read the JSON, mapped the fields correctly, or pushed the article live on your website.
In other words, the webhook is just a delivery mechanism for the data. Receiving it, parsing it and publishing it to your CMS is entirely your responsibility. If the article doesn't appear on your blog even though Sorank shows "success", the issue is almost always in how your integration catches and handles the payload, not in the delivery itself.

Bearer token in the Authorization header so your server can verify the call comes from Sorank.webhook.test) and confirm your endpoint responds correctly.
Every webhook Sorank sends to your endpoint follows the same HTTP contract. Here is what your server will receive:
POSTapplication/jsonSORANK-Webhook/1.0Bearer {webhook_secret} (optional, only sent if you configured a secret in your integration settings)Use the User-Agent header to identify Sorank traffic in your logs, and verify the Authorization header on your side to ensure the request comes from Sorank and not an unknown caller.
Sorank emits two types of webhook events. Both share the same top-level envelope (event, delivery_id, timestamp, article) so your integration only needs to switch on the event field to route the payload.
article.publishedFired every time you publish an article from Sorank. This is the event your production endpoint should process to create the post in your CMS or trigger your automation flow.
{
"event": "article.published",
"delivery_id": "550e8400-e29b-41d4-a716-446655440000",
"timestamp": "2025-05-21T10:30:45.123456Z",
"article": {
"id": "550e8400-e29b-41d4-a716-446655440000",
"title": "Best SEO Practices for 2025",
"slug": "best-seo-practices-2025",
"meta_description": "Discover the best SEO practices for 2025.",
"focus_keyphrase": "seo practices",
"content": "<h1>Best SEO Practices</h1><p>Article body content here...</p>",
"featured_image": {
"url": "https://storage.example.com/image.jpg",
"alt": "Best SEO Practices for 2025",
"placement": "hero"
},
"images": [
{
"url": "https://storage.example.com/image2.jpg",
"alt": "SEO diagram",
"placement": "body"
}
],
"word_count": 1500,
"keyword": "seo practices",
"language": "en-US"
}
}webhook.testFired when you click the Test button in Sorank to verify your endpoint is reachable. The payload uses dummy values (id is all zeros, featured_image is omitted, images is empty) so your integration can safely ignore it or use it to confirm connectivity without creating a real post.
{
"event": "webhook.test",
"delivery_id": "550e8400-e29b-41d4-a716-446655440000",
"timestamp": "2025-05-21T10:30:45.123456Z",
"article": {
"id": "00000000-0000-0000-0000-000000000000",
"title": "Test Article - Webhook Connectivity Check",
"slug": "test-article-webhook-check",
"meta_description": "This is a test payload to verify webhook connectivity.",
"focus_keyphrase": "webhook test",
"content": "<h2>Test Article</h2><p>This is a test payload sent by SORANK to verify your webhook endpoint is working correctly.</p>",
"images": [],
"word_count": 20,
"keyword": "webhook test",
"language": "en-US"
}
}article.published or webhook.test. Switch on this field to route the payload.<meta name="description"> tag.url, alt and placement. Only present on article.published events.url, alt and placement. May be empty.en-US, fr-FR).event field server-side so webhook.test calls never create real posts.delivery_id as an idempotency key to avoid publishing the same article twice on retries.Authorization header on every request, and rotate the secret regularly.Because the webhook only delivers the data, a "success" in Sorank does not guarantee the article is live on your site. When something goes wrong, it is almost always on the receiving side. Here are the most common causes and how to fix them.
article.title, article.slug, article.content, etc., exactly as documented above.Authorization header.SORANK-Webhook/1.0 User-Agent.When Sorank can't deliver an article to your endpoint, your scheduler is automatically paused and you'll receive an email. As soon as you fix the issue and reconnect your webhook in Sorank, your scheduler resumes on its own. Your article is already generated and safely stored, nothing is lost.
The webhook requires you to write and maintain code that catches the JSON and publishes it to your site. If you built your site with a no-code or AI tool, like Lovable, Base44, Cursor or Claude Code, and you're not able to develop and host an endpoint that catches the webhook and publishes the article, there's a much simpler path.
We created a solution where you can auto-host your blog on your own subdomain, directly on Sorank. No code, no endpoint to maintain, no webhook to catch. Learn how it works here: Host your blog on Sorank.
If your platform is supported, a direct connector is easier than the webhook. See our guides for Webflow, Shopify, WordPress.org, WordPress.com, Wix and HubSpot.
If you've checked the points above and publishing still fails, reply directly to the email you received: our team will look into what's happening on your account.
Your articles remain generated and stored safely in Sorank. As soon as the connection is restored, your scheduler picks up automatically where it left off.