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
| Parameter | Type | Required | Description |
|---|---|---|---|
id | string | Yes | Workflow ID to export |
Response 200 OK
Headers:
Content-Type: application/jsonContent-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:
- Validate -- call without
resolvedDepsto validate the export and receive a list of dependency candidates that need to be mapped to local resources. - Execute -- call again with
resolvedDepsto perform the import.
Scope: workflows:write
Request Body (validation phase)
{
"exportData": { /* the Export object: the `data` of the export file */ }
}
| Field | Type | Required | Description |
|---|---|---|---|
exportData | object | Yes | The Export object. It must have format: "strongly-workflow" and a workflow with name and nodes |
resolvedDeps | array | No | One { "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"
}
}