# Send WhatsApp templates without code, using an inbound hook

> An inbound hook in SkedX Flow is a private web address that runs one action — Send a WhatsApp template, Send a WhatsApp message, Create or update the contact, or Tag the contact — whenever another system POSTs JSON or form data to it (up to 256 KB). Create one in Settings → Developers → Inbound Hooks → + New hook: name it, choose the action and the approved template, and paste one real example of what your tool sends. Flow maps the fields — phone becomes Phone, others fill Template blank 1 to 5 in order — and every row can be changed, with tidy-ups such as “Add +91 if missing”. Optionally add one condition (is, is not, contains, exists), a way for the caller to prove it is them, and a daily cap, then click Create hook. Copy the address at once: it is shown once and works like a password. Add dry-run/ to the address to see what would happen without sending anything. Hooks can’t be edited — make a new one.

Product: SkedX Flow · Topic: APIs & Developers · Draft — steps not yet re-verified in the live product

Most tools can already call a web address when something happens — a Zapier zap, an n8n workflow, a form, your CRM. An inbound hook turns that call into a WhatsApp template, and nobody writes code: you paste one example of what the tool sends, and Flow works out which piece is the phone number and which fill the template’s blanks. About six minutes.

## Step 1: Open Inbound Hooks

In Flow, go to **Settings** -> **Developers** -> **Inbound Hooks** and click **+ New hook**.
Open it directly: https://flow.skode.ai/settings/?tab=inbound_hooks

## Step 2: Name it, and choose what it does

Check **Another app -> Flow** is selected. Give the hook a name you’ll recognise, and choose what happens when it’s called:

- **Send a WhatsApp template** — type the template’s technical name; it must be approved.
- **Send a WhatsApp message** — free text, for customers who wrote to you in the last 24 hours.
- **Create or update the contact** — save the person in Flow.
- **Tag the contact** — add a tag, such as paid.

Every action needs a phone number, and saves or updates the contact first.

## Step 3: Paste one example of what they send

Under **Paste an example of what they’ll send**, paste a real request body from your tool — Zapier and n8n show one after a test run. JSON and form data both work, and field names are kept exactly as sent. Flow reads every field and suggests what it means: the phone field becomes **Phone**, with **Add +91 if missing** for 10-digit numbers saved without a country code; the others fill **Template blank 1** to **5** in order; anything else is set to **Ignore this**. Change any row.

## Step 4: Tidy values on the way in

The **Tidy it up** column changes a value before it’s used: **Add +91 if missing**, **Digits only**, **Trim spaces**, **UPPERCASE**, **lowercase**, or **Put text in front…**. Fields nested inside others appear with dotted names, such as `student.phone`. A list is one value — to fill several blanks from it, have your tool send separate fields.

## Step 5: Add a condition, a proof and a daily cap

**But only when** runs the hook only when a field matches — is, is not, contains or exists, for example `status` is `confirmed`; other calls are answered but skipped. **How the other app proves it’s really them** starts as the secret address alone; add a secret before real traffic ([how](https://skode.ai/help/flow/developers/secure-an-inbound-hook/)). **Never more than … a day** caps how many calls run each day, so a leaked address hits the cap, not your wallet. Click **Create hook**.

## Step 6: Copy the address — it is shown once

The hook’s address is its key: anyone who has it can call the hook, so treat it like a password. Click **Copy** now — as the banner says, Flow keeps only a fingerprint and can’t show it again. In your tool, paste it as the URL to **POST** to.

## Step 7: Try it without sending

Add `dry-run/` to the end of the address and send the same example. Flow answers with what it would do, step by step, and the values it mapped — and sends nothing. The panel under a new hook has this command ready to copy.

```bash
curl -s -X POST "https://flowserver.skode.ai/api/v1/hooks/in/ik_…your hook…/dry-run/" \
  -H "Content-Type: application/json" \
  -d '{"phone": "919876543210", "Batch Number": "Batch 108"}'
```

## Step 8: Switch it on in your tool, and watch it work

Point your tool at the address without `dry-run/` and trigger it. A successful call answers `{"ok": true}`; a refused one says why. Open the hook in the list to see its **Recent calls** — what arrived and what Flow did, and how many ran today against your cap. An inbound hook does one thing; for several steps in a row, build it in SkedX Automate.

## Common questions

### Can I change a hook after creating it?

No — a hook can only be created or deleted. To change it, create a new one, point your tool at its address, then open the old one and click **Delete**; its address stops working at once.

### When does the daily cap reset?

At midnight UTC — 5:30 am in India. Only calls that actually ran count; skipped and refused calls don’t.

### What does a hook answer when the condition doesn’t match?

`200` with `"skipped": true` and the reason, so your tool doesn’t retry — nothing was sent.

### Can one hook send different templates?

No, one hook sends one template. Make a hook per template — or send through the API, where the template is part of each request.

### My tool sends Interakt-shaped JSON with a list of values.

A list maps as one value. Have the tool send the values as separate fields, or switch the request itself: [Move your API calls from Interakt](https://skode.ai/help/flow/developers/move-your-api-calls-from-interakt/).

## Useful links
- Inbound Hooks in Flow — Settings → Developers → Inbound Hooks: https://flow.skode.ai/settings/?tab=inbound_hooks
- Flow API reference — the hook address and its answers: https://flow.skode.ai/docs/

Videos and screenshots © 2026 SkedX, with sample data only. Share and link to them freely; copying the SkedX product or its design is not allowed. Terms: https://skode.ai/terms/

## Related guides
- Secure an inbound hook: https://skode.ai/help/flow/developers/secure-an-inbound-hook/
- Connect Flow to Zapier: https://skode.ai/help/flow/developers/connect-flow-to-zapier/
- Connect Flow to n8n: https://skode.ai/help/flow/developers/connect-flow-to-n8n/
- What the Flow API can do: https://skode.ai/help/flow/developers/what-the-flow-api-can-do/

Source: https://skode.ai/help/flow/developers/inbound-hooks-send-without-code/