Journeys API

Journeys 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. Journeys are defined as a DAG (directed acyclic graph) of tiles connected by edges.

Endpoints

MethodPathDescription
GET/api/v1/workspaces/{id}/journeysList all journeys
POST/api/v1/workspaces/{id}/journeysCreate a journey
GET/api/v1/workspaces/{id}/journeys/{journeyId}Get a journey
PUT/api/v1/workspaces/{id}/journeys/{journeyId}Update a journey
DELETE/api/v1/workspaces/{id}/journeys/{journeyId}Delete a journey
POST/api/v1/workspaces/{id}/journeys/{journeyId}/validateValidate journey DAG
POST/api/v1/workspaces/{id}/journeys/{journeyId}/activateActivate a journey
POST/api/v1/workspaces/{id}/journeys/{journeyId}/pausePause a journey
POST/api/v1/workspaces/{id}/journeys/{journeyId}/resumeResume a journey
POST/api/v1/workspaces/{id}/journeys/{journeyId}/triggerTrigger evaluation
GET/api/v1/workspaces/{id}/journeys/{journeyId}/runsList runs
GET/api/v1/workspaces/{id}/journeys/{journeyId}/runs/{runId}Get a run
POST/api/v1/workspaces/{id}/journeys/{journeyId}/runs/{runId}/cancelCancel a run
GET/api/v1/workspaces/{id}/journeys/{journeyId}/statsGet journey stats

List Journeys

GET /api/v1/workspaces/{id}/journeys

Returns all journeys 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://your-instance.signalsmith.io/api/v1/workspaces/{id}/journeys \
  -H "Authorization: Bearer <token>" \
  -H "X-Workspace-ID: <workspace-id>"

Create Journey

POST /api/v1/workspaces/{id}/journeys

Creates a new journey.

Request Body

FieldTypeRequiredDescription
namestringYesDisplay name
descriptionstringNoDescription
parent_model_idstring (UUID)YesParent entity model for entry criteria
entry_criteriaobjectNoFilter tree defining who enters the journey
exit_criteriaobjectNoFilter tree defining who exits the journey
tilesarrayNoJourney step definitions (tile DAG nodes)
edgesarrayNoConnections between tiles (DAG edges)
schedulestringNoCron expression for evaluation schedule

Tile Types

Tiles define the steps in a journey:

TypeDescription
entryEntry point tile (required, exactly one)
waitTime delay (e.g., wait 3 days)
filterConditional branch based on audience criteria
syncSend data to a destination
splitRandom A/B split
exitExit point tile

Example

curl -X POST https://your-instance.signalsmith.io/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 Journey

GET /api/v1/workspaces/{id}/journeys/{journeyId}

Returns a single journey by ID, including the full tile DAG definition.


Update Journey

PUT /api/v1/workspaces/{id}/journeys/{journeyId}

Updates an existing journey. Changes to active journeys take effect on the next evaluation run.


Delete Journey

DELETE /api/v1/workspaces/{id}/journeys/{journeyId}

Deletes a journey. Active journeys must be paused before deletion.

Response

{
  "status": "deleted"
}

Validate Journey

POST /api/v1/workspaces/{id}/journeys/{journeyId}/validate

Validates the journey’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": [
    "Journey must have exactly one entry tile",
    "Tile 'tile-5' has no incoming edges and is not an entry tile"
  ]
}

Activate Journey

POST /api/v1/workspaces/{id}/journeys/{journeyId}/activate

Activates a journey, enabling it to evaluate entry criteria and process members on schedule. The journey must pass validation before activation.

Response

Returns the updated journey object with status: "active".


Pause Journey

POST /api/v1/workspaces/{id}/journeys/{journeyId}/pause

Pauses an active journey. Members currently in the journey remain at their current tile but no new evaluations occur.

Response

Returns the updated journey object with status: "paused".


Resume Journey

POST /api/v1/workspaces/{id}/journeys/{journeyId}/resume

Resumes a paused journey.

Response

Returns the updated journey object with status: "active".


Trigger Evaluation

POST /api/v1/workspaces/{id}/journeys/{journeyId}/trigger

Manually triggers a journey evaluation run. Evaluates entry criteria, moves members through tiles, and processes any pending actions.

Response

Returns the created journey run object with status 201 Created.

Example

curl -X POST https://your-instance.signalsmith.io/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 a journey (last 50 runs).


Get Run

GET /api/v1/workspaces/{id}/journeys/{journeyId}/runs/{runId}

Returns details of a specific journey 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 a journey, including member counts by tile and status.

Response

{
  "tiles": {},
  "total": {
    "active": 0,
    "completed": 0,
    "exited": 0
  }
}

Journey Object

FieldTypeDescription
idstring (UUID)Unique identifier
workspace_idstring (UUID)Owning workspace
parent_model_idstring (UUID)Parent entity model
namestringDisplay name
descriptionstringDescription
entry_criteriaobjectFilter tree for entry conditions
exit_criteriaobjectFilter tree for exit conditions
tilesarrayJourney step definitions
edgesarrayConnections between tiles
schedulestringCron expression for evaluation
statusstringdraft, active, paused, draining, archived, or error
status_errorstringError message when status is error
created_bystring (UUID)Account that created the journey
created_atstring (ISO 8601)Creation timestamp
updated_atstring (ISO 8601)Last update timestamp
last_run_idstring (UUID) or nullID of the most recent run
last_run_atstring (ISO 8601) or nullTime of the most recent run

Journey Member Statuses

StatusDescription
activeMember is progressing through the journey
completedMember reached an exit tile
exitedMember was removed by exit criteria