Push webhook
When Rankfender POSTs a published article to your site: headers, authentication options, payload fields, expected reply and testing.
With the push webhook, Rankfender sends each article to an address on your site the moment it is published. You set the address, the authentication and extra headers on the "Modern Web Integration" card, tab "PUSH (Webhook)": see Modern Web.
When Rankfender calls your endpoint
- Each time an article of the project is published: by you from Content, or by autopilot when auto-publish is on.
- Only when "Enable Webhook" is on and a Webhook URL is saved.
- If the project also has WordPress connected, articles go to WordPress instead.
- One event exists: article.published. Edits and deletions are not sent.
Headers
| Header | Value |
|---|---|
| Content-Type | application/json |
| X-Rankfender-Event | article.published |
| X-Rankfender-Domain | The project's website address |
| X-Rankfender-Test | true, on test calls only |
| Your custom headers | Every header in "Custom Headers (Optional)", sent as typed |
Authentication options
| "Authentication Method" | What Rankfender sends |
|---|---|
| None | No credential. |
| API Key | x-api-key: <your key> |
| Bearer Token | Authorization: Bearer <your token> |
| Basic Auth | Authorization: Basic <the value you entered>. Enter the value already base64-encoded (user:password). |
| Webhook Secret | x-webhook-secret: <your secret> |
The payload
A JSON body with the article at the top level and again under article, plus the project under domain. content is HTML, cleaned before sending; an article with less than 100 characters of content is not sent. author is "Rankfender" unless the article has one.
{
"event": "article.published",
"title": "…",
"slug": "…",
"content": "<h2>…</h2><p>…</p>",
"excerpt": "…",
"meta_description": "…",
"meta_title": "…",
"keywords": ["…"],
"featured_image": "https://…",
"author": "Rankfender",
"published_at": "2026-10-14T09:12:00.000Z",
"seo_data": { "title_tag": "…", "meta_keywords": "…", "canonical_url": "" },
"custom_data": { "article_id": "…", "generated_by": "Rankfender", "word_count": 1850 },
"article": {
"id": "…", "title": "…", "slug": "…", "content": "…", "excerpt": "…",
"meta_description": "…", "featured_image": "https://…", "cover_image_url": "https://…",
"scheduled_date": null, "published_at": "…", "target_keyword": "…"
},
"domain": { "id": "…", "url": "https://your-site.com", "name": "…" }
}What your endpoint must answer
- Any status from 200 to 299 counts as delivered. Anything else marks the publication as failed, with "Webhook returned <status>" and the start of your reply.
- Optional: reply with JSON giving id (or post_id) and url (or permalink, external_url). Rankfender stores the URL as the article's live address. Without it, the address is your site URL plus the slug.
- Save the article in your own CMS or database: Rankfender keeps nothing on your side.
HTTP/1.1 200 OK
Content-Type: application/json
{ "id": "123", "url": "https://your-site.com/blog/your-article" }Testing
"Test Webhook" sends a sample article titled "Rankfender Webhook Test" with X-Rankfender-Test: true and custom_data.test set to true, so your endpoint can ignore it. Success shows "Webhook test successful! Endpoint responded with 2xx."; after real deliveries, "Last successful call:" shows the date.
Important
The test is sent from your browser, so your endpoint must accept cross-origin requests (CORS) from app.rankfender.com for the test to pass. Real deliveries come from Rankfender's servers and are not affected.