Overview
Relixir sends webhooks to your configured endpoints for various events including visitor identification and CMS content changes. Use webhooks to integrate with your CRM, marketing automation, or custom systems in real-time.Visitor Identification
Receive real-time visitor data including company enrichment, contact information, session details, traffic source attribution, and AI search detection
CMS Content Events
Get notified when CMS content is published, updated, or deleted
Supported Events
| Event | Description |
|---|---|
visitor.identified | A visitor is identified on your website (contact or company level) |
content.published | A CMS content item is published for the first time |
content.updated | A CMS content item is republished with changes |
content.deleted | A CMS content item is deleted |
Setting Up Webhooks
Configure your endpoint
Create an HTTPS endpoint in your application that accepts POST requests with JSON payloads.
Add webhook subscription
Go to Settings → Visitor ID in your Relixir dashboard and add your endpoint URL in the Webhook Subscriptions section.
Select events
Choose which events you want to receive. You can select multiple event types per subscription.
Webhook Headers
Relixir sends webhooks with these headers:| Header | Value |
|---|---|
Content-Type | application/json |
User-Agent | Relixir-Webhook/1.0 |
Visitor Identification Webhook
When a visitor is identified, Relixir sends avisitor.identified webhook to your configured endpoint:
Payload Structure
Visitor Kinds
| Visitor Kind | Description |
|---|---|
contact | Identified visitor with contact information (email, name) |
company | Anonymous visitor identified only at company level |
The
company and contact objects are only included when that data is available. Anonymous visitors may only have company-level identification.Payload Data: AI Search Detection
Thevisitor.identified webhook automatically includes AI search detection:
| AI Engine | Detection Method |
|---|---|
| ChatGPT | UTM source parameter contains “chatgpt” |
| Perplexity AI | Referrer URL contains “perplexity.ai” |
| Google Gemini | Referrer URL contains “gemini.google.com” or “bard.google.com” |
| Claude AI | Referrer URL contains “claude.ai” |
| Phind | Referrer URL contains “phind.com” |
| You.com | Referrer URL contains “you.com” |
| Bing Chat | Referrer URL contains “bing.com/chat” |
| Poe | Referrer URL contains “poe.com” |
ChatGPT is detected via UTM source parameter (e.g.,
?utm_source=chatgpt) since ChatGPT doesn’t send a referrer header.Payload Data: Traffic Classification
All traffic is classified into categories in theref_medium field:
| Category | Description |
|---|---|
ai_search | AI search engines (ChatGPT, Perplexity, etc.) |
paid_search | Paid advertising (UTM medium contains “cpc”, “ppc”, or “paid”) |
search | Organic search (Google, Bing, DuckDuckGo, etc.) |
social | Social media (LinkedIn, Twitter/X, Facebook, Reddit, etc.) |
email | Email campaigns (UTM medium is “email” or “newsletter”) |
referral | Other website referrals |
direct | Direct traffic (no referrer) |
Payload Data: CMS Content Attribution
Thepages_viewed array in the webhook identifies which pages are Relixir-managed content:
is_cms_content: Boolean indicating if the page is Relixir CMS contentcms_content_item_id: UUID of the Relixir content item if applicable
CMS Content Webhooks
When CMS content is published, updated, or deleted, Relixir sends a webhook with the following payload structure:Payload Structure
CMS Event Types
| Event | Action | Description |
|---|---|---|
content.published | published | First-time publish of a content item |
content.updated | updated | Republish of an existing content item |
content.deleted | deleted | Content item was deleted |
Payload Fields
| Field | Type | Description |
|---|---|---|
item_id | string (UUID) | Unique identifier of the content item |
slug | string | URL slug of the content item |
title | string | Title of the content item (may be null) |
collection_id | string (UUID) | ID of the collection containing the item |
organization_id | string (UUID) | ID of your organization |
action | string | Action that triggered the webhook |
CMS webhooks are triggered for all deployment modes including hosted blogs, spreadsheet deployments, and external CMS integrations.
Troubleshooting
Webhooks are not arriving
Webhooks are not arriving
- Verify your endpoint URL is correct and publicly accessible
- Ensure your endpoint returns a 2xx status code within 10 seconds
- Check your server logs for incoming POST requests
CMS content not being tracked
CMS content not being tracked
- Verify your blog posts are published (not drafts)
- Check that deployment slugs match URL paths
- Confirm
BlogSettings.blogSlugPrefixis configured correctly
AI search not being detected
AI search not being detected
- AI search detection uses referrer URLs and UTM parameters
- ChatGPT doesn’t send a referrer, so it requires
utm_source=chatgptin your URLs - Verify UTM parameters are preserved when visitors land on your site
Missing company or contact data
Missing company or contact data
- Not all visitors can be identified at the contact level
- Some visitors only have company-level identification
- The
companyandcontactfields are only present when data is available
Webhook Delivery
Relixir uses the following delivery behavior:| Setting | Value |
|---|---|
| Timeout | 10 seconds |
| Retries | 3 attempts with exponential backoff |
| Content Type | application/json |
Your endpoint should return a 2xx status code to acknowledge receipt. Non-2xx responses (except 4xx client errors) trigger automatic retries.
Need help setting up webhooks? Contact support@relixir.ai.
