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.
Zapier
Section titled “Zapier”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).
Events
Section titled “Events”| Event | When |
|---|---|
conversation.opened | A new conversation starts on any channel |
conversation.qualified | The conversation reaches Qualified or beyond for the first time |
conversation.handed_over | A person took over |
conversation.closed | The conversation was closed, by a person or by the agent |
message.received | The customer wrote |
message.sent | The agent or a team member replied |
payment.paid | A payment link created in the conversation was paid |
Subscribe with the API
Section titled “Subscribe with the API”| Method | Path | |
|---|---|---|
GET | /api/hooks/events | List of events |
POST | /api/hooks | Body {"event","target_url","source"} → returns the subscription with its secret (shown once) |
GET | /api/hooks | Your subscriptions |
DELETE | /api/hooks/{id} | Unsubscribe |
GET | /api/hooks/{id}/deliveries | Recent 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.
Delivery
Section titled “Delivery”POST <target_url>Content-Type: application/jsonX-Fluxy-Signature: t=<unix>,v1=<hmac_sha256(secret, "<t>.<body>")>X-Fluxy-Event: conversation.qualifiedX-Fluxy-Delivery: evt_…- Verify the signature like a custom tool.
- Deduplicate on
X-Fluxy-Delivery(the payload’sid). - Answer
2xxwithin 10 seconds.5xxor network errors are retried three times;4xxis not (410means “remove this hook”). - After five failures in a row the subscription shows as failing on the API keys screen; deliveries continue.
Payload
Section titled “Payload”{ "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.
Actions
Section titled “Actions”| Action | Call |
|---|---|
| Find a conversation | POST /api/contacts/lookup with {"phone":"…"} or {"email":"…"} |
| Read a conversation | GET /api/conversations/{id} |
| Send a message | POST /api/conversations/{id}/messages with {"text":"…"} — this pauses the agent, like a take-over |
| Take over / hand back | POST /api/conversations/{id}/takeover · /handback |
| Close with a summary | POST /api/conversations/{id}/close with {"summary":"…","verdict":"goal_reached"} |