Docs / Whatixo API
Webhooks
The API gives you direct control; webhooks let you take advantage of workflows (delays, conditions, tags, sequences, AI) by simply sending your data.
Incoming webhook: trigger a workflow
POSThttps://api.whatixo.com/api/webhook/{webhookId}
The wh_… ID is generated when you save a workflow with a Webhook API, Shopify, WooCommerce, Chariow or Maketou trigger. Copy the full URL from the workflow editor (step-by-step tutorial).
| Property | Value |
|---|---|
| Authentication | No header: the URL’s secret ID is enough. Don’t use the API key here. |
| Body | Any JSON object (or URL-encoded form), 1 MB max. |
| Execution | Asynchronous: the response is immediate, the workflow runs afterwards (delays included). |
| Limit | 120 requests / minute per IP address. |
curl -X POST https://api.whatixo.com/api/webhook/wh_9b2e4f71c3a8d605 \
-H "Content-Type: application/json" \
-d '{"event":"signup","customer":{"first_name":"Aline","phone":"243812345601"},"course":"WhatsApp marketing"}'await fetch(process.env.WHATIXO_WEBHOOK_URL, {
method: 'POST',
headers: { 'Content-Type': 'application/json' },
body: JSON.stringify({
event: 'signup',
customer: { first_name: 'Aline', phone: '243812345601' },
course: 'WhatsApp marketing',
}),
});$ch = curl_init(getenv('WHATIXO_WEBHOOK_URL'));
curl_setopt_array($ch, [
CURLOPT_POST => true, CURLOPT_RETURNTRANSFER => true, CURLOPT_TIMEOUT => 10,
CURLOPT_HTTPHEADER => ['Content-Type: application/json'],
CURLOPT_POSTFIELDS => json_encode([
'event' => 'signup',
'customer' => ['first_name' => 'Aline', 'phone' => '243812345601'],
'course' => 'WhatsApp marketing',
]),
]);
curl_exec($ch);
curl_close($ch);import os, requests
requests.post(os.environ["WHATIXO_WEBHOOK_URL"], json={
"event": "signup",
"customer": {"first_name": "Aline", "phone": "243812345601"},
"course": "WhatsApp marketing",
}, timeout=10)In the workflow, use this data with {{customer.first_name}}, {{customer.phone}}, {{course}}.
Responses
| Code | Body | Meaning |
|---|---|---|
| 200 | {"success":true,"message":"Webhook reçu et en cours de traitement."} | Received, workflow started. |
| 200 | {"message":"Webhook inactif."} | Received, but the workflow is turned off (variables are still detected). |
| 402 | {"error":"Compte suspendu. Exécution bloquée."} | Subscription expired. |
| 404 | {"error":"Webhook introuvable."} | Unknown ID or deleted workflow. |
| 429 | {"error":"Trop d'appels sur ce webhook."} | More than 120 requests per minute. |
Variable syntax
- Nested objects:
{{customer.address.city}} - List items (index from 0):
{{items.0.name}} - An AI step’s answer:
{{ia_response}} - A missing variable is left as is in the text: test with real data.
Outgoing webhooks: receive data from Whatixo
Whatixo can in turn call your server:
| Source | Configuration | Data sent |
|---|---|---|
| Workflow action Fire a webhook | URL + custom JSON body (with variables) | Whatever you define in the body |
| Workflow action API request | Method, URL, headers (e.g. your token), body | Same; the JSON response is reusable in later steps |
| The AI agent’s conversion webhook | The agent’s advanced settings | Each lead/order: phone, type, collected data |
Example body for “Fire a webhook”JSON
{
"source": "whatixo",
"phone": "{{phone}}",
"name": "{{name}}",
"message": "{{message}}"
}
Secure your endpoint
Your receiving URL must be https:// and public (internal or local addresses are refused by Whatixo). Add a secret token in the URL or in a header (API request action) and check it server-side before processing the data.
Receiving example (Node.js / Express)
server.jsJS
import express from 'express';
const app = express();
app.use(express.json());
app.post('/hooks/whatixo', (req, res) => {
if (req.get('x-hook-token') !== process.env.HOOK_TOKEN) return res.sendStatus(401);
const { phone, name, message } = req.body;
console.log('New WhatsApp message from', name, phone, ':', message);
// … save it in your CRM
res.json({ ok: true }); // reply fast (under 10 s)
});
app.listen(3000);
Questions? Message us from the app (Help & support) or at support@whatixo.com.Updated: November 2026