docs/documentation/api/metadata.md
The Metadata API manages workflow and task definitions — the blueprints that Conductor uses to orchestrate executions. All endpoints use the base path /api/metadata.
| Endpoint | Method | Description |
|---|---|---|
/metadata/workflow | GET | Get all workflow definitions |
/metadata/workflow | POST | Create a new workflow definition |
/metadata/workflow | PUT | Create or update workflow definitions (batch) |
/metadata/workflow/{name} | GET | Get a workflow definition by name |
/metadata/workflow/{name}/{version} | DELETE | Delete a workflow definition by name and version |
/metadata/workflow/validate | POST | Validate a workflow definition without saving |
/metadata/workflow/names-and-versions | GET | Get all workflow names and versions (no definition bodies) |
/metadata/workflow/latest-versions | GET | Get only the latest version of each workflow definition |
GET /api/metadata/workflow
Returns a list of all registered workflow definitions.
curl http://localhost:8080/api/metadata/workflow
Response 200 OK
[
{
"name": "order_processing",
"version": 1,
"tasks": [...],
"inputParameters": [],
"outputParameters": {},
"schemaVersion": 2
}
]
POST /api/metadata/workflow
Registers a new workflow definition. Request body is a Workflow Definition.
curl -X POST 'http://localhost:8080/api/metadata/workflow' \
-H 'Content-Type: application/json' \
-d '{
"name": "my_workflow",
"version": 1,
"tasks": [
{
"name": "my_task",
"taskReferenceName": "my_task_ref",
"type": "SIMPLE"
}
],
"schemaVersion": 2,
"ownerEmail": "[email protected]"
}'
Response 200 OK — no response body.
PUT /api/metadata/workflow
Creates or updates workflow definitions in bulk. Request body is a list of Workflow Definitions. Returns a BulkResponse indicating success and failure for each definition.
curl -X PUT 'http://localhost:8080/api/metadata/workflow' \
-H 'Content-Type: application/json' \
-d '[
{"name": "workflow_a", "version": 1, "tasks": [...], "schemaVersion": 2},
{"name": "workflow_b", "version": 1, "tasks": [...], "schemaVersion": 2}
]'
Response 200 OK
{
"bulkSuccessfulResults": ["workflow_a", "workflow_b"],
"bulkErrorResults": {}
}
GET /api/metadata/workflow/{name}?version={version}
| Parameter | Description | Required |
|---|---|---|
name | Workflow name | Yes (path) |
version | Workflow version | No (defaults to latest) |
curl 'http://localhost:8080/api/metadata/workflow/my_workflow?version=1'
Response 200 OK — returns the full workflow definition JSON.
DELETE /api/metadata/workflow/{name}/{version}
Removes a workflow definition by name and version. Does not remove workflow executions associated with the definition.
| Parameter | Description | Required |
|---|---|---|
name | Workflow name | Yes (path) |
version | Workflow version | Yes (path) |
curl -X DELETE 'http://localhost:8080/api/metadata/workflow/my_workflow/1'
Response 200 OK — no response body.
POST /api/metadata/workflow/validate
Validates a workflow definition without registering it. Useful for CI/CD pipelines or pre-deployment checks.
curl -X POST 'http://localhost:8080/api/metadata/workflow/validate' \
-H 'Content-Type: application/json' \
-d '{
"name": "my_workflow",
"version": 1,
"tasks": [
{
"name": "my_task",
"taskReferenceName": "my_task_ref",
"type": "SIMPLE"
}
],
"schemaVersion": 2
}'
Response 200 OK if valid. 400 Bad Request with error details if invalid.
GET /api/metadata/workflow/names-and-versions
Returns a lightweight map of workflow names to their available versions (no definition bodies). Useful for building UIs or listing available workflows.
curl http://localhost:8080/api/metadata/workflow/names-and-versions
Response 200 OK
{
"order_processing": [
{"name": "order_processing", "version": 1},
{"name": "order_processing", "version": 2}
],
"user_onboarding": [
{"name": "user_onboarding", "version": 1}
]
}
GET /api/metadata/workflow/latest-versions
Returns only the latest version of each workflow definition.
curl http://localhost:8080/api/metadata/workflow/latest-versions
Response 200 OK — returns a list of workflow definitions (one per workflow name, latest version only).
| Endpoint | Method | Description |
|---|---|---|
/metadata/taskdefs | GET | Get all task definitions |
/metadata/taskdefs | POST | Create new task definitions |
/metadata/taskdefs | PUT | Update a task definition |
/metadata/taskdefs/{taskType} | GET | Get a task definition by name |
/metadata/taskdefs/{taskType} | DELETE | Delete a task definition |
GET /api/metadata/taskdefs
curl http://localhost:8080/api/metadata/taskdefs
Response 200 OK
[
{
"name": "my_task",
"retryCount": 3,
"retryLogic": "FIXED",
"retryDelaySeconds": 10,
"timeoutSeconds": 300,
"timeoutPolicy": "TIME_OUT_WF",
"responseTimeoutSeconds": 180
}
]
POST /api/metadata/taskdefs
Registers new task definitions. Request body is a list of Task Definitions.
curl -X POST 'http://localhost:8080/api/metadata/taskdefs' \
-H 'Content-Type: application/json' \
-d '[
{
"name": "my_task",
"retryCount": 3,
"retryLogic": "FIXED",
"retryDelaySeconds": 10,
"timeoutSeconds": 300,
"timeoutPolicy": "TIME_OUT_WF",
"responseTimeoutSeconds": 180,
"ownerEmail": "[email protected]"
}
]'
Response 200 OK — no response body.
PUT /api/metadata/taskdefs
Updates an existing task definition. Request body is a single Task Definition.
curl -X PUT 'http://localhost:8080/api/metadata/taskdefs' \
-H 'Content-Type: application/json' \
-d '{
"name": "my_task",
"retryCount": 5,
"retryLogic": "EXPONENTIAL_BACKOFF",
"retryDelaySeconds": 5,
"timeoutSeconds": 600,
"timeoutPolicy": "TIME_OUT_WF",
"responseTimeoutSeconds": 300
}'
Response 200 OK — no response body.
GET /api/metadata/taskdefs/{taskType}
curl http://localhost:8080/api/metadata/taskdefs/my_task
Response 200 OK — returns the task definition JSON.
DELETE /api/metadata/taskdefs/{taskType}
curl -X DELETE http://localhost:8080/api/metadata/taskdefs/my_task
Response 200 OK — no response body.