Skip to content

List workflows

GET
/api/v1/workflows
curl -X GET 'https://api.justcrawl.io/api/v1/workflows?status=published' \
-H 'Authorization: Bearer $JUSTCRAWL_API_KEY'

Returns the latest version per logical workflow in the current org. Each item is enriched with costPerThousand (derived from the org’s vendor-cost table) and a smart block when the workflow has a smart-workflow config attached. When ?domain= is set without an explicit ?status=, the gateway defaults status=published so the response matches what resolveWorkflowForUrl actually picks at dispatch time — drafts inherited from version bumps are not the running workflow and would mislead UI consumers.

Use workflowId, not id, to address a workflow. Each item carries both, and they are different uuids — workflowId is the stable logical id every other workflow endpoint takes, while id is the primary key of the returned version row and is accepted nowhere. Passing id to GET /api/v1/workflows/{id} returns 404.

status
string
Allowed values: draft published

Filter workflows by status.

domain
string

Narrow to workflows routed to this domain (route=“domain:X” or default “*”); domain-specific routes sorted first.

An array of workflows (latest version each), enriched with cost + smart-workflow config.

Media typeapplication/json
Array<object>
object
id

Primary key of this specific VERSION row. Changes every time the workflow is edited, and is not accepted by any endpoint. Useful only for correlating a response with the exact version it came from — pass workflowId, not this, to /api/v1/workflows/{id}.

string format: uuid
workflowId

Stable logical identifier for the workflow, constant across every version. THIS is the value every /api/v1/workflows/{id} route expects (get, update, delete, clone, publish, unpublish, routing, versions) and the value jobs and schedules reference.

string format: uuid
name
string
status
string
Allowed values: draft published
version
integer
route
string
nullable
dag
object
nodes
required
Array<object>
object
id
required
string
type
required
string
Allowed values: entry service split result failed
config
object
edges
required
Array<object>
object
id
required
string
from
required
string
to
required
string
type
required
string
Allowed values: default success fail split
costPerThousand
number
nullable
smart
object
strategy
string
Allowed values: success cost reliability
mode
string
Allowed values: auto suggest
domain
string
nullable
hasPendingSuggestion
boolean
createdAt
string format: date-time
Example
[
{
"status": "draft",
"dag": {
"nodes": [
{
"type": "entry"
}
],
"edges": [
{
"type": "default"
}
]
},
"smart": {
"strategy": "success",
"mode": "auto"
}
}
]

Validation failed — request body or query is missing/invalid

Media typeapplication/json
object
error
string
Example
{
"error": "Missing or invalid \"url\" field"
}

Missing or invalid authentication token

Media typeapplication/json
object
error
string
Example
{
"error": "Missing or invalid authentication token"
}

Insufficient permissions for this operation

Media typeapplication/json
object
error
string
Example
{
"error": "No organization. Complete onboarding first."
}

Unexpected server error. Logs and PostHog $exception capture

Media typeapplication/json
object
error
string
Example
{
"error": "Something went wrong"
}