> ## Documentation Index
> Fetch the complete documentation index at: https://docs.zapier.com/llms.txt
> Use this file to discover all available pages before exploring further.

# Embedded workflows

> Create and manage multi-step Zaps for your users via the Workflow API using White Label token exchange and Connect.

# Embedded workflows

This use case is for products that want **end-to-end automations**—a trigger plus one or more actions, optional filters, and field mapping between steps—**owned and executed by Zapier**, while your product owns the **UX** (discovery, configuration, enable/disable, and surfacing status).

This White Label path differs from generic Powered by Zapier docs mainly in **authentication**: your backend uses **token exchange** and **Connect** for user connections. The **Workflow API** endpoints and payload shapes are the same as in the [Zap creation](/powered-by-zapier/zap-creation/getting-started) guides.

## When to use this vs other White Label patterns

* **[Embedded triggers/actions](./embedded-triggers-actions)** — run **individual** actions on demand with [Action Runs](/powered-by-zapier/api-reference/actions/create-an-action-run) when **you** orchestrate execution.
* **Embedded workflows (this page)** — users get **Zaps**: persistent workflows that run on Zapier (triggers, multi-step logic, filters, mapping).
* **[AI agent connections & automations](./ai-agent-connections)** — **MCP** (`listTools` / `callTool`, Streamable HTTP) for agentic products.

## Prerequisites

* **White Label onboarding complete** — JWKS, callback URLs, JWT expectations, client credentials ([Partner onboarding](../partner-onboarding)).
* **Server-side token exchange** — partner-signed JWT to **user access token** with the scopes your flows need ([Token exchange](../token-exchange)).
* **OAuth client configured for Workflow API** — same scopes model as the broader Partner / Workflow API ([Authentication](/powered-by-zapier/authentication/getting-started)); request only the scopes each endpoint requires (for example `zap:write` to create Zaps).

You **do not** need a **public Zapier integration** in the App Directory to use this White Label embedded workflows path.

## What you need

* A **user access token** (from token exchange), used as `Authorization: Bearer` on Workflow API requests.
* A strategy to **create or reuse connections** (authentications) via **Connect** when a step requires a linked account ([Connection flow](../connection-flow), [Selecting an authentication](/powered-by-zapier/zap-creation/selecting-an-authentication)).
* Your UI or server flow to walk **apps → actions → inputs → outputs/mapping → create Zap**, using the guides below.

## High-level flow

1. **Token exchange** — exchange the partner JWT for a user access token ([Token exchange](../token-exchange)).
2. **Discover apps** — [`GET /v2/apps`](/powered-by-zapier/api-reference/apps/get-apps-\[v2]) for pickers and search ([Retrieving apps](/powered-by-zapier/zap-creation/retrieving-apps)).
3. **Select actions** — [`GET /v2/actions`](/powered-by-zapier/api-reference/actions/get-actions) per app (`READ` triggers, `WRITE` actions, etc.) ([Selecting an action](/powered-by-zapier/zap-creation/selecting-an-action)).
4. **Connections** — [`GET /v2/authentications`](/powered-by-zapier/api-reference/authentications/get-authentications); route users through Connect when adding or reconnecting accounts ([Connection flow](../connection-flow)).
5. **Configure inputs** — [`POST /v2/actions/{action_id}/inputs`](/powered-by-zapier/api-reference/actions/get-input-fields); use [`.../inputs/{input_id}/choices`](/powered-by-zapier/api-reference/actions/get-choices) for `SELECT` fields; refetch when fields invalidate or depend on other fields ([Fields and fieldsets](/powered-by-zapier/zap-creation/fields-and-fieldsets)).
6. **Map between steps** — [`POST /v2/actions/{action_id}/outputs`](/powered-by-zapier/api-reference/actions/get-output-fields); use `{{field_id}}` for two-step Zaps or `{{alias.field_id}}` with explicit step **aliases** when you have more than two steps ([How to build a workflow](/powered-by-zapier/zap-creation/how-to-build-a-workflow)).
7. **Optional filters** — add **Filter by Zapier** steps (`action_type=FILTER`) per [Filter actions](/powered-by-zapier/zap-creation/filter-actions).
8. **Create the Zap** — [`POST /v2/zaps`](/powered-by-zapier/api-reference/zaps/create-a-zap) with scope `zap:write` ([Create a Zap](/powered-by-zapier/api-reference/zaps/create-a-zap), [How to build a workflow](/powered-by-zapier/zap-creation/how-to-build-a-workflow)).
9. **Test steps (recommended)** — [`POST /v2/actions/{action_id}/test`](/powered-by-zapier/api-reference/actions/step-test) ([Testing a workflow](/powered-by-zapier/zap-creation/testing-a-workflow)).
10. **Operate** — [`GET /v2/zaps`](/powered-by-zapier/api-reference/zaps/get-zaps-\[v2]) with filters/`expand` as needed; use `links.html_editor` when you want a handoff to the Zapier editor ([Retrieving a list of Zaps](/powered-by-zapier/zap-creation/retrieving-a-list-of-zaps)).

## Create and manage Zaps

End-to-end construction (actions, authentications, inputs, output mapping, aliases, multi-step examples) is documented in **[How to build a workflow](/powered-by-zapier/zap-creation/how-to-build-a-workflow)**. Use that guide as the **canonical walkthrough**; this page wires it to **White Label** auth and sibling use cases.

**Create** example shape (see API reference for full schema and `expand`):

```http theme={null}
POST https://api.zapier.com/v2/zaps
Authorization: Bearer YOUR_ACCESS_TOKEN
Content-Type: application/json

{
  "data": {
    "enabled": true,
    "title": "My embedded workflow",
    "steps": [
      {
        "action": "core:TRIGGER_ACTION_ID",
        "authentication": "AUTH_ID",
        "inputs": { }
      },
      {
        "action": "core:ACTION_ACTION_ID",
        "authentication": "AUTH_ID",
        "inputs": { "field": "{{previous_step_output_id}}" }
      }
    ]
  }
}
```

After creation, the response may omit per-step `inputs` even when you sent them; that is **expected** ([How to build a workflow](/powered-by-zapier/zap-creation/how-to-build-a-workflow)).

## What Zapier runs vs what you own

| Area                        | Zapier                                              | Your product                                                       |
| --------------------------- | --------------------------------------------------- | ------------------------------------------------------------------ |
| **Execution**               | Schedules/runs triggers, actions, filters, searches | Drives configuration via API; no per-step runtime polling required |
| **Third-party credentials** | Stores and refreshes connections                    | Surfaces Connect; refreshes authentication lists after connect     |
| **Workflow record**         | Persists the Zap (steps, mapping, enabled state)    | Your setup UX, templates, and lifecycle (draft/publish)            |

## Limits and best practices

* **Steps** — maximum **25** per Zap; use **snake\_case** `alias` on steps when referencing outputs across more than two steps ([How to build a workflow](/powered-by-zapier/zap-creation/how-to-build-a-workflow)).
* **Action identity** — prefer stable **`key`** for product logic; **`id`** is what the API accepts on steps and may change when app implementations change—refresh cached metadata when building UIs.
* **Zap listing scopes** — which Zaps appear in [`GET /v2/zaps`](/powered-by-zapier/api-reference/zaps/get-zaps-\[v2]) depends on granted scopes (for example `zap:all` vs default); see [Retrieving a list of Zaps](/powered-by-zapier/zap-creation/retrieving-a-list-of-zaps).
* **Rate limits** — Workflow API requests are rate limited ([Rate limiting](/powered-by-zapier/api-reference/rate-limiting)).

## Security notes

* Keep **client\_secret**, **user access tokens**, and **connect tokens** on the server.
* Validate **`state`** on OAuth callbacks where used.
* Prefer **short-lived** partner JWTs and rotate signing keys with **JWKS**.

## Related guides

* [Token exchange](../token-exchange)
* [Connection flow](../connection-flow)
* [Embedded triggers/actions](./embedded-triggers-actions)
* [AI agent connections & automations](./ai-agent-connections)
* [Workflow API getting started](/powered-by-zapier/zap-creation/getting-started)
* [How to build a workflow](/powered-by-zapier/zap-creation/how-to-build-a-workflow)
* [Fields and fieldsets](/powered-by-zapier/zap-creation/fields-and-fieldsets)
* [Filter actions](/powered-by-zapier/zap-creation/filter-actions)
* [Testing a workflow](/powered-by-zapier/zap-creation/testing-a-workflow)
* [Create a Zap](/powered-by-zapier/api-reference/zaps/create-a-zap)
