Replace a workflow definition
curl --request PUT \
--url https://app.hookie.ai/admin/api/projects/{project_id}/workflows/{workflow_id} \
--header 'Content-Type: application/json' \
--cookie hookie_session= \
--data '
{
"name": "<string>",
"entry_dataset": "<string>",
"steps": [
{}
],
"slug": "<string>",
"active": true,
"entry_conditions": []
}
'const options = {
method: 'PUT',
headers: {cookie: 'hookie_session=', 'Content-Type': 'application/json'},
body: JSON.stringify({
name: '<string>',
entry_dataset: '<string>',
steps: [{}],
slug: '<string>',
active: true,
entry_conditions: []
})
};
fetch('https://app.hookie.ai/admin/api/projects/{project_id}/workflows/{workflow_id}', options)
.then(res => res.json())
.then(res => console.log(res))
.catch(err => console.error(err));import requests
url = "https://app.hookie.ai/admin/api/projects/{project_id}/workflows/{workflow_id}"
payload = {
"name": "<string>",
"entry_dataset": "<string>",
"steps": [{}],
"slug": "<string>",
"active": True,
"entry_conditions": []
}
headers = {
"cookie": "hookie_session=",
"Content-Type": "application/json"
}
response = requests.put(url, json=payload, headers=headers)
print(response.text){
"ok": true
}{
"error": "<string>",
"retry_after": 123,
"upgrade_url": "<string>"
}{
"error": "<string>",
"retry_after": 123,
"upgrade_url": "<string>"
}{
"error": "<string>",
"retry_after": 123,
"upgrade_url": "<string>"
}{
"error": "<string>",
"retry_after": 123,
"upgrade_url": "<string>"
}{
"error": "<string>",
"retry_after": 123,
"upgrade_url": "<string>"
}Workflows
Replace a workflow definition
PUT
/
admin
/
api
/
projects
/
{project_id}
/
workflows
/
{workflow_id}
Replace a workflow definition
curl --request PUT \
--url https://app.hookie.ai/admin/api/projects/{project_id}/workflows/{workflow_id} \
--header 'Content-Type: application/json' \
--cookie hookie_session= \
--data '
{
"name": "<string>",
"entry_dataset": "<string>",
"steps": [
{}
],
"slug": "<string>",
"active": true,
"entry_conditions": []
}
'const options = {
method: 'PUT',
headers: {cookie: 'hookie_session=', 'Content-Type': 'application/json'},
body: JSON.stringify({
name: '<string>',
entry_dataset: '<string>',
steps: [{}],
slug: '<string>',
active: true,
entry_conditions: []
})
};
fetch('https://app.hookie.ai/admin/api/projects/{project_id}/workflows/{workflow_id}', options)
.then(res => res.json())
.then(res => console.log(res))
.catch(err => console.error(err));import requests
url = "https://app.hookie.ai/admin/api/projects/{project_id}/workflows/{workflow_id}"
payload = {
"name": "<string>",
"entry_dataset": "<string>",
"steps": [{}],
"slug": "<string>",
"active": True,
"entry_conditions": []
}
headers = {
"cookie": "hookie_session=",
"Content-Type": "application/json"
}
response = requests.put(url, json=payload, headers=headers)
print(response.text){
"ok": true
}{
"error": "<string>",
"retry_after": 123,
"upgrade_url": "<string>"
}{
"error": "<string>",
"retry_after": 123,
"upgrade_url": "<string>"
}{
"error": "<string>",
"retry_after": 123,
"upgrade_url": "<string>"
}{
"error": "<string>",
"retry_after": 123,
"upgrade_url": "<string>"
}{
"error": "<string>",
"retry_after": 123,
"upgrade_url": "<string>"
}Authorizations
sessionbearerAuth
The console's sealed session cookie, set by WorkOS AuthKit. Mutating requests also require the X-Requested-With CSRF header.
Body
application/json
Identical to the create body and validated by the same validateWorkflowSpec — this is a FULL REPLACE, not a merge: every omitted field reverts to its default (e.g. omitting active re-activates, omitting entry_conditions clears them). PATCH is accepted on this path and behaves identically. version is incremented server-side; it cannot be set.
Required string length:
1 - 120Pattern:
^[a-zA-Z][a-zA-Z0-9_]{0,62}$Same six step types and same limits as createWorkflow (<= 32 steps including branch sub-steps; branch depth <= 3; no delay/wait_for_event inside a branch).
Minimum array length:
1Show child attributes
Show child attributes
Response
Replaced; version incremented.
Available options:
true