Skip to main content

Workflow Export & Import

Programmatic export and import of workflows as .strongly.json files. Export captures the full workflow definition; import is a two-phase flow -- validate first to discover unresolved dependencies, then execute with resolved mappings.

All endpoints require authentication via X-API-Key header and the appropriate scope.


Export Object​

{
"format": "strongly-workflow",
"version": "1.0",
"exported_at": "2026-05-16T10:30:00.000Z",
"workflow": {
"name": "PII Redaction Pipeline",
"description": "Multi-stage PII redaction workflow",
"triggerType": "manual",
"triggerConfig": {},
"nodes": [],
"connections": []
},
"dependencies": {
"ai_models": [
{ "ref_id": "ai_model_0", "type": "ai_model", "name": "65f1a2b3c4d5e6f708192a3b" }
],
"addons": [],
"datasources": [],
"workflows": []
}
}

GET /api/v1/workflows/:id/export​

Export a workflow as a .strongly.json file. Sets Content-Disposition: attachment with a sanitized filename derived from the workflow name.

Scope: workflows:read

Path Parameters

ParameterTypeRequiredDescription
idstringYesWorkflow ID to export

Response 200 OK

Headers:

  • Content-Type: application/json
  • Content-Disposition: attachment; filename="<workflow-name>.strongly.json"

The downloaded file body is the standard response envelope, with the Export object in data:

{
"data": { /* Export object */ },
"meta": {
"requestId": "req_abc123"
}
}

When importing, pass the data object (not the whole file) as exportData.


POST /api/v1/workflows/import​

Import a workflow from .strongly.json data. This endpoint is a two-phase flow:

  1. Validate -- call without resolvedDeps to validate the export and receive a list of dependency candidates that need to be mapped to local resources.
  2. Execute -- call again with resolvedDeps to perform the import.

Scope: workflows:write

Request Body (validation phase)

{
"exportData": { /* the Export object: the `data` of the export file */ }
}
FieldTypeRequiredDescription
exportDataobjectYesThe Export object. It must have format: "strongly-workflow" and a workflow with name and nodes
resolvedDepsarrayNoOne { "ref_id", "resolved_id" } entry per dependency, mapping each export ref_id to a local resource ID. Omit for validation only

Response 200 OK (validation phase)

{
"data": {
"valid": true,
"workflowName": "PII Redaction Pipeline",
"nodeCount": 4,
"connectionCount": 3,
"dependencyCount": 1,
"resolutions": [
{
"ref_id": "ai_model_0",
"resolution_type": "unresolved",
"candidates": []
}
]
},
"meta": {
"requestId": "req_abc123"
}
}

Request Body (execution phase)

{
"exportData": { /* the Export object */ },
"resolvedDeps": [
{ "ref_id": "ai_model_0", "resolved_id": "65f1a2b3c4d5e6f708192a3b" }
]
}

Every dependency in the export needs an entry; an unmapped ref_id is refused.

Response 201 Created (execution phase)

{
"data": {
"workflowId": "wf_new789",
"workflowName": "PII Redaction Pipeline",
"dependencies_resolved": 1,
"dependencies_total": 1
},
"meta": {
"requestId": "req_abc123"
}
}