Skip to content

Webhooks & Zapier

Connect Fluxy to anything with two halves:

  • Triggers — we POST events (new conversation, qualified lead, payment…) to an HTTPS address.
  • Actions — your automation calls our API with an API key to find a conversation, send a message, take over or hand back.

Nothing here is Zapier-specific: Make, n8n or your own script use the same endpoints.

Use the Fluxy app in Zapier. When connecting, enter the API host (https://api.getfluxy.io) and an API key (ml_live_…). Then pick a trigger (any event below) or an action (find conversation, send message, take over, hand back).

EventWhen
conversation.openedA new conversation starts on any channel
conversation.qualifiedThe conversation reaches Qualified or beyond for the first time
conversation.handed_overA person took over
conversation.closedThe conversation was closed, by a person or by the agent
message.receivedThe customer wrote
message.sentThe agent or a team member replied
payment.paidA payment link created in the conversation was paid
MethodPath
GET/api/hooks/eventsList of events
POST/api/hooksBody {"event","target_url","source"} → returns the subscription with its secret (shown once)
GET/api/hooksYour subscriptions
DELETE/api/hooks/{id}Unsubscribe
GET/api/hooks/{id}/deliveriesRecent deliveries and errors
GET/api/hooks/sample?event=…A sample payload with exact field names

target_url must be https:// and public. Up to 25 subscriptions per workspace.

POST <target_url>
Content-Type: application/json
X-Fluxy-Signature: t=<unix>,v1=<hmac_sha256(secret, "<t>.<body>")>
X-Fluxy-Event: conversation.qualified
X-Fluxy-Delivery: evt_…
  • Verify the signature like a custom tool.
  • Deduplicate on X-Fluxy-Delivery (the payload’s id).
  • Answer 2xx within 10 seconds. 5xx or network errors are retried three times; 4xx is not (410 means “remove this hook”).
  • After five failures in a row the subscription shows as failing on the API keys screen; deliveries continue.
{
"id": "evt_3f9c…",
"event": "conversation.qualified",
"occurred_at": "2026-09-25T09:18:50+00:00",
"workspace": "your-workspace",
"conversation": {
"id": "c0ffee…",
"agent_id": "sales-agent",
"channel": "whatsapp_cloud",
"contact_display": "+90 5•• ••• 12 34",
"contact_name": "Ayşe",
"status": "ai_active",
"funnel_stage": "qualified",
"message_count": 6
},
"funnel": { "stage": "qualified", "previous_stage": "engaged" }
}

conversation is on every event; funnel only on conversation.qualified, message only on message.*, payment only on payment.paid, outcome only on conversation.closed. Contact details are always masked — no raw phone number or email is ever sent.

ActionCall
Find a conversationPOST /api/contacts/lookup with {"phone":"…"} or {"email":"…"}
Read a conversationGET /api/conversations/{id}
Send a messagePOST /api/conversations/{id}/messages with {"text":"…"} — this pauses the agent, like a take-over
Take over / hand backPOST /api/conversations/{id}/takeover · /handback
Close with a summaryPOST /api/conversations/{id}/close with {"summary":"…","verdict":"goal_reached"}