Skip to main content

Overview

The webhook integration allows you to send article data to any custom HTTP endpoint. This is perfect for custom CMS integrations, automation workflows, or connecting to platforms not natively supported.

Use Cases

  • Custom CMS platforms
  • Headless CMS integrations
  • Automation workflows (Make, n8n, etc.)
  • Content syndication
  • Custom content pipelines
  • Internal content management systems

Setup Instructions

Step 1: Configure Webhook URL

  1. Go to Integrations in Sight AI
  2. Click Webhook
  3. Enter your webhook endpoint URL
  4. Select the HTTP method (POST is default)
  5. Add any custom headers if needed
  6. Click “Save”

Step 2: Test the Connection

  1. Click “Send Test”
  2. Verify your endpoint receives the test payload
  3. Check the response status
The test payload uses event type article.ready with "test": true and contains example article data. It may or may not include a signature depending on whether you’ve saved a webhook secret (see Security Options).

Step 3: Add Categories (Optional)

Categories let you organize articles into groups that map to your CMS or content structure. When an article is published, its assigned category is included in the webhook payload.
  1. In the webhook settings, click the “Categories” tab
  2. Click “Add Category”
  3. Fill in the category details:
FieldRequiredDescription
NameYesDisplay name (max 100 characters)
SlugYesURL-friendly identifier, lowercase with hyphens only (max 100 characters)
DescriptionNoOptional description (max 500 characters)
External IDNoYour external system’s category ID for mapping
  1. Click “Save”
Slugs must be unique within a single webhook integration. You can add up to 100 categories per integration.
Categories are optional. Your webhook integration works without any categories configured. Add them when you need to route or organize articles in your receiving system.
Once categories are created, they appear as options when generating or editing articles — just like categories in WordPress, Webflow, or other CMS integrations.

Payload Format

When an article is synced, Sight AI sends a JSON payload to your endpoint:
{
  "event_id": "evt_abc123",
  "event": "article.ready",
  "timestamp": "2024-01-15T10:30:00Z",
  "article": {
    "id": "article_abc123",
    "slug": "article-title",
    "title": "Article Title",
    "content": "<p>Full HTML content...</p>",
    "summary": "Article summary...",
    "seo_title": "SEO Title",
    "seo_meta_description": "Meta description for search engines",
    "target_keyword": "target keyword",
    "main_image_url": "https://...",
    "thumbnail_image_url": "https://...",
    "article_type": "explainer",
    "category": "blog",
    "author_name": "Author Name",
    "read_time_minutes": 5,
    "is_featured": false,
    "published_at": "2024-01-15T10:30:00Z",
    "created_at": "2024-01-15T10:30:00Z",
    "updated_at": "2024-01-15T10:30:00Z"
  },
  "site": {
    "id": "site_xyz789",
    "name": "Your Site Name",
    "host": "yoursite.com",
    "canonical_host": "www.yoursite.com"
  }
}
The category field contains the name of the category assigned to the article (not an ID). If no category was assigned, this field is null. To map categories to your CMS, set an External ID on each category in the webhook settings (see Step 3) — your endpoint can then look up the external ID by matching on the category name. The event_id serves as an idempotency key to prevent duplicate processing. The site.host field contains the base domain (without www.), while site.canonical_host contains the domain exactly as you entered it in your site settings (preserving www. if set). Use canonical_host when constructing URLs that should match your site’s preferred domain format.

Configuration Options

HTTP Method

Choose the HTTP method for your webhook:
  • POST — Most common, sends data in request body
  • PUT — For update-style operations

Custom Headers

Add custom headers for authentication or identification:
  • Authorization — API key or bearer token
  • X-API-Key — Custom API key header
  • Content-Type — Defaults to application/json

Send Mode

Control when webhooks are sent from the Settings tab:
  • Manual (default) — Webhooks are only sent when you click “Sync to Webhook” on an article. This gives you full control over when data is sent.
  • Automatic — Webhooks are sent automatically when article generation completes. Use this for fully automated workflows.
Automatic mode pairs well with Autopilot for a fully hands-off content pipeline: Autopilot generates articles, and the webhook delivers them to your system automatically.

Delivery Settings

Customize retry behavior and timeouts from the Settings tab:
SettingDefaultDescription
Max Retries3Number of retry attempts for failed deliveries (1-10)
Timeout30 secondsHow long to wait for your endpoint to respond before timing out
Failed deliveries are retried with exponential backoff.

Managing Categories

After adding categories, you can manage them from the Categories tab:
  • Edit — Update the name, slug, description, or external ID of any category
  • Delete — Remove a category (articles previously assigned to it keep their category value)
Only team owners and admins can create, edit, or delete categories. All team members can view categories and assign them to articles.

Security Options

Configure security settings during webhook setup: Verify SSL — Enabled by default. When on, Sight AI verifies the SSL certificate of your endpoint. Disable only for development/testing with self-signed certificates. Sign Requests — Enabled by default. When on, Sight AI signs webhook requests with an HMAC-SHA256 signature using your webhook secret. The signature is included in the X-Sight-Signature header.
Test payloads may not be signed. When you click “Send Test”, the request is only signed if a webhook secret has already been saved and signing is enabled. If you’re testing before saving your integration, or if signing is disabled, the test payload will be sent unsigned. Your endpoint should allow unsigned requests for article.ready events where "test": true, while still requiring valid signatures for all other article.ready and article.updated events.

Webhook Secret

When request signing is enabled, Sight AI includes a signature header with every delivery:
X-Sight-Signature: sha256=abc123...
You can use a managed secret (auto-generated by Sight AI) or provide your own custom secret. To verify a webhook:
  1. Extract the raw JSON request body
  2. Compute the HMAC-SHA256 hash using your webhook secret
  3. Compare it to the signature in the X-Sight-Signature header using a timing-safe comparison
If your endpoint doesn’t verify signatures on production events (article.ready, article.updated), attackers could send fake webhook requests to your server. Always verify signatures on non-test events.

Event Types

EventDescription
article.readyArticle was synced/published (test events include "test": true in the payload)
article.updatedArticle was updated and re-synced

Test Payload

When you click “Send Test”, Sight AI sends an article.ready event with example data:
{
  "event_id": "test_abc123...",
  "event": "article.ready",
  "timestamp": "2025-01-15T10:30:00Z",
  "article": {
    "id": "example_article_id",
    "title": "Example Article: How to Build Better Content",
    "slug": "example-article-how-to-build-better-content",
    "content": "<h1>Example Article</h1><p>This is example content...</p>",
    "summary": "Learn how to build better content...",
    "seo_title": "Example Article: How to Build Better Content",
    "seo_meta_description": "Learn how to build better content...",
    "target_keyword": "build better content",
    "main_image_url": "https://example.com/images/example.jpg",
    "thumbnail_image_url": "https://example.com/images/example-thumb.jpg",
    "article_type": "explainer",
    "category": "Content Marketing",
    "author_name": "Sight AI",
    "read_time_minutes": 5,
    "is_featured": false,
    "published_at": null,
    "created_at": "2025-01-15T10:30:00Z",
    "updated_at": "2025-01-15T10:30:00Z"
  },
  "site": {
    "id": "example_site_id",
    "name": "Example Site",
    "host": "https://example.com"
  },
  "test": true,
  "message": "This is a test webhook from Sight AI with example payload structure"
}
Your endpoint should return a 2xx response for the test to pass. You can identify test events by checking for "test": true in the payload.

Response Handling

Your endpoint should respond with:
  • 2xx — Success, delivery confirmed
  • 4xx — Client error, will not retry
  • 5xx — Server error, Sight AI will retry
Respond within 30 seconds to avoid timeout.

Retry Policy

Failed webhooks (5xx responses or timeouts) are retried with exponential backoff:
  • First retry: 1 minute after failure
  • Second retry: 5 minutes after first retry
  • Third retry: 15 minutes after second retry
By default, Sight AI retries up to 3 times. You can adjust the max retries (1-10) and timeout in Settings > Delivery Settings. If your endpoint fails 10 consecutive times across multiple deliveries, the integration is automatically paused to protect your server. Fix the issue and save your configuration to reactivate.

Delivery Logs

View webhook delivery history:
  1. Go to Integrations > Webhook
  2. Click “View Logs”
  3. See recent deliveries with status and response

Example Integrations

Zapier (via Webhooks by Zapier)

  1. Create a new Zap with “Webhooks by Zapier” trigger
  2. Select “Catch Hook”
  3. Copy the webhook URL
  4. Paste into Sight AI webhook configuration
  5. Set up your Zap actions

Make (formerly Integromat)

  1. Create a new scenario with Webhook module
  2. Select “Custom webhook”
  3. Copy the webhook URL
  4. Configure in Sight AI
  5. Add your Make actions

Troubleshooting

Webhook Not Received

  • Verify the endpoint URL is correct and accessible
  • Check for firewall or IP restrictions
  • Ensure your server is running and responding
  • Review delivery logs for error details

Authentication Failed

  • Verify custom headers are configured correctly
  • Check API key or token validity
  • Ensure header names match what your endpoint expects

Active CMS

Sight AI supports only one active CMS integration per site at a time. When you set Webhook as your active CMS, articles are synced to your webhook endpoint instead of any previously active CMS (e.g., WordPress or Webflow). To set Webhook as your active CMS, click “Set as Active CMS” on the webhook setup page. You can switch to a different CMS at any time from the Integrations hub — your webhook configuration is preserved.

Disconnecting

To disable the webhook:
  1. Go to Integrations > Webhook
  2. Click “Disable” or delete the webhook URL
  3. Save changes

Next Steps