Every API here is available over the APIs.io API and to AI agents over MCP.
MCP server
One button, every client — Claude, Cursor, VS Code and the rest.
https://apis.io/mcp
Tools for apis
7 MCP tools reach this
find_apisBrowse and filter every API in the catalog.
get_api_artifactsOne API's artifacts, grouped by type.
get_openapiThe primary OpenAPI for this API.
find_similar_apisAPIs that look like this one.
apis_io_searchSTART HERE — APIs, providers and tags for one query, each with its total.
resolveTurn a domain, URL or GitHub org into the provider it belongs to.
find_cohortsEvery scored population of providers in the catalog.
All 92 tools →
Call it yourself
curl for this page
This API
curl "https://apis.io/api/v1/apis/clickfunnels-workflow-api"
All apis
curl "https://apis.io/api/v1/apis?limit=25"
Discovery needs no key. Ratings and market analysis are Pro.
Get an API key
Free tier, no form to fill in. Signing in shares your email address with us — we
store it to create your key and to recognise you if you sign in with another
provider. See our Privacy Policy and
Terms.
A second provider on the same verified email joins the account you already have.
openapi: 3.2.0
info:
title: ClickFunnels Workflow API
termsOfService: https://www.clickfunnels.com/terms-of-service
contact:
name: ClickFunnels API Team
url: https://developers.myclickfunnels.com
x-logo:
url: https://statics.myclickfunnels.com/image/1126065/file/31edf05760fafe41a82f16a668ab251f.png
description: 'The ClickFunnels REST API that powers webhooks, native integrations, and Zapier lets you manage your ClickFunnels data, automate your workflows, and recreate ClickFunnels functionality in your own apps.
'
license:
name: MIT
url: https://opensource.org/licenses/MIT
version: 2.0.0
servers:
- url: https://{subdomain}.myclickfunnels.com/api/v2
description: ClickFunnels API
variables:
subdomain:
default: myworkspace
security:
- BearerAuth: []
tags:
- name: Workflow
description: 'Standalone automation workflows that enroll contacts and execute a sequence of action steps (send email, apply tag, delay, split, etc.). A workflow is either `draft` (no active triggers), `live` (enabled with at least one active trigger), or `archived`.
Related sub-resources: Workflows::Trigger, Workflows::Step, Workflows::Run.
See the [Workflows Skill](https://accounts.myclickfunnels.com/.well-known/workflows/skill.md) for the end-to-end guide — lifecycle, [creating a workflow](https://accounts.myclickfunnels.com/.well-known/workflows/skill.md#creating-a-workflow), [triggers](https://accounts.myclickfunnels.com/.well-known/workflows/skill.md#triggers), [steps](https://accounts.myclickfunnels.com/.well-known/workflows/skill.md#steps), [branching](https://accounts.myclickfunnels.com/.well-known/workflows/skill.md#branching), [enabling/disabling](https://accounts.myclickfunnels.com/.well-known/workflows/skill.md#enabling-disabling), and [manual enrollment](https://accounts.myclickfunnels.com/.well-known/workflows/skill.md#runs---manual-enrollment).
'
paths:
/workspaces/{workspace_id}/workflows:
get:
tags:
- Workflow
summary: List Workflows
description: 'List the standalone automation workflows for a workspace. Supports cursor
pagination and sort.
'
operationId: listWorkflows
externalDocs:
description: Workflows Skill - build and configure automations via the API
url: https://accounts.myclickfunnels.com/.well-known/workflows/skill.md
security:
- BearerAuth: []
parameters:
- name: workspace_id
in: path
required: true
schema:
type: string
- $ref: '#/components/parameters/after'
- $ref: '#/components/parameters/sort_order'
- $ref: '#/components/parameters/sort_property'
responses:
'200':
description: OK
headers:
Pagination-Next:
$ref: '#/components/headers/PaginationNext'
Link:
$ref: '#/components/headers/Link'
content:
application/json:
schema:
type: array
items:
$ref: '#/components/schemas/WorkflowAttributes'
example:
- id: 101
public_id: WfAbCd
workspace_id: 5001
name: New Lead Nurture
status: live
disabled: false
archived: false
run_type: asynchronous
active_runs_count: 12
completed_runs_count: 340
created_at: '2025-06-01T00:00:00.000Z'
updated_at: '2025-06-10T00:00:00.000Z'
- id: 102
public_id: WfEfGh
workspace_id: 5001
name: Post-Purchase Upsell
status: draft
disabled: true
archived: false
run_type: asynchronous
active_runs_count: 0
completed_runs_count: 0
created_at: '2025-06-05T00:00:00.000Z'
updated_at: '2025-06-05T00:00:00.000Z'
'401':
description: Unauthorized
content:
application/json:
schema:
type: object
properties:
error:
type: string
example:
error: API key missing or invalid
'403':
description: Forbidden — you are not authorized for this resource. (Reads are never gated by trusted platform access; only a cross-team third-party write is.)
content:
application/json:
schema:
type: object
properties:
error:
type: string
example:
error: You are not authorized to perform this action.
'404':
description: Not Found
content:
application/json:
schema:
type: object
properties:
error:
type: string
example:
error: 'Not found: Record missing'
post:
tags:
- Workflow
summary: Create Workflow
description: 'Create a new standalone automation workflow. New workflows are created in the
`draft` state (disabled). Add triggers and steps, then call `POST /workflows/{id}/enable`
to make it live.
'
operationId: createWorkflow
externalDocs:
description: Workflows Skill - creating a workflow
url: https://accounts.myclickfunnels.com/.well-known/workflows/skill.md#creating-a-workflow
security:
- BearerAuth: []
parameters:
- name: workspace_id
in: path
required: true
schema:
type: string
requestBody:
required: true
content:
application/json:
schema:
$ref: '#/components/schemas/WorkflowParametersCreate'
example:
workflow:
name: New Lead Nurture
responses:
'201':
description: Created
content:
application/json:
schema:
$ref: '#/components/schemas/WorkflowAttributes'
example:
id: 103
public_id: WfIjKl
workspace_id: 5001
name: New Lead Nurture
status: draft
disabled: true
archived: false
run_type: asynchronous
active_runs_count: 0
completed_runs_count: 0
created_at: '2025-06-18T00:00:00.000Z'
updated_at: '2025-06-18T00:00:00.000Z'
'401':
description: Unauthorized
content:
application/json:
schema:
type: object
properties:
error:
type: string
example:
error: API key missing or invalid
'403':
description: Forbidden — a third-party platform acting on another team's workspace without trusted platform access. First-party / own-account writes are never blocked.
content:
application/json:
schema:
type: object
properties:
error:
type: string
example:
error: You are not authorized to perform this action.
'422':
description: Unprocessable Entity
content:
application/json:
schema:
type: object
properties:
error:
type: string
example:
error: 'Request unprocessable: Name can''t be blank'
/workflows/{id}:
get:
tags:
- Workflow
summary: Fetch Workflow
description: 'Retrieve a single workflow by its integer id or obfuscated public_id.
'
operationId: getWorkflow
externalDocs:
description: Workflows Skill - build and configure automations via the API
url: https://accounts.myclickfunnels.com/.well-known/workflows/skill.md
security:
- BearerAuth: []
parameters:
- $ref: '#/components/parameters/id'
responses:
'200':
description: OK
content:
application/json:
schema:
$ref: '#/components/schemas/WorkflowAttributes'
example:
id: 101
public_id: WfAbCd
workspace_id: 5001
name: New Lead Nurture
status: live
disabled: false
archived: false
run_type: asynchronous
active_runs_count: 12
completed_runs_count: 340
created_at: '2025-06-01T00:00:00.000Z'
updated_at: '2025-06-10T00:00:00.000Z'
'401':
description: Unauthorized
content:
application/json:
schema:
type: object
properties:
error:
type: string
example:
error: API key missing or invalid
'403':
description: Forbidden
content:
application/json:
schema:
type: object
properties:
error:
type: string
example:
error: You are not authorized to perform this action.
'404':
description: Not Found
content:
application/json:
schema:
type: object
properties:
error:
type: string
example:
error: 'Not found: Record missing'
patch:
tags:
- Workflow
summary: Update Workflow
description: 'Update a workflow''s `name` or `archived` flag. `run_type` is server-controlled
and cannot be changed.
'
operationId: updateWorkflow
externalDocs:
description: Workflows Skill - lifecycle (draft, live, archived)
url: https://accounts.myclickfunnels.com/.well-known/workflows/skill.md#lifecycle-read-this-first
security:
- BearerAuth: []
parameters:
- $ref: '#/components/parameters/id'
requestBody:
required: true
content:
application/json:
schema:
$ref: '#/components/schemas/WorkflowParametersUpdate'
example:
workflow:
name: Updated Nurture Sequence
archived: false
responses:
'200':
description: OK
content:
application/json:
schema:
$ref: '#/components/schemas/WorkflowAttributes'
example:
id: 101
public_id: WfAbCd
workspace_id: 5001
name: Updated Nurture Sequence
status: live
disabled: false
archived: false
run_type: asynchronous
active_runs_count: 12
completed_runs_count: 340
created_at: '2025-06-01T00:00:00.000Z'
updated_at: '2025-06-18T00:00:00.000Z'
'401':
description: Unauthorized
content:
application/json:
schema:
type: object
properties:
error:
type: string
example:
error: API key missing or invalid
'403':
description: Forbidden
content:
application/json:
schema:
type: object
properties:
error:
type: string
example:
error: You are not authorized to perform this action.
'404':
description: Not Found
content:
application/json:
schema:
type: object
properties:
error:
type: string
example:
error: 'Not found: Record missing'
'422':
description: Unprocessable Entity
content:
application/json:
schema:
type: object
properties:
error:
type: string
example:
error: 'Request unprocessable: Name can''t be blank'
delete:
tags:
- Workflow
summary: Delete Workflow
description: 'Permanently delete a workflow and all its associated triggers, steps, and run records.
'
operationId: deleteWorkflow
externalDocs:
description: Workflows Skill - lifecycle (draft, live, archived)
url: https://accounts.myclickfunnels.com/.well-known/workflows/skill.md#lifecycle-read-this-first
security:
- BearerAuth: []
parameters:
- $ref: '#/components/parameters/id'
responses:
'204':
description: No Content
'401':
description: Unauthorized
content:
application/json:
schema:
type: object
properties:
error:
type: string
example:
error: API key missing or invalid
'403':
description: Forbidden
content:
application/json:
schema:
type: object
properties:
error:
type: string
example:
error: You are not authorized to perform this action.
'404':
description: Not Found
content:
application/json:
schema:
type: object
properties:
error:
type: string
example:
error: 'Not found: Record missing'
/workflows/{id}/structure:
get:
tags:
- Workflow
summary: Fetch Workflow Structure
description: 'Returns the workflow''s complete tree in a single call: the workflow header,
its active triggers (summary shape), and the ordered list of visible steps with
branching inlined. Internal container nodes are spliced out.
Split steps carry their child branches or variants directly in the response:
- `conditional_split_step`: `branches` — always `[{branch: "matched", steps: [...]}, {branch: "unmatched", steps: [...]}]`
- `split_test_step`: `variants` — each entry has `weight` and `steps`.
Walk the `steps` array in order to follow execution flow. `sort_order` is
container-local and is not globally unique across the tree.
'
operationId: getWorkflowStructure
externalDocs:
description: Workflows Skill - reading the structure
url: https://accounts.myclickfunnels.com/.well-known/workflows/skill.md#reading-the-structure
security:
- BearerAuth: []
parameters:
- $ref: '#/components/parameters/id'
responses:
'200':
description: OK
content:
application/json:
schema:
$ref: '#/components/schemas/WorkflowStructureAttributes'
example:
workflow:
id: 101
public_id: WfAbCd
name: New Lead Nurture
status: live
disabled: false
archived: false
run_type: asynchronous
triggers:
- id: 11
public_id: TrXxYy
event_type_key: $contact.tag_applied
active: true
allow_anonymous_contacts: false
steps:
- id: 201
public_id: StEm01
step_type: send_email_step
name: Send Email
sort_order: 0
state: active
step_type_settings:
send_email_step:
subject: Welcome!
preheadline: We're glad you're here.
template_id: 3001
from_address_id: 4001
reply_to_address_id: null
- id: 202
public_id: StDl02
step_type: delay_step
name: Wait 3 Days
sort_order: 1
state: active
step_type_settings:
delay_step:
delay_type: relative
duration: 3
interval: days
time_zone: null
use_contact_time_zone: false
use_execution_window: false
day_of_week: null
date_of_month: null
start_time: null
end_time: null
execution_window_days: []
- id: 203
public_id: StCs03
step_type: conditional_split_step
name: VIP Check
sort_order: 2
state: active
convergence_step_id: null
step_type_settings:
conditional_split_step:
condition:
filter_id: 6001
is_setup: true
branches:
- branch: matched
steps:
- id: 205
public_id: StTg05
step_type: contact_tag_step
name: Tag VIP
sort_order: 0
state: active
step_type_settings:
contact_tag_step:
action: Add Tags
contacts_tag_ids:
- 7001
- branch: unmatched
steps: []
'401':
description: Unauthorized
content:
application/json:
schema:
type: object
properties:
error:
type: string
example:
error: API key missing or invalid
'403':
description: Forbidden
content:
application/json:
schema:
type: object
properties:
error:
type: string
example:
error: You are not authorized to perform this action.
'404':
description: Not Found
content:
application/json:
schema:
type: object
properties:
error:
type: string
example:
error: 'Not found: Record missing'
/workflows/{id}/enable:
post:
tags:
- Workflow
summary: Enable Workflow
description: 'Enable a workflow so it can accept new runs. The workflow must have at least one
active trigger — otherwise returns 422. Returns the updated workflow.
'
operationId: enableWorkflow
externalDocs:
description: Workflows Skill - enabling, disabling
url: https://accounts.myclickfunnels.com/.well-known/workflows/skill.md#enabling-disabling
security:
- BearerAuth: []
parameters:
- $ref: '#/components/parameters/id'
responses:
'200':
description: OK
content:
application/json:
schema:
$ref: '#/components/schemas/WorkflowAttributes'
example:
id: 101
public_id: WfAbCd
workspace_id: 5001
name: New Lead Nurture
status: live
disabled: false
archived: false
run_type: asynchronous
active_runs_count: 0
completed_runs_count: 0
created_at: '2025-06-01T00:00:00.000Z'
updated_at: '2025-06-18T00:00:00.000Z'
'401':
description: Unauthorized
content:
application/json:
schema:
type: object
properties:
error:
type: string
example:
error: API key missing or invalid
'403':
description: Forbidden
content:
application/json:
schema:
type: object
properties:
error:
type: string
example:
error: You are not authorized to perform this action.
'404':
description: Not Found
content:
application/json:
schema:
type: object
properties:
error:
type: string
example:
error: 'Not found: Record missing'
'422':
description: Unprocessable Entity
content:
application/json:
schema:
type: object
properties:
error:
type: string
example:
error: 'Request unprocessable: A workflow cannot be enabled without at least one active trigger.'
/workflows/{id}/disable:
post:
tags:
- Workflow
summary: Disable Workflow
description: 'Disable a workflow, stopping new runs from being started. In-progress runs
are canceled. Returns the updated workflow.
'
operationId: disableWorkflow
externalDocs:
description: Workflows Skill - enabling, disabling
url: https://accounts.myclickfunnels.com/.well-known/workflows/skill.md#enabling-disabling
security:
- BearerAuth: []
parameters:
- $ref: '#/components/parameters/id'
responses:
'200':
description: OK
content:
application/json:
schema:
$ref: '#/components/schemas/WorkflowAttributes'
example:
id: 101
public_id: WfAbCd
workspace_id: 5001
name: New Lead Nurture
status: draft
disabled: true
archived: false
run_type: asynchronous
active_runs_count: 0
completed_runs_count: 340
created_at: '2025-06-01T00:00:00.000Z'
updated_at: '2025-06-18T00:00:00.000Z'
'401':
description: Unauthorized
content:
application/json:
schema:
type: object
properties:
error:
type: string
example:
error: API key missing or invalid
'403':
description: Forbidden
content:
application/json:
schema:
type: object
properties:
error:
type: string
example:
error: You are not authorized to perform this action.
'404':
description: Not Found
content:
application/json:
schema:
type: object
properties:
error:
type: string
example:
error: 'Not found: Record missing'
components:
parameters:
id:
name: id
in: path
required: true
schema:
type: string
sort_property:
name: sort_property
in: query
description: 'Sort property of a list response. The default is id and thus the created_at order.
If you sort by other properties, we additionally sort by id implicitly as a secondary sort property, so that you can rely on the sort order to be deterministic even if the main sort property ends up with the same values.
'
required: false
schema:
type: string
enum:
- id
- updated_at
sort_order:
name: sort_order
in: query
description: Sort order of a list response. Use 'desc' to reverse the default 'asc' (ascending) sort order. Examples [in our guides](https://developers.myclickfunnels.com/docs/pagination).
required: false
schema:
type: string
enum:
- asc
- desc
after:
name: after
in: query
required: false
schema:
type: string
description: ID of item after which the collection should be returned. More examples and info about pagination [in our guides](https://developers.myclickfunnels.com/docs/pagination).
schemas:
WorkflowAttributes:
type: object
title: Workflow
description: A standalone automation workflow.
properties:
id:
type: integer
description: Workflow ID
public_id:
type:
- string
- 'null'
description: Obfuscated workflow ID
workspace_id:
type: integer
description: Integer ID of the workspace that owns this workflow
name:
type: string
description: Human-readable workflow name
status:
type: string
enum:
- draft
- live
- archived
description: Derived status. `live` = enabled with at least one active trigger; `archived` = archived; otherwise `draft`.
disabled:
type: boolean
description: True when the workflow is disabled (not executing runs).
archived:
type: boolean
description: True when the workflow has been archived.
run_type:
type: string
enum:
- asynchronous
- synchronous
- one_time
description: How the workflow handles concurrent runs for the same contact. Server-controlled — always `asynchronous` for API-created workflows.
active_runs_count:
type: integer
description: Number of currently active (in-progress) runs.
completed_runs_count:
type: integer
description: Cumulative count of completed runs.
created_at:
type: string
format: date-time
description: Creation timestamp
updated_at:
type: string
format: date-time
description: Last update timestamp
example:
id: 101
public_id: WfAbCd
workspace_id: 5001
name: New Lead Nurture
status: live
disabled: false
archived: false
run_type: asynchronous
active_runs_count: 12
completed_runs_count: 340
created_at: '2025-06-01T00:00:00.000Z'
updated_at: '2025-06-10T00:00:00.000Z'
required:
- active_runs_count
- archived
- completed_runs_count
- created_at
- disabled
- id
- name
- public_id
- run_type
- status
- updated_at
- workspace_id
WorkflowParametersUpdate:
type: object
title: Update Workflow
description: Parameters for updating an existing workflow. All fields are optional.
required:
- workflow
properties:
workflow:
type: object
properties:
name:
type: string
description: New name for the workflow.
archived:
type: boolean
description: Set to `true` to archive the workflow, `false` to unarchive.
example:
workflow:
name: Updated Nurture Sequence
archived: false
WorkflowParametersCreate:
type: object
title: Create Workflow
description: 'Parameters for creating a new workflow. `run_type` is server-controlled
(always `asynchronous` for API-created workflows) and is not accepted as a
request parameter.
'
required:
- workflow
properties:
workflow:
type: object
required:
- name
properties:
name:
type: string
description: Human-readable name for the workflow.
example:
workflow:
name: New Lead Nurture
WorkflowStructureAttributes:
type: object
title: Workflow Structure
description: 'A complete tree view of a workflow — its header, triggers, and the ordered list
of visible steps. Internal container nodes (sequence steps, end-step markers) are
spliced out. Split steps expose their child branches or variants inline.
Step entries share a common shape (`id`, `public_id`, `step_type`, `name`, `sort_order`,
`state`, `step_type_settings`) and gain type-specific fields:
- **`conditional_split_step`**: `convergence_step_id` + `branches` array (`matched` / `unmatched`), each branch carrying its own `steps`.
- **`split_test_step`**: `convergence_step_id` + `variants` array (each with `weight` and `steps`).
- All other step types: no extra branching fields.
'
properties:
workflow:
type: object
description: Summary header of the workflow.
properties:
id:
type: integer
public_id:
type: string
name:
type: string
status:
type: string
enum:
- draft
- live
- archived
disabled:
type: boolean
archived:
type: boolean
run_type:
type: string
triggers:
type: array
description: Active triggers attached to the workflow (summary shape).
items:
type: object
properties:
id:
type: integer
public_id:
type: string
event_type_key:
type: string
active:
type: boolean
allow_anonymous_contacts:
type: boolean
steps:
type: array
description: 'Ordered visible steps. Splits are inlined with their child steps.
Walk this array top-to-bottom to follow the execution order.
'
items:
type: object
properties:
id:
type: integer
public_id:
type: string
step_type:
type: string
description: The step class key, e.g. `send_email_step`, `delay_step`, `conditional_split_step`.
name:
type: string
sort_order:
type: integer
description: Position within its own container — not globally unique across the tree.
state:
type: string
enum:
- active
- notSetup
- notDefined
step_type_settings:
type: object
description: One-key map whose key is the step type. See Workflows::Step for the per-type shape.
convergence_step_id:
type:
- integer
- 'null'
description: 'Split steps only. Id of the step where this split''s branches reconverge — the first step that runs after the split, which every branch continues to. Example: a conditional_split_step (id 203) whose matched/unmatched branches both lead to the same next step (id 206) → convergence_step_id: 206. null when nothing follows the split (it ends the flow). The referenced step always appears in this tree.'
branches:
type: array
description: conditional_split_step only. Always `[matched,
# --- truncated at 32 KB (35 KB total) ---
# Full source: https://raw.githubusercontent.com/api-evangelist/clickfunnels/refs/heads/main/openapi/clickfunnels-workflow-api-openapi.yml