curl --request POST \
--url https://api.flowiq.live/set-webhooks \
--header 'Authorization: Bearer <token>' \
--header 'Content-Type: application/json' \
--data '
{
"url": "https://your-server.com/webhook",
"type": "message_received"
}
'{
"success": true,
"message": "Webhook created successfully",
"webhook": {
"id": "0df9d480-f181-466b-ae8d-85216c16e8dd",
"url": "https://your-server.com/webhook",
"type": "message_received",
"platform": "whatsapp",
"auth_type": "none",
"created_at": "2026-03-08T00:00:00.000+02:00"
}
}Create Webhook
Register a new webhook endpoint. Optionally configure how FlowIQ authenticates to your server (auth_type + auth_config), extra static headers, and a signing secret. Use platform=instagram for Instagram events. Instagram support is prepared for rollout and is not yet deployed.
curl --request POST \
--url https://api.flowiq.live/set-webhooks \
--header 'Authorization: Bearer <token>' \
--header 'Content-Type: application/json' \
--data '
{
"url": "https://your-server.com/webhook",
"type": "message_received"
}
'{
"success": true,
"message": "Webhook created successfully",
"webhook": {
"id": "0df9d480-f181-466b-ae8d-85216c16e8dd",
"url": "https://your-server.com/webhook",
"type": "message_received",
"platform": "whatsapp",
"auth_type": "none",
"created_at": "2026-03-08T00:00:00.000+02:00"
}
}Basic Usage
curl -X POST "https://api.flowiq.live/set-webhooks" \
-H "Authorization: Bearer fiq_YOUR_API_KEY" \
-H "Content-Type: application/json" \
-d '{"url": "https://your-server.com/webhook", "type": "message_received"}'
Request Body
| Field | Required | Description |
|---|---|---|
url | Yes | HTTPS endpoint to receive events |
type | Yes | Event type: message_received, message_sent, sent_message, message_delivered, message_read, message_failed, call, or all |
platform | No | whatsapp (default), web or instagram. See Events for what each platform fires |
auth_type | No | How FlowIQ authenticates to your server: none (default), bearer, basic, api_key, or oauth2_client_credentials |
auth_config | No | Credentials for the chosen auth_type (see below). Required unless auth_type is none |
headers | No | Object of extra static headers sent with every delivery, e.g. {"X-Tenant": "shop-1"} |
secret | No | Signing secret. When set, every delivery carries an X-Flowiq-Signature header you can verify (how) |
{
"url": "https://your-server.com/webhook",
"type": "message_received"
}
platform: "instagram" to receive Instagram events. Registration, authentication and signatures work the same as WhatsApp.
curl -X POST "https://api.flowiq.live/set-webhooks" \
-H "Authorization: Bearer fiq_YOUR_API_KEY" \
-H "Content-Type: application/json" \
-d '{
"url": "https://your-server.com/webhooks/instagram",
"platform": "instagram",
"type": "all",
"secret": "a-long-random-string"
}'
message_received, sent_message, message_sent, message_delivered, message_read, message_failed and all. Receipt events fire only when the state is recorded. call is WhatsApp-only. See Instagram Events for payloads.
Authentication
By default deliveries are sent with no credentials. Setauth_type and auth_config to have FlowIQ authenticate to your server on every delivery.
auth_type | Required auth_config fields | Optional fields | What FlowIQ sends |
|---|---|---|---|
bearer | token | Authorization: Bearer <token> | |
basic | username, password | Authorization: Basic <base64(username:password)> | |
api_key | value | header_name (default X-API-Key) | <header_name>: <value> |
oauth2_client_credentials | token_url, client_id, client_secret | scope, audience, client_auth | Authorization: Bearer <access_token> from your token endpoint |
token_url with grant_type=client_credentials (plus scope / audience if set), sending the client credentials as HTTP Basic auth. Set client_auth to "body" if your server expects client_id and client_secret in the form body instead. Tokens are cached and refreshed shortly before expires_in runs out.
Examples
{
"url": "https://your-server.com/webhook",
"type": "all",
"auth_type": "bearer",
"auth_config": { "token": "YOUR_TOKEN" }
}
{
"url": "https://your-server.com/webhook",
"type": "all",
"auth_type": "api_key",
"auth_config": { "header_name": "X-Api-Key", "value": "YOUR_KEY" }
}
{
"url": "https://your-server.com/webhook",
"type": "all",
"auth_type": "oauth2_client_credentials",
"auth_config": {
"token_url": "https://auth.your-server.com/oauth/token",
"client_id": "YOUR_CLIENT_ID",
"client_secret": "YOUR_CLIENT_SECRET",
"scope": "webhooks.write"
},
"secret": "a-long-random-string"
}
Response
Returns201 Created. Credentials and the signing secret are never returned.
{
"success": true,
"message": "Webhook created successfully",
"webhook": {
"id": "0df9d480-f181-466b-ae8d-85216c16e8dd",
"url": "https://your-server.com/webhook",
"type": "message_received",
"platform": "whatsapp",
"auth_type": "none",
"created_at": "2026-03-08T00:00:00.000+02:00"
}
}
Error: Incomplete Authentication (400)
Returned whenauth_type is unknown or its required auth_config fields are missing:
{
"error": "Invalid auth configuration",
"message": "auth_config.token is required for auth_type 'bearer'"
}
type: "all" to receive every event type through a single webhook subscription.Authorizations
Your FlowIQ API key (from Settings → Profile → API Keys), sent as a bearer token. Format: Bearer fiq_YOUR_API_KEY
Body
HTTPS endpoint to receive events
"https://your-server.com/webhook"
Event type to subscribe to. call is WhatsApp-only; Instagram receipt events fire only when that state is recorded.
message_received, message_sent, sent_message, message_delivered, message_read, message_failed, call, all "message_received"
whatsapp (default), web, or instagram.
whatsapp, web, instagram "whatsapp"
How FlowIQ authenticates to your server on every delivery
none, bearer, basic, api_key, oauth2_client_credentials Credentials for auth_type. bearer: token. basic: username, password. api_key: value, optional header_name (default X-API-Key). oauth2_client_credentials: token_url, client_id, client_secret, optional scope, audience, client_auth (basic default, or body).
Show child attributes
Show child attributes
{ "token": "YOUR_TOKEN" }
Extra static headers sent with every delivery
Show child attributes
Show child attributes
{ "X-Tenant": "shop-1" }
Signing secret. When set, each delivery carries X-Flowiq-Signature: sha256=<hex HMAC-SHA256 of the raw body>.

