Skip to content

No-code automation

Fliok + Zapier

Start a Zap when a WhatsApp message, a new lead, a form submission or a store order arrives in Fliok — and have any Zap send a WhatsApp template, add a lead or create a follow-up in Fliok. It works today with Zapier’s own Webhooks by Zapier steps and Fliok’s signed webhooks and REST API.

Fliok is not listed in Zapier’s app directory yet, so this guide uses Zapier’s generic webhook and request steps. Webhooks by Zapier is available on Zapier’s paid plans.

Before you start

  • The API and webhooks are part of the Pro and Enterprise plans (pricing).
  • In Fliok, open API keys and create a key for Zapier. Give it the admin role if it will also register webhooks; sending and CRM changes need at least agent. The key starts with wa_ and is shown once.
  • Every request to Fliok carries it as a header: Authorization: Bearer wa_…. Base URL https://fliok.com/api/v1.

Start a Zap from Fliok

  1. In Zapier, start a Zap with the trigger Webhooks by Zapier → Catch Hook and copy the webhook URL it gives you.
  2. In Fliok, open API keys → Webhooks, paste the URL into Endpoint URL, pick the event (for example lead.created) and press Add. One URL per event keeps each Zap simple.
  3. Press Send test event next to the new webhook in Fliok (or let a real event happen), then Test trigger in Zapier. Every field of the event can now be mapped.

Every delivery has the same shape — the event’s fields are under data:

What Fliok POSTs to your URL
{
  "id": "evt_8f2c…",
  "event": "lead.created",
  "createdAt": "2026-10-06T10:00:00.000Z",
  "data": {
    "lead": { "id": "…", "phone": "919876543210", "name": "Asha", "stage": { "name": "New lead", "kind": "initial" }, … },
    "source": "Website",
    "via": "form",
    "form": "Wedding enquiry",
    "createdAt": "2026-10-06T10:00:00.000Z"
  }
}

Deliveries are signed (HMAC-SHA256, see the webhook reference) and retried when your URL does not answer 2xx, so the same id can arrive twice. A workspace can register 25 webhook URLs.

EventWhen it fires
message.receivedA contact sent a message to your number. Deduplicated — Meta redelivers webhooks, you do not get doubles.
contact.createdA phone number became a contact for the first time. `source` is inbound_message, smb_echo, user_preferences or api_send. Bulk paths — CSV import, dashboard-created contacts, coexistence address-book sync and Coexistence history backfill — do NOT emit this.
lead.createdA new lead entered the CRM. `via` is form, api, import, manual, integration or whatsapp. `lead` carries id, phone, name, email, stage {id,name,kind}, owner, source, rating, dealValue and tags.
form.submittedSomebody submitted a form to your lead-capture link (a website form, or a marketplace push such as IndiaMART or JustDial). Every submission fires, including a repeat from a number you already have (`created` false); a portal re-sending the same enquiry does not. `note` is what they wrote in the message box, `fields` holds answers matched to your custom fields, `extra` everything else the form sent.
lead.stage_changedA lead moved stage. `from`/`to` are {id,name,kind} with kind initial, active, won or lost; `lostReason` is set on a move to a lost stage. Restructuring the pipeline in settings does not fire this.
lead.assignedA lead's owner changed — by a person, a routing rule, an automation or inbox auto-assign. `to` is null when the lead was unassigned.
task.createdA follow-up task was created on a lead. `task` carries id, title, type, dueAt, priority, status and assignee.
message.statusAn outbound message changed state: sent, delivered, read or failed. Each state fires at most once; statuses never move backwards.
message.failedAn outbound message failed for good, with the Meta error code explained. Fires once per message. Messages we deliberately did not send (status "skipped") never appear here.
conversation.closedThe 24-hour customer-service window expired. Only approved templates can be sent until the customer messages again. Detected within ~5 minutes of expiry.
conversation.ratedA customer answered the satisfaction survey on a resolved conversation. `score` is 1-5. Fired once per conversation; later taps are ignored.
template.approvedMeta approved a message template. Fired on the transition into approved, so a redelivered Meta webhook does not re-fire it.
template.rejectedMeta rejected a message template. `reason` carries Meta's rejection reason when it supplies one.
order.eventA connected Shopify or WooCommerce store reported an order event. `type` is order_placed, order_paid, order_shipped or order_cancelled. Fires once per store, event and order, whether or not a WhatsApp template is set for that event; the store's retries do not fire it again.
payment.paidA customer paid a WhatsApp Pay request. Amounts are in paise (INR); `paymentMethod` is Meta's method type (upi, card, netbanking, wallet…) when it says. If `paidPaise` differs from `totalPaise`, Meta reported a different amount than was asked: check the payment before you fulfil the order. Fired on the transition into paid, so Meta's repeated payment updates never fire it twice.

Also available: template.category_changed, conversation.opened, flow.completed, call.missed, order.cod_response, broadcast.completed, lead.recaptured, task.completed, instagram.message.received, instagram.comment.received, instagram.post.published. Every field of every event is listed in the API reference.

Make Fliok do something from a Zap

  1. Add the action Webhooks by Zapier → Custom Request.
  2. Method and URL from the table below, e.g. POST https://fliok.com/api/v1/send.
  3. Data: the JSON body, with values mapped from earlier steps. Headers: Authorization = Bearer wa_… (your API key) and Content-Type = application/json.

Send an approved template

Works at any time. variables fill the body’s {{1}}, {{2}}… in order; Fliok refuses a blank one before WhatsApp does.

POST https://fliok.com/api/v1/send
{
  "to": "919876543210",
  "type": "template",
  "payload": {
    "type": "template",
    "template": {
      "name": "order_update",
      "language": { "code": "en_US" },
      "variables": ["Asha", "#1042"]
    }
  }
}

Send a text message

Only within 24 hours of the customer’s last message to you — otherwise Fliok answers 422 outside_24h_window. Use a template outside the window.

POST https://fliok.com/api/v1/send
{ "to": "919876543210", "type": "text", "text": "Your table is booked for 8 pm." }

Create or update a contact

Keyed by phone number: a second call updates the same contact. tags here replaces the list; use the next call to add or remove single tags.

POST https://fliok.com/api/v1/contacts
{ "phone": "919876543210", "displayName": "Asha", "attributes": { "city": "Kolkata" } }

Add or remove tags

In Fliok a lead is a contact, so this works on any contact by phone number. Automations that start on a tag run as usual.

PATCH https://fliok.com/api/v1/leads/919876543210
{ "addTags": ["diwali-sale"], "removeTags": ["cold"] }

Create a lead

A number already in the CRM is not duplicated — it is recorded as having come in again. Stage and owner are given by name or email.

POST https://fliok.com/api/v1/leads
{ "phone": "919876543210", "name": "Asha", "source": "Facebook form", "stage": "New lead", "note": "Wants a December date" }

Move a lead to a stage

GET /pipeline lists your stages and lost reasons. The move lands on the lead’s timeline and fires your stage automations.

PATCH https://fliok.com/api/v1/leads/919876543210
{ "stage": "Lost", "lostReason": "Too expensive" }

Create a follow-up task

leadId takes the lead’s phone number or id. The task goes to the lead’s owner unless you give assignee (an email).

POST https://fliok.com/api/v1/tasks
{ "leadId": "919876543210", "title": "Call back about the venue", "dueAt": "2026-10-07T10:00:00+05:30", "type": "call" }

Ask for a payment (WhatsApp Pay)

Needs WhatsApp Pay set up in Fliok and a chat the customer messaged in the last 24 hours. Amounts are in paise; your referenceId makes a retry safe.

POST https://fliok.com/api/v1/payment-requests
{ "to": "919876543210", "referenceId": "ORD-1042", "items": [{ "name": "Silk saree", "quantity": 1, "unitPaise": 149900 }] }

Find a contact by phone

An exact match, with or without the country code. No such contact is an empty list.

GET https://fliok.com/api/v1/contacts?phone=919876543210
GET https://fliok.com/api/v1/contacts?phone=919876543210

When Fliok refuses a call it answers with an error code and usually a message sentence — show the message in your Zap’s error handling. The full list of endpoints (contacts, conversations, broadcasts, Instagram and more) is in the API reference.

Other automation tools