Skip to main content
POST
cURL
You supply workflowId in the path (URL-encode it). folderId is a required query parameter — create a folder first or reuse one from List workflows. The body needs at least name. Also send associatedToBusinessId (phone-number id from GET phone numbers) and platformType. You can also send a full graph (data, parsedData, trigger, triggerType, variables). The server always stores isActive: false and sets associatedTo from the Cookie. Returns { message, created, lastModified }. Keep lastModified for later graph PUTs.
Before building data or parsedData, read Build workflows. Fetch phones, ask the user which number to bind, then infer intent: a WhatsApp template only if this bot opens the conversation; inbound reply bots use messageType: "custom". An AI that only writes data will not run; one that only writes parsedData will not open correctly on the board.
  1. Optional: Create folderPOST /folders/{id} with { "name": "..." }
  2. POST /workflows/{workflowId}?folderId=... with name and optional graph
  3. Update workflowPUT { "isActive": true } (no graph required)
Graph PUTs must echo lastModified from this create response (or a later GET), or the API returns 409.

Authorizations

Personal access token from Pingmee Settings → Developer Tools

x-api-key
string
header
required

Business API key from Pingmee Settings → Developer Tools

Path Parameters

workflowId
string
required

Client-supplied workflow identifier. Must be URL-encoded when used in the path.

Query Parameters

folderId
string
required

Folder to place the workflow in. Create a folder with POST /folders/{id} or reuse folderId from the minimal list.

Body

application/json

At least name. Optionally include the full dual graph (data, parsedData, trigger, triggerType, variables) and other Workflow fields. isActive in the body is ignored — the server always stores false.

name
string
required

Workflow name.

associatedToBusinessId
string

WhatsApp phone-number id from GET /phone-numbers (row id, not associatedBusinessId / WABA). Required for WhatsApp send. Ask the user if more than one number exists.

associatedToPlatformId
string

Optional alias of the same phone-number / page id as associatedToBusinessId.

platformType
string

whatsapp, facebookMessenger, instagram, or web. Set on create together with associatedToBusinessId.

triggerType
string

Usually trigger.data.eventType. Trigger is not inside parsedData.

trigger
object

Execution node used in parsedData, trigger, and subNodes. Branching is which sub-node's connections.out — there are no handle ids here. Node data is a loose object; read /build-workflows/overview before building it.

variables
object

Workflow-level variable map. Usually {} unless set.

data
object

React Flow canvas (workflow.data from toObject()). Required for the editor. Always send together with parsedData + trigger when saving a graph. Node form payloads are not fully specified here — read /build-workflows/overview before building data.

parsedData
object[]

Execution graph: parent nodes only. Sub-nodes hang off parent.subNodes[].

settings
object
notes
string

Response

Workflow created (always inactive)

message
string
required
Example:

"Workflow 'wf_welcome' created."

created
integer
required

Unix timestamp (seconds).

lastModified
integer
required

Unix timestamp (seconds). Echo this on later graph PUTs.

Last modified on September 4, 2026