Automation
Current release · Updated October 2, 2026
DryKraft automation API: methods, permissions, request fields, response shapes, examples and current limits. Read authentication and error handling first.
/api/automation/workflowsList general workflows
Access: Workspace member · Success: 200
Managed outreach workflows are excluded. Returns execution counts.
No request body is required.
Response
Workflow[].
curl --request GET \
--url 'https://app.drykraft.com/api/automation/workflows' \
--cookie 'drykraft_session=<YOUR_SESSION_TOKEN>'/api/automation/workflowsCreate workflow draft
Access: Owner, admin or member · Success: 201
Starts with a manual trigger.
JSON request
| Field | Type | Required | Details |
|---|---|---|---|
name | string | Yes | Name Max 100 characters. |
description | string | No | Default empty Max 1000 characters. |
Response
Use Workflow.
curl --request POST \
--url 'https://app.drykraft.com/api/automation/workflows' \
--cookie 'drykraft_session=<YOUR_SESSION_TOKEN>' \
--header 'Content-Type: application/json' \
--data '{
"name": "<Name>"
}'/api/automation/workflows/{id}Save workflow draft
Access: Owner, admin or member · Success: 200
Draft shape validated here; publish performs graph validation. Managed outreach workflows cannot be changed here.
JSON request
| Field | Type | Required | Details |
|---|---|---|---|
name | string | Yes | Name Max 100 characters. |
description | string | No | Default empty Max 1000 characters. |
draft | Graph | Yes |
Response
Use Workflow.
curl --request PUT \
--url 'https://app.drykraft.com/api/automation/workflows/00000000-0000-4000-8000-000000000001' \
--cookie 'drykraft_session=<YOUR_SESSION_TOKEN>' \
--header 'Content-Type: application/json' \
--data '{
"name": "<Name>",
"draft": {
"nodes": [
{
"id": "<Unique nonempty node ID>",
"type": "workflow",
"position": {
"x": 1,
"y": 1
},
"data": {
"kind": "trigger.manual",
"label": "<Nonempty node label>"
}
}
],
"edges": []
}
}'/api/automation/workflows/{id}/publishPublish immutable version
Access: Owner or admin · Success: 200
Exactly one trigger, unique nodes, connected acyclic graph. Only condition branches, unique true/false handles. Activates workflow; future runs use this version.
No request body is required.
Response
object. id, workflow_id, version, graph, created_at
curl --request POST \
--url 'https://app.drykraft.com/api/automation/workflows/00000000-0000-4000-8000-000000000001/publish' \
--cookie 'drykraft_session=<YOUR_SESSION_TOKEN>'/api/automation/workflows/{id}/statusActivate or pause workflow
Access: Owner or admin · Success: 200
Must already be published.
JSON request
| Field | Type | Required | Details |
|---|---|---|---|
status | active | paused | Yes | Workflow status |
Response
Use Workflow.
curl --request POST \
--url 'https://app.drykraft.com/api/automation/workflows/00000000-0000-4000-8000-000000000001/status' \
--cookie 'drykraft_session=<YOUR_SESSION_TOKEN>' \
--header 'Content-Type: application/json' \
--data '{
"status": "active"
}'/api/automation/workflows/{id}/versionsRead published versions
Access: Workspace member · Success: 200
Latest version first.
No request body is required.
Response
object[]. id, workflow_id, version, graph, created_at
curl --request GET \
--url 'https://app.drykraft.com/api/automation/workflows/00000000-0000-4000-8000-000000000001/versions' \
--cookie 'drykraft_session=<YOUR_SESSION_TOKEN>'/api/automation/workflows/{id}/webhookRead workflow hook URL
Access: Owner or admin · Success: 200
URL is a secret capability; null before creation. Never expose in public docs/logs.
No request body is required.
Response
| Field | Type | Required | Details |
|---|---|---|---|
url | string or null | No |
curl --request GET \
--url 'https://app.drykraft.com/api/automation/workflows/00000000-0000-4000-8000-000000000001/webhook' \
--cookie 'drykraft_session=<YOUR_SESSION_TOKEN>'/api/automation/workflows/{id}/webhookCreate or rotate hook URL
Access: Owner or admin · Success: 200
Old token immediately stops working. Publish an active webhook trigger before receiving runs.
No request body is required.
Response
| Field | Type | Required | Details |
|---|---|---|---|
url | uri | No |
curl --request POST \
--url 'https://app.drykraft.com/api/automation/workflows/00000000-0000-4000-8000-000000000001/webhook' \
--cookie 'drykraft_session=<YOUR_SESSION_TOKEN>'/api/automation/workflows/{id}/runRun published version
Access: Owner, admin or member · Success: 202
Returns an accepted execution; inspect history for outcome. Published version required. Worker enforces billing access.
JSON request
| Field | Type | Required | Details |
|---|---|---|---|
input | object | No | Object field values. Only keys in the workspace object definition are allowed; required fields and field types are validated. |
Response
Use Execution.
curl --request POST \
--url 'https://app.drykraft.com/api/automation/workflows/00000000-0000-4000-8000-000000000001/run' \
--cookie 'drykraft_session=<YOUR_SESSION_TOKEN>' \
--header 'Content-Type: application/json' \
--data '{}'/api/automation/executionsList recent executions
Access: Workspace member · Success: 200
Latest 100, with workflow_name.
No request body is required.
Response
Execution[].
curl --request GET \
--url 'https://app.drykraft.com/api/automation/executions' \
--cookie 'drykraft_session=<YOUR_SESSION_TOKEN>'/api/automation/executions/{id}Inspect execution
Access: Workspace member · Success: 200
Includes ordered node execution attempts and their input/output/error/timestamps.
No request body is required.
Response
Use Execution.
| Field | Type | Required | Details |
|---|---|---|---|
nodes | object[] | No |
curl --request GET \
--url 'https://app.drykraft.com/api/automation/executions/00000000-0000-4000-8000-000000000001' \
--cookie 'drykraft_session=<YOUR_SESSION_TOKEN>'/api/automation/executions/{id}/cancelCancel unfinished execution
Access: Owner, admin or member · Success: 200
Queued/running/waiting/retrying only. Cannot recall an external side effect already accepted.
No request body is required.
Response
Use Execution.
curl --request POST \
--url 'https://app.drykraft.com/api/automation/executions/00000000-0000-4000-8000-000000000001/cancel' \
--cookie 'drykraft_session=<YOUR_SESSION_TOKEN>'/api/automation/executions/{id}/retryRetry failed execution
Access: Owner, admin or member · Success: 200
Only failed executions. Review external side effects before retrying. Outreach reservations prevent automatic ambiguous resend.
No request body is required.
Response
Use Execution.
curl --request POST \
--url 'https://app.drykraft.com/api/automation/executions/00000000-0000-4000-8000-000000000001/retry' \
--cookie 'drykraft_session=<YOUR_SESSION_TOKEN>'/api/automation/credentialsList HTTP credentials
Access: Owner or admin · Success: 200
Only id, name, provider and created_at are returned; value remains private.
No request body is required.
Response
object[]. id, name, provider, created_at
curl --request GET \
--url 'https://app.drykraft.com/api/automation/credentials' \
--cookie 'drykraft_session=<YOUR_SESSION_TOKEN>'/api/automation/credentialsSave HTTP credential
Access: Owner or admin · Success: 201
Encrypted per workspace; header is required when provider=header.
JSON request
| Field | Type | Required | Details |
|---|---|---|---|
name | string | Yes | Name Max 100 characters. |
provider | bearer | basic | header | Yes | Outbound HTTP authorization, not DryKraft API authentication |
value | string | Yes | Private value Max 5000 characters. |
header | string | No | Pattern: ^[a-zA-Z0-9-]+$. |
Response
object. id, name, provider, created_at
curl --request POST \
--url 'https://app.drykraft.com/api/automation/credentials' \
--cookie 'drykraft_session=<YOUR_SESSION_TOKEN>' \
--header 'Content-Type: application/json' \
--data '{
"name": "<Name>",
"provider": "bearer",
"value": "<Private value>"
}'/api/automation/credentials/{id}Delete HTTP credential
Access: Owner or admin · Success: 200
Existing workflows using it will need another credential.
No request body is required.
Response
Use OK.
curl --request DELETE \
--url 'https://app.drykraft.com/api/automation/credentials/00000000-0000-4000-8000-000000000001' \
--cookie 'drykraft_session=<YOUR_SESSION_TOKEN>'