Orchestrations API
Orchestrations are multi-step, multi-channel automation workflows that move customers through a sequence of actions based on entry criteria, branching logic, time delays, and exit conditions. Orchestrations are defined as a DAG (directed acyclic graph) of tiles connected by edges.
Endpoints
| Method | Path | Description |
|---|---|---|
GET | /api/v1/workspaces/{id}/journeys | List all orchestrations |
POST | /api/v1/workspaces/{id}/journeys | Create an orchestration |
GET | /api/v1/workspaces/{id}/journeys/{journeyId} | Get an orchestration |
PUT | /api/v1/workspaces/{id}/journeys/{journeyId} | Update an orchestration |
DELETE | /api/v1/workspaces/{id}/journeys/{journeyId} | Delete an orchestration |
POST | /api/v1/workspaces/{id}/journeys/{journeyId}/validate | Validate orchestration DAG |
POST | /api/v1/workspaces/{id}/journeys/{journeyId}/activate | Activate an orchestration |
POST | /api/v1/workspaces/{id}/journeys/{journeyId}/pause | Pause an orchestration |
POST | /api/v1/workspaces/{id}/journeys/{journeyId}/resume | Resume an orchestration |
POST | /api/v1/workspaces/{id}/journeys/{journeyId}/trigger | Trigger evaluation |
GET | /api/v1/workspaces/{id}/journeys/{journeyId}/runs | List runs |
GET | /api/v1/workspaces/{id}/journeys/{journeyId}/runs/{runId} | Get a run |
POST | /api/v1/workspaces/{id}/journeys/{journeyId}/runs/{runId}/cancel | Cancel a run |
GET | /api/v1/workspaces/{id}/journeys/{journeyId}/stats | Get orchestration stats |
List Orchestrations
GET /api/v1/workspaces/{id}/journeys
Returns all orchestrations in the workspace.
Response
[
{
"id": "550e8400-e29b-41d4-a716-446655440000",
"workspace_id": "660e8400-e29b-41d4-a716-446655440000",
"parent_model_id": "770e8400-e29b-41d4-a716-446655440000",
"name": "Onboarding Flow",
"description": "Welcome series for new customers",
"entry_criteria": {...},
"exit_criteria": {...},
"tiles": [...],
"edges": [...],
"schedule": "0 */6 * * *",
"status": "active",
"status_error": "",
"created_by": "880e8400-e29b-41d4-a716-446655440000",
"created_at": "2024-01-15T09:30:00Z",
"updated_at": "2024-01-15T09:30:00Z",
"last_run_id": "990e8400-e29b-41d4-a716-446655440000",
"last_run_at": "2024-01-15T15:00:00Z"
}
]Example
curl -X GET https://composable.zeotap.com/api/v1/workspaces/{id}/journeys \
-H "Authorization: Bearer <token>" \
-H "X-Workspace-ID: <workspace-id>"Create Orchestration
POST /api/v1/workspaces/{id}/journeys
Creates a new orchestration.
Request Body
| Field | Type | Required | Description |
|---|---|---|---|
name | string | Yes | Display name |
description | string | No | Description |
parent_model_id | string (UUID) | Yes | Parent entity model for entry criteria |
entry_criteria | object | No | Filter tree defining who enters the orchestration |
exit_criteria | object | No | Filter tree defining who exits the orchestration |
tiles | array | No | Orchestration step definitions (tile DAG nodes) |
edges | array | No | Connections between tiles (DAG edges) |
schedule | string | No | Cron expression for evaluation schedule |
Tile Types
Tiles define the steps in an orchestration:
| Type | Description |
|---|---|
entry | Entry point tile (required, exactly one) |
wait | Time delay (e.g., wait 3 days) |
filter | Conditional branch based on audience criteria |
sync | Send data to a destination |
split | Random A/B split |
exit | Exit point tile |
Example
curl -X POST https://composable.zeotap.com/api/v1/workspaces/{id}/journeys \
-H "Authorization: Bearer <token>" \
-H "X-Workspace-ID: <workspace-id>" \
-H "Content-Type: application/json" \
-d '{
"name": "Onboarding Flow",
"description": "Welcome series for new customers",
"parent_model_id": "770e8400-e29b-41d4-a716-446655440000",
"schedule": "0 */6 * * *",
"tiles": [
{
"id": "tile-1",
"type": "entry",
"position": {"x": 0, "y": 0}
},
{
"id": "tile-2",
"type": "sync",
"config": {
"destination_id": "880e8400-e29b-41d4-a716-446655440000",
"field_mapping": [...]
},
"position": {"x": 0, "y": 200}
},
{
"id": "tile-3",
"type": "wait",
"config": {"duration": 3, "unit": "days"},
"position": {"x": 0, "y": 400}
}
],
"edges": [
{"from": "tile-1", "to": "tile-2"},
{"from": "tile-2", "to": "tile-3"}
]
}'Get Orchestration
GET /api/v1/workspaces/{id}/journeys/{journeyId}
Returns a single orchestration by ID, including the full tile DAG definition.
Update Orchestration
PUT /api/v1/workspaces/{id}/journeys/{journeyId}
Updates an existing orchestration. Changes to active orchestrations take effect on the next evaluation run.
Delete Orchestration
DELETE /api/v1/workspaces/{id}/journeys/{journeyId}
Deletes an orchestration. Active orchestrations must be paused before deletion.
Response
{
"status": "deleted"
}Validate Orchestration
POST /api/v1/workspaces/{id}/journeys/{journeyId}/validate
Validates the orchestration’s tile DAG for structural correctness. Checks for:
- Exactly one entry tile
- No cycles in the graph
- All edges reference valid tiles
- Required configuration on each tile type
Response
{
"valid": true,
"errors": []
}Or with validation errors:
{
"valid": false,
"errors": [
"Orchestration must have exactly one entry tile",
"Tile 'tile-5' has no incoming edges and is not an entry tile"
]
}Activate Orchestration
POST /api/v1/workspaces/{id}/journeys/{journeyId}/activate
Activates an orchestration, enabling it to evaluate entry criteria and process members on schedule. The orchestration must pass validation before activation.
Response
Returns the updated orchestration object with status: "active".
Pause Orchestration
POST /api/v1/workspaces/{id}/journeys/{journeyId}/pause
Pauses an active orchestration. Members currently in the orchestration remain at their current tile but no new evaluations occur.
Response
Returns the updated orchestration object with status: "paused".
Resume Orchestration
POST /api/v1/workspaces/{id}/journeys/{journeyId}/resume
Resumes a paused orchestration.
Response
Returns the updated orchestration object with status: "active".
Trigger Evaluation
POST /api/v1/workspaces/{id}/journeys/{journeyId}/trigger
Manually triggers an orchestration evaluation run. Evaluates entry criteria, moves members through tiles, and processes any pending actions.
Response
Returns the created orchestration run object with status 201 Created.
Example
curl -X POST https://composable.zeotap.com/api/v1/workspaces/{id}/journeys/{journeyId}/trigger \
-H "Authorization: Bearer <token>" \
-H "X-Workspace-ID: <workspace-id>"List Runs
GET /api/v1/workspaces/{id}/journeys/{journeyId}/runs
Returns the evaluation history for an orchestration (last 50 runs).
Get Run
GET /api/v1/workspaces/{id}/journeys/{journeyId}/runs/{runId}
Returns details of a specific orchestration run.
Cancel Run
POST /api/v1/workspaces/{id}/journeys/{journeyId}/runs/{runId}/cancel
Cancels a running evaluation.
Response
{
"status": "cancelled"
}Get Stats
GET /api/v1/workspaces/{id}/journeys/{journeyId}/stats
Returns aggregate statistics for an orchestration, including member counts by tile and status.
Response
{
"tiles": {},
"total": {
"active": 0,
"completed": 0,
"exited": 0
}
}Orchestration Object
| Field | Type | Description |
|---|---|---|
id | string (UUID) | Unique identifier |
workspace_id | string (UUID) | Owning workspace |
parent_model_id | string (UUID) | Parent entity model |
name | string | Display name |
description | string | Description |
entry_criteria | object | Filter tree for entry conditions |
exit_criteria | object | Filter tree for exit conditions |
tiles | array | Orchestration step definitions |
edges | array | Connections between tiles |
schedule | string | Cron expression for evaluation |
status | string | draft, active, paused, draining, archived, or error |
status_error | string | Error message when status is error |
created_by | string (UUID) | Account that created the orchestration |
created_at | string (ISO 8601) | Creation timestamp |
updated_at | string (ISO 8601) | Last update timestamp |
last_run_id | string (UUID) or null | ID of the most recent run |
last_run_at | string (ISO 8601) or null | Time of the most recent run |
Orchestration Member Statuses
| Status | Description |
|---|---|
active | Member is progressing through the orchestration |
completed | Member reached an exit tile |
exited | Member was removed by exit criteria |