Webex Flows API
The Flows API from Webex — 11 operation(s) for flows.
The Flows API from Webex — 11 operation(s) for flows.
openapi: 3.2.0
info:
title: Webex Contact Center Flows API
version: 1.0.0
description: The Webex Contact Center APIs allow developers to deeply integrate, configure, and manage cloud-based contact center solutions. These APIs cover agent lifecycle management, queue and routing configuration, customer journey tracking, and access to real-time and historical analytics. Use cases include embedding agent controls in custom UIs, automating workforce management, integrating with CRM and ticketing systems, and building custom reporting dashboards. The APIs empower organizations to deliver personalized, efficient customer experiences and optimize contact center operations.
x-provenance:
method: harvested
authored_by: Cisco Webex
harvested_by: API Evangelist
harvested_on: '2026-08-19'
first_party: true
note: Published by Cisco. Retrieved unmodified except for this x-provenance block.
provider_published: true
x-evidence:
- type: source
url: https://github.com/webex/webex-openapi-specs/blob/main/public-spec/webex-contact-center.json
- type: raw
url: https://raw.githubusercontent.com/webex/webex-openapi-specs/main/public-spec/webex-contact-center.json
tags:
- name: Flows
paths:
/{orgId}/project/{projectId}/flows:
get:
tags:
- Flows
summary: List Flows or Subflows
description: 'Returns a list of flows in response. Channel-based filtering can be applied with the `searchBy` query parameter (for example, `channelType|telephony`, `channelType|workItem`, `channelType|customMessaging`, `channelType|genericAction`). Channel visibility may be constrained by organization feature flags.
Scope: `cjp:config_read`. Roles: [`Organizational Full Admin`, `Supervisor`, `Contact Center Service Admin`, `User Admin`]'
operationId: findFlowsUsingGET
parameters:
- name: flowType
in: query
description: Either of 'FLOW' or 'SUBFLOW'.
schema:
type: string
default: FLOW
example: FLOW
- name: ids
in: query
description: Filters results based on a comma-separated list of flow IDs. If provided, only flows with those IDs will be fetched in the response.
style: form
schema:
type: array
items:
type: string
example:
- 668e4b2d928d471e41da03d1
- 668e3ee2928d471e41da03cb
- name: orgId
in: path
description: Organization ID.
required: true
schema:
type: string
example: 8eb7da9a-c81c-4d13-b08b-38fdeb7330d8
- name: page
in: query
description: Defines the number of the displayed page. The page number starts from 0.
schema:
type: integer
format: int32
default: 0
example: 0
- name: partialNameSearch
in: query
description: Performs a partial string match on the name of the flow. If the flow name contains the given string it will be fetched in the response.
schema:
type: string
example: flow1
- name: searchBy
in: query
description: Filter expression in the format `<field>|<value>`. Supports searching by `channelType` (for example, `channelType|telephony`, `channelType|workItem`, `channelType|customMessaging`, `channelType|genericAction`).
schema:
type: string
example: channelType|customMessaging
- name: projectId
in: path
description: 'Project ID. System generated value which is the same across orgs and environments. Always use: 5e5c9ad6d61f870d6d778c1b.'
required: true
schema:
type: string
example: 5e5c9ad6d61f870d6d778c1b
- name: size
in: query
description: Defines the number of items to be displayed on a page. If the number specified is more than allowed max page size, the API will automatically adjust the page size to the max page size.
schema:
type: integer
format: int32
default: 10
example: 10
- name: includePagination
in: query
description: If set to true then a different paginated response object containing the page metadata (currentPage, totalRecords, pageSize, totalPages) will be returned. The flow objects will be in an array named "data".
required: false
schema:
type: boolean
default: false
example: false
- name: isValidation
in: query
description: If true, validates the existence of flows by ID regardless of the caller's RBAC access. Intended for internal Task Management use cases.
required: false
schema:
type: boolean
default: false
example: false
responses:
'200':
description: OK
content:
application/json:
schema:
type: array
items:
$ref: '#/components/schemas/BasicFlow'
example:
- id: 65c28d9db2a2375974066579
name: TestFlow
flowType: FLOW
status: Draft
orgId: 8eb7da9a-c81c-4d13-b08b-38fdeb7330d8
version: 1
'400':
description: Bad request
content: {}
'401':
description: Unauthorized
content: {}
'403':
description: Forbidden
content: {}
'404':
description: Not Found
content: {}
'500':
description: Internal Server Error
content: {}
/{orgId}/project/{projectId}/flows:search:
get:
tags:
- Flows
summary: Search Flows
description: 'Returns a list of flows in response. The search is case-sensitive.
Scope: `cjp:config_read`. Roles: [`Organizational Full Admin`, `Supervisor`, `Contact Center Service Admin`, `User Admin`]'
operationId: searchFlows
parameters:
- name: orgId
in: path
description: Organization ID.
required: true
schema:
type: string
example: 8eb7da9a-c81c-4d13-b08b-38fdeb7330d8
- name: projectId
in: path
description: 'Project ID. System generated value which is the same across orgs and environments. Always use: 5e5c9ad6d61f870d6d778c1b.'
required: true
schema:
type: string
example: 5e5c9ad6d61f870d6d778c1b
- name: query
in: query
description: Searches for flows with the given query. The search is case-sensitive.
required: true
schema:
type: string
example: flow1
- name: flowType
in: query
description: Either of 'FLOW' or 'SUBFLOW' or 'ALL'. Default value is 'ALL'.
required: false
schema:
type: string
default: ALL
example: FLOW
- name: page
in: query
description: Defines the number of the displayed page. The page number starts from 0.
required: false
schema:
type: integer
format: int32
default: 0
example: 0
- name: size
in: query
description: Defines the number of items to be displayed on a page. If the number specified is more than allowed max page size, the API will automatically adjust the page size to the max page size.
required: false
schema:
type: integer
format: int32
default: 100
example: 10
- name: keyValueFilter
in: query
description: 'Filters results based on key-value pairs. Format: ''key1|value1,key2|value2''. This will add a filter on normalizedFlow collection directly instead of running query on atlas.'
required: false
schema:
type: string
default: ''
example: activityName|Queue,flowType|FLOW
responses:
'200':
description: OK
content:
application/json:
schema:
$ref: '#/components/schemas/FlowSearchResponse'
'400':
description: Bad request
content: {}
'401':
description: Unauthorized
content: {}
'403':
description: Forbidden
content: {}
'404':
description: Not Found
content: {}
'500':
description: Internal Server Error
content: {}
/{orgId}/project/{projectId}/flows/{flowId}:
delete:
tags:
- Flows
summary: Delete a Flow or Subflow
description: 'Permanently deletes a flow or subflow. Flows deleted via this API are removed permanently and cannot be recovered.
Scope: `cjp:config_write`. Roles: [`Organizational Full Admin`, `Contact Center Service Admin`]'
operationId: deleteFlowUsingDELETE
parameters:
- name: orgId
in: path
description: Organization ID.
required: true
schema:
type: string
example: 8eb7da9a-c81c-4d13-b08b-38fdeb7330d8
- name: projectId
in: path
description: 'Project ID. System generated value which is the same across orgs and environments. Always use: 5e5c9ad6d61f870d6d778c1b.'
required: true
schema:
type: string
example: 5e5c9ad6d61f870d6d778c1b
- name: flowId
in: path
description: ID of the flow/subflow to delete.
required: true
schema:
type: string
example: 661c7bc712eaf357de7e4aeb
- name: force
in: query
description: If 'yes', the flow is deleted even if it is still referenced by other entities. Defaults to 'no'.
required: false
schema:
type: string
default: 'no'
example: 'no'
- name: skipRsEPCheck
in: query
description: If true, skips the check for routing strategy and entry point associations before deleting the flow.
required: false
schema:
type: boolean
default: true
example: true
- name: flowType
in: query
description: Either of 'FLOW' or 'SUBFLOW'.
required: false
schema:
type: string
default: FLOW
example: FLOW
responses:
'200':
description: OK
content:
application/json:
schema:
type: string
example: OK
'400':
description: Bad Request
content: {}
'401':
description: Unauthorized
content: {}
'403':
description: Forbidden
content: {}
'404':
description: Not Found
content: {}
'500':
description: Internal Server Error
content: {}
/{orgId}/project/{projectId}/flows/{flowId}:publish:
post:
tags:
- Flows
summary: Publish a Flow or Subflow
description: 'Returns the published flow in response.
The Publish API validates the basic structure of the flows. We recommend manually verifying the published flows before proceeding with live traffic.
Scope: `cjp:config_write`. Roles: [`Organizational Full Admin`, `Supervisor`, `Contact Center Service Admin`, `User Admin`]'
operationId: publishFlowVersionUsingPOST
parameters:
- name: flowId
in: path
description: ID of the flow/subflow to publish.
required: true
schema:
type: string
example: 661c7bc712eaf357de7e4aeb
- name: orgId
in: path
description: Organization ID.
required: true
schema:
type: string
example: 8eb7da9a-c81c-4d13-b08b-38fdeb7330d8
- name: projectId
in: path
description: 'Project ID. System generated value which is the same across orgs and environments. Always use: 5e5c9ad6d61f870d6d778c1b.'
required: true
schema:
type: string
example: 5e5c9ad6d61f870d6d778c1b
- name: TrackingId
in: header
description: ID for tracking.
schema:
type: string
example: 491fed1e-de7f-11ef-9cd2-0242ac120002
- name: skipValidation
in: query
description: If true, the flow's pre-publish validation is skipped. Use with care.
required: false
schema:
type: boolean
default: false
example: false
- name: flowType
in: query
description: Either of 'FLOW' or 'SUBFLOW'.
required: false
schema:
type: string
default: FLOW
example: FLOW
requestBody:
content:
application/json:
schema:
$ref: '#/components/schemas/PublishParameters'
required: true
responses:
'200':
description: OK
content:
application/json:
schema:
$ref: '#/components/schemas/FlowRes'
'201':
description: Created
content: {}
'400':
description: Bad request
content: {}
'401':
description: Unauthorized
content: {}
'403':
description: Forbidden
content: {}
'404':
description: Not Found
content: {}
'500':
description: Internal Server Error
content: {}
x-codegen-request-body-name: PublishParameters
/{orgId}/project/{projectId}/flows/{flowId}:lock:
post:
tags:
- Flows
summary: Lock a Flow or Subflow
description: 'Lock a flow to prevent concurrent edits by other users. Locks expire after 15 minutes of inactivity.
Scope: `cjp:config_write`. Roles: [`Organizational Full Admin`, `Contact Center Service Admin`]'
operationId: lockFlowUsingPOST
parameters:
- name: flowId
in: path
description: Flow ID.
required: true
schema:
type: string
example: 661c7bc712eaf357de7e4aeb
- name: orgId
in: path
description: Organization ID.
required: true
schema:
type: string
example: 8eb7da9a-c81c-4d13-b08b-38fdeb7330d8
- name: projectId
in: path
description: 'Project ID. System generated value which is the same across orgs and environments. Always use: 5e5c9ad6d61f870d6d778c1b.'
required: true
schema:
type: string
example: 5e5c9ad6d61f870d6d778c1b
- name: flowType
in: query
description: Either of 'FLOW' or 'SUBFLOW'.
required: false
schema:
type: string
default: FLOW
example: FLOW
responses:
'200':
description: Lock confirmation with expiry information.
content:
application/json:
schema:
$ref: '#/components/schemas/FlowLockResponse'
'401':
description: Unauthorized.
content: {}
'403':
description: Forbidden.
content: {}
'404':
description: Not Found.
content: {}
'409':
description: Conflict — the flow is already locked by another user.
content: {}
'429':
description: Too Many Requests.
content: {}
/{orgId}/project/{projectId}/flows/{flowId}:unlock:
post:
tags:
- Flows
summary: Unlock a Flow or Subflow
description: 'Release the lock on a flow to allow other users to edit it.
Scope: `cjp:config_write`. Roles: [`Organizational Full Admin`, `Contact Center Service Admin`]'
operationId: unlockFlowUsingPOST
parameters:
- name: flowId
in: path
description: Flow ID.
required: true
schema:
type: string
example: 661c7bc712eaf357de7e4aeb
- name: orgId
in: path
description: Organization ID.
required: true
schema:
type: string
example: 8eb7da9a-c81c-4d13-b08b-38fdeb7330d8
- name: projectId
in: path
description: 'Project ID. System generated value which is the same across orgs and environments. Always use: 5e5c9ad6d61f870d6d778c1b.'
required: true
schema:
type: string
example: 5e5c9ad6d61f870d6d778c1b
- name: flowType
in: query
description: Either of 'FLOW' or 'SUBFLOW'.
required: false
schema:
type: string
default: FLOW
example: FLOW
responses:
'200':
description: Unlock confirmation.
content:
application/json:
schema:
$ref: '#/components/schemas/FlowLockResponse'
'401':
description: Unauthorized.
content: {}
'403':
description: Forbidden.
content: {}
'404':
description: Not Found.
content: {}
'429':
description: Too Many Requests.
content: {}
/{orgId}/project/{projectId}/v2/flows:validate:
post:
tags:
- Flows
summary: Validate a Flow
description: 'Dry-run validate a flow definition without persisting it. Use this to check correctness before importing.
Note: validation is more lenient than import. A flow that passes `:validate` can still be rejected by `:import` (for example, a missing start activity), so a successful validation does not guarantee a successful import.
Scope: `cjp:config_write`'
operationId: validateFlowV2
parameters:
- name: orgId
in: path
description: Organization ID.
required: true
schema:
type: string
example: 8eb7da9a-c81c-4d13-b08b-38fdeb7330d8
- name: projectId
in: path
description: 'Project ID. System generated value which is the same across orgs and environments. Always use: 5e5c9ad6d61f870d6d778c1b.'
required: true
schema:
type: string
example: 5e5c9ad6d61f870d6d778c1b
requestBody:
description: Flow JSON document to validate.
content:
application/json:
schema:
$ref: '#/components/schemas/FlowV2'
required: true
responses:
'200':
description: Validation result.
content:
application/json:
schema:
$ref: '#/components/schemas/FlowV2ValidationResult'
'400':
description: Bad Request — Invalid flow schema or missing required fields.
content:
application/json:
schema:
$ref: '#/components/schemas/FlowV2ErrorResponse'
'401':
description: Unauthorized.
content: {}
'403':
description: Forbidden.
content: {}
'404':
description: Not Found.
content: {}
'429':
description: Too Many Requests.
content: {}
/{orgId}/project/{projectId}/v2/flows:import:
post:
tags:
- Flows
summary: Import a Flow
description: 'Import a new flow from a flow definition. Creates the flow in draft state and returns the assigned flow metadata, including `flowId`.
Scope: `cjp:config_write`'
operationId: importFlowV2
parameters:
- name: orgId
in: path
description: Organization ID.
required: true
schema:
type: string
example: 8eb7da9a-c81c-4d13-b08b-38fdeb7330d8
- name: projectId
in: path
description: 'Project ID. System generated value which is the same across orgs and environments. Always use: 5e5c9ad6d61f870d6d778c1b.'
required: true
schema:
type: string
example: 5e5c9ad6d61f870d6d778c1b
- name: overwrite
in: query
description: If true, replaces an existing flow with the same name. Defaults to false.
required: false
schema:
type: boolean
default: false
example: false
- name: flowType
in: query
description: Either of 'FLOW' or 'SUBFLOW'.
required: false
schema:
type: string
default: FLOW
example: FLOW
requestBody:
description: Flow JSON document to import.
content:
application/json:
schema:
$ref: '#/components/schemas/FlowV2'
required: true
responses:
'201':
description: Created — flow metadata including the assigned `flowId`.
content:
application/json:
schema:
$ref: '#/components/schemas/FlowV2Metadata'
'400':
description: Bad Request.
content:
application/json:
schema:
$ref: '#/components/schemas/FlowV2ErrorResponse'
'401':
description: Unauthorized.
content: {}
'403':
description: Forbidden.
content: {}
'404':
description: Not Found.
content: {}
'409':
description: Conflict — a flow with the same name already exists and `overwrite` is false.
content:
application/json:
schema:
$ref: '#/components/schemas/FlowV2ErrorResponse'
'422':
description: Unprocessable Entity — flow document failed validation.
content:
application/json:
schema:
$ref: '#/components/schemas/FlowV2ValidationResult'
'429':
description: Too Many Requests.
content: {}
/{orgId}/project/{projectId}/v2/flows/{flowId}:
get:
tags:
- Flows
summary: Get a Flow
description: 'Retrieve the current draft of a flow as a flow document. To fetch a specific published version, use the `:export` endpoint.
Scope: `cjp:config_read`'
operationId: getFlowV2
parameters:
- name: orgId
in: path
description: Organization ID.
required: true
schema:
type: string
example: 8eb7da9a-c81c-4d13-b08b-38fdeb7330d8
- name: projectId
in: path
description: 'Project ID. System generated value which is the same across orgs and environments. Always use: 5e5c9ad6d61f870d6d778c1b.'
required: true
schema:
type: string
example: 5e5c9ad6d61f870d6d778c1b
- name: flowId
in: path
description: Flow ID.
required: true
schema:
type: string
example: 661c7bc712eaf357de7e4aeb
- name: flowType
in: query
description: Either of 'FLOW' or 'SUBFLOW'.
required: false
schema:
type: string
default: FLOW
example: FLOW
responses:
'200':
description: Flow JSON document.
content:
application/json:
schema:
$ref: '#/components/schemas/FlowV2'
'401':
description: Unauthorized.
content: {}
'403':
description: Forbidden.
content: {}
'404':
description: Not Found.
content: {}
'429':
description: Too Many Requests.
content: {}
post:
tags:
- Flows
summary: Save a Flow Draft
description: 'Save a complete flow document as the current draft, replacing the existing draft. Pass `expectedVersion` as a query parameter to enable optimistic locking; the request fails with `409 Conflict` if the server-side version does not match. Omit `expectedVersion` to skip the check.
Scope: `cjp:config_write`'
operationId: saveFlowV2Draft
parameters:
- name: orgId
in: path
description: Organization ID.
required: true
schema:
type: string
example: 8eb7da9a-c81c-4d13-b08b-38fdeb7330d8
- name: projectId
in: path
description: 'Project ID. System generated value which is the same across orgs and environments. Always use: 5e5c9ad6d61f870d6d778c1b.'
required: true
schema:
type: string
example: 5e5c9ad6d61f870d6d778c1b
- name: flowId
in: path
description: Flow ID.
required: true
schema:
type: string
example: 661c7bc712eaf357de7e4aeb
- name: expectedVersion
in: query
description: Expected current draft version for optimistic locking. The request fails with 409 Conflict if the server-side version does not match. Omit to skip the check.
required: false
schema:
type: integer
format: int32
example: 3
- name: flowType
in: query
description: Either of 'FLOW' or 'SUBFLOW'.
required: false
schema:
type: string
default: FLOW
example: FLOW
requestBody:
description: Complete Flow JSON document.
content:
application/json:
schema:
$ref: '#/components/schemas/FlowV2'
required: true
responses:
'200':
description: Updated flow metadata, including the new `version`.
content:
application/json:
schema:
$ref: '#/components/schemas/FlowV2Metadata'
'400':
description: Bad Request.
content:
application/json:
schema:
$ref: '#/components/schemas/FlowV2ErrorResponse'
'401':
description: Unauthorized.
content: {}
'403':
description: Forbidden.
content: {}
'404':
description: Not Found.
content: {}
'409':
description: Conflict — `expectedVersion` does not match the current draft version.
content: {}
'422':
description: Unprocessable Entity — flow document failed validation.
content:
application/json:
schema:
$ref: '#/components/schemas/FlowV2ValidationResult'
'429':
description: Too Many Requests.
content: {}
patch:
tags:
- Flows
summary: Patch a Flow Draft
description: 'Apply partial updates to an existing flow draft without replacing the entire document. The patch body is a Patch Draft Contract — server-side merge, idempotent, and re-validated after the merge. The patch is rejected if the merged document fails validation, so the draft is never left in a broken state. The body may also include top-level overrides such as `name` and `description`.
Pass `expectedVersion` as a query parameter to enable optimistic locking; the request fails with `409 Conflict` if the server-side version does not match. Omit `expectedVersion` to skip the check.
Scope: `cjp:config_write`'
operationId: patchFlowV2Draft
parameters:
- name: orgId
in: path
description: Organization ID.
required: true
schema:
type: string
example: 8eb7da9a-c81c-4d13-b08b-38fdeb7330d8
- name: projectId
in: path
description: 'Project ID. System generated value which is the same across orgs and environments. Always use: 5e5c9ad6d61f870d6d778c1b.'
required: true
schema:
type: string
example: 5e5c9ad6d61f870d6d778c1b
- name: flowId
in: path
description: Flow ID.
required: true
schema:
type: string
example: 661c7bc712eaf357de7e4aeb
- name: expectedVersion
in: query
description: Expected current draft version for optimistic locking. The request fails with 409 Conflict if the server-side version does not match. Omit to skip the check.
required: false
schema:
type: integer
format: int32
example: 3
- name: flowType
in: query
description: Either of 'FLOW' or 'SUBFLOW'.
required: false
schema:
type: string
default: FLOW
example: FLOW
requestBody:
description: Patch Draft Contract document.
content:
application/json:
schema:
$ref: '#/components/schemas/PatchDraftContract'
required: true
responses:
'200':
description: Updated flow metadata, including the new `version`.
content:
application/json:
schema:
$ref: '#/components/schemas/FlowV2Metadata'
'400':
description: Bad Request.
content:
application/json:
schema:
$ref: '#/components/schemas/FlowV2ErrorResponse'
'401':
description: Unauthorized.
content: {}
'403':
description: Forbidden.
content: {}
'404':
description: Not Found.
content: {}
'409':
description: Conflict — `expectedVersion` does not match the current draft version.
content: {}
'422':
description: Unprocessable Entity — merged flow document failed validation.
content:
application/json:
schema:
$ref: '#/components/schemas/FlowV2ValidationResult'
'429':
description: Too Many Requests.
content: {}
/{orgId}/project/{projectId}/v2/flows/{flowId}:validate:
get:
tags:
- Flows
summary: Validate an Existing Flow Draft
description: 'Validate the current draft of an existing flow (read-only operation).
Scope: `cjp:config_read`'
operationId: validateExistingFlowV2
parameters:
- name: orgId
in: path
description: Organization ID.
required: true
schema:
type: string
example: 8eb7da9a-c81c-4d13-b08b-38fdeb7330d8
- name: projectId
in: path
description: 'Project ID. System generated value which is the same across orgs and environments. Always use: 5e5c9ad6d61f870d6d778c1b.'
required: true
schema:
type: string
example: 5e5c9ad6d61f870d6d778c1b
- name: flowId
in: path
description: Flow ID.
required: true
schema:
type: string
example: 661c7bc712eaf357de7e4aeb
- name: versionId
in: query
description: Version to validate. Use 'draft' for the current draft, or a specific version ObjectId.
required: false
schema:
type: string
default: draft
example: draft
- name: flowType
in: query
description: Either of 'FLOW' or 'SUBFLOW'.
required: false
schema:
type: string
default: FLOW
example: FLOW
responses:
'200':
description: Validation result.
content:
application/json:
schema:
$ref: '#/components/schemas/FlowV2DraftValidationResult'
'401':
description: Unauthorized.
content: {}
'403':
description: Forbidden.
content: {}
'404':
description: Not Found.
content: {}
'429':
description: Too Many Requests.
content: {}
/{orgId}/project/{projectId}/v2/flows/{flowId}:export:
get:
tags:
- Flows
summary: Export a Flow
description: 'Export a flow as a flow document for backup, migration, or version control.
Scope: `cjp:config_read`'
operationId: exportFlowV2
parameters:
- name: orgId
in: path
description: Organization ID.
required: true
schema:
type: string
example: 8eb7da9a-c81c-4d13-b08b-38fdeb7330d8
- name: projectId
in: path
description: 'Project ID. System generated value which is the same across orgs and environments. Always use: 5e5c9ad6d61f870d6d778c1b.'
required: true
schema:
type: string
example: 5e5c9ad6d61f870d6d778c1b
- name: flowId
in: path
description: Flow ID.
required: true
schema:
type: string
# --- truncated at 32 KB (83 KB total) ---
# Full source: https://raw.githubusercontent.com/api-evangelist/webex/refs/heads/main/openapi/webex-flows-api-openapi.yml