# Ask Immiscible from a Zap

> A recipe for Zapier. Webhooks by Zapier asks before the action; when a person has to decide, a second Zap started by a catch hook carries on once they have.

Source: https://immiscible.fly.dev/docs/guides/zapier

Zapier has no step that waits for an outside service, so a decision that needs a person splits into two Zaps: one asks, the other carries on when Immiscible calls its catch hook.

> **Note**
> Zapier does not endorse or partner with Immiscible. Webhooks by Zapier is a built-in Zapier app, available on paid plans.

## Before you start

Make an agent key: **Agents**, **Add an agent**, then **Collect the agent's key** on its setup page. Every request below sends it as the header `x-api-key`.

## Zap 2: carry on (make this first)

1. Trigger: **Webhooks by Zapier**, **Catch Hook**. Copy the webhook URL it gives you.
2. Action: **Webhooks by Zapier**, **Custom Request**, method `GET`, URL `https://immiscible.fly.dev/v1/actions/` followed by the `actionId` field from the trigger, header `x-api-key`. This reads the decision with your key; the webhook alone proves nothing.
3. **Filter**: only continue if `decision` exactly matches `allow`.
4. Your action: the payment, email or update.
5. Action: **Webhooks by Zapier**, **Custom Request**, method `POST`, URL `https://immiscible.fly.dev/v1/actions/` followed by `actionId` and `/settle`, data `{ "status": "completed" }`.

## Zap 1: ask

1. Your trigger, as now.
2. Action: **Webhooks by Zapier**, **Custom Request**, method `POST`, URL `https://immiscible.fly.dev/v1/actions/authorize`, header `x-api-key` and `Content-Type: application/json`, data:

```json
{
  "type": "payment",
  "summary": "Pay the March invoice from Northwind Supplies",
  "payment": { "amount": 4200, "currency": "GBP", "merchant": { "domain": "northwind.example" } },
  "provenance": [{ "source": "user" }]
}
```

3. **Paths**:
   - `decision` is `allow`: your action, then settle as in Zap 2, steps 4 and 5.
   - `decision` is `approval_required`: **Custom Request**, method `POST`, URL `https://immiscible.fly.dev/v1/actions/` followed by `id` and `/callback`, data `{ "url": "<the catch hook URL from Zap 2>" }`.
   - `decision` is `deny`: stop, and tell someone why with the `reasons`.

When the approver decides, Immiscible calls the catch hook with `{ "actionId", "decision", "status", "decidedAt" }` and Zap 2 runs.

## Or by MCP

Zapier's **MCP Client** app can call Immiscible's tools from a Zap or a Zapier agent: server URL `https://immiscible.fly.dev/mcp`, an agent key as the bearer token.
