Integrations
Webhooks
Send finished articles from Kitful to another tool with a webhook.
Use Webhooks when you want Kitful to hand off finished articles to another system that does not have a built-in integration.
If someone else on your team handles the technical setup, you can share this page with them.
What you need before you start
- a public
https://webhook URL - access to the tool or service that will receive the article
- optional: a shared secret if your team wants signed requests
Connect Webhooks in Kitful
- Open your workspace in Kitful.
- Go to
Integrations. - Click
AddonWebhook. - Fill in:
Integration NameWebhook URLSecret (Optional)
- Click
Save.
What Kitful sends
Kitful sends a POST request with Content-Type: application/json.
Payload
{
"id": "01JQ...",
"title": "How to Improve Core Web Vitals",
"slug": "how-to-improve-core-web-vitals",
"html": "<h2>Introduction</h2><p>...</p>",
"excerpt": "A short summary of the article.",
"metaTitle": "How to Improve Core Web Vitals | Your Site",
"metaDescription": "Learn practical steps to improve your Core Web Vitals scores.",
"featuredImage": {
"url": "https://cdn.example.com/image.webp",
"alt": "Core Web Vitals dashboard"
},
"tags": ["seo", "performance"],
"publishedAt": "2026-03-23T12:00:00.000Z"
}| Field | Type | Description |
|---|---|---|
id | string | Unique article identifier |
title | string | Article title |
slug | string | URL-friendly slug |
html | string | Full HTML content including table of contents |
excerpt | string | Short summary (falls back to meta description) |
metaTitle | string | null | SEO title |
metaDescription | string | null | SEO description |
featuredImage | object | null | { url, alt? } — featured image details |
tags | string[] | Article tags |
publishedAt | string | ISO 8601 publish timestamp |
Signature verification
If you add a secret during setup, Kitful signs every request with an X-Kitful-Signature header so your receiving system can verify it came from Kitful.
Header format: X-Kitful-Signature: sha256={hex_signature}
Kitful computes an HMAC-SHA256 hash of the raw JSON request body using your secret as the key.
Verify in Node.js
import crypto from 'node:crypto';
function verifyKitfulSignature(body, secret, signatureHeader) {
const expected = crypto
.createHmac('sha256', secret)
.update(body)
.digest('hex');
return signatureHeader === `sha256=${expected}`;
}
// In your request handler:
const raw = await request.text();
const sig = request.headers.get('X-Kitful-Signature');
if (sig && !verifyKitfulSignature(raw, YOUR_SECRET, sig)) {
return new Response('Invalid signature', { status: 401 });
}
const payload = JSON.parse(raw);Verify in Python
import hmac, hashlib
def verify_kitful_signature(body: bytes, secret: str, signature_header: str) -> bool:
expected = hmac.new(secret.encode(), body, hashlib.sha256).hexdigest()
return signature_header == f"sha256={expected}"Publish an article manually
- Open the article in Kitful.
- Click
Publish. - Choose your webhook integration.
- Confirm the publish.
Use Webhooks with Autoblog
- Open
Autoblog. - Create a campaign or edit an existing one.
- Choose your webhook integration in
Campaign Configuration. - Save or launch the campaign.
Troubleshooting
Failed to create integration
- Confirm the webhook URL is a valid
https://address. - Make sure the integration name is not already being used in the same workspace.
Webhook returns 401 or 403
- Check the receiving service's authentication rules.
- If you use a secret, confirm both sides are using the same value.
Webhook returns 404
- Double-check the exact webhook path.
- Make sure the receiving endpoint is live and publicly reachable.
Publishing fails with a non-2xx response
- Check the receiving service logs.
- Make sure the destination only returns success after it accepts the article.