Webhook Publishing
Send AI-generated articles directly to your CMS or website. When you click Publish on an article, QuickSEO sends the content as a JSON payload to your configured webhook URL.
Setting Up Your Webhook
- Go to Settings for your site
- Scroll to the Webhook Publishing card
- Enter your webhook endpoint URL (must be HTTPS)
- Click Save
A bearer token is automatically generated when you save. Copy it and configure your webhook receiver to verify incoming requests.
How It Works
When you publish an article, QuickSEO sends a POST request to your webhook URL with:
- Header:
Authorization: Bearer <your-token> - Header:
Content-Type: application/json - Header:
X-QuickSEO-Event: article.published
Payload Format
{
"event": "article.published",
"timestamp": "2026-01-15T12:00:00.000Z",
"article": {
"id": "uuid",
"title": "Your Article Title",
"slug": "your-article-title",
"description": "A short summary of the article.",
"tags": ["seo", "ai"],
"cover_image_url": "https://example.com/image.jpg",
"html": "<h1>Your Article Title</h1><p>Full HTML content...</p>",
"markdown": "# Your Article Title\n\nFull markdown content...",
"created_at": "2026-01-15T12:00:00.000Z"
}
}
Both html and markdown versions of the article content are included so you can use whichever format your CMS supports.
Verifying Requests
Always verify the Authorization: Bearer header matches your token before processing the payload. This ensures the request is genuinely from QuickSEO.
Example: Node.js / Express
app.post('/api/webhook', (req, res) => {
const token = req.headers['authorization']?.replace('Bearer ', '')
if (token !== process.env.QUICKSEO_WEBHOOK_SECRET) {
return res.status(401).json({ error: 'Unauthorized' })
}
const { article } = req.body
// Save article to your database or CMS
console.log('Received article:', article.title)
res.status(200).json({ success: true })
})
Example: Next.js API Route
export async function POST(request: Request) {
const authHeader = request.headers.get('Authorization')
const token = authHeader?.replace('Bearer ', '')
if (token !== process.env.QUICKSEO_WEBHOOK_SECRET) {
return Response.json({ error: 'Unauthorized' }, { status: 401 })
}
const { article } = await request.json()
// Save article to your database or CMS
return Response.json({ success: true })
}
Retries
If your endpoint returns a non-2xx status code or times out (10 second limit), QuickSEO will retry up to 3 times with increasing backoff:
| Attempt | Delay |
|---|---|
| 1st | Immediate |
| 2nd | 30 seconds |
| 3rd | 2 minutes |
After 3 failed attempts, the delivery is marked as failed. You can re-publish the article to try again.
Testing Your Webhook
Use the Send Test Article button in Settings to verify your endpoint is working before publishing real content. The test sends a sample article payload with placeholder content.
Managing Your Token
- Regenerate: Click Regenerate Token in Settings to create a new token. The old token is immediately invalidated — update your webhook receiver.
- Copy: Use the copy button to grab the full token. The token is only visible right after saving or regenerating.
Disabling the Webhook
Toggle the Enabled switch off to temporarily stop sending articles without deleting your configuration. Toggle it back on when ready.
To permanently remove the webhook, click Remove Webhook.
Need Help?
If you have questions or need support, reach out to us at support@quickseo.ai.