GET /v1/projects/{project}/workflows
List a project's custom workflows, each with its ordered steps.
curl -G https://serpon.ai/v1/projects/1/workflows \
-H "Authorization: Bearer $SERPON_TOKEN" \
-H "Accept: application/json" \
-d article_type=product_datasheet
const params = new URLSearchParams({ article_type: 'product_datasheet' });
const res = await fetch(`https://serpon.ai/v1/projects/1/workflows?${params}`, {
headers: {
Authorization: `Bearer ${process.env.SERPON_TOKEN}`,
Accept: 'application/json',
},
});
const { data, meta } = await res.json();
const steps = data[0]?.steps ?? [];
import os, requests
r = requests.get(
"https://serpon.ai/v1/projects/1/workflows",
params={"article_type": "product_datasheet"},
headers={
"Authorization": f"Bearer {os.environ['SERPON_TOKEN']}",
"Accept": "application/json",
},
)
payload = r.json()
{
"success": true,
"data": [
{
"id": 12,
"project_id": 1,
"name": "Product Datasheet",
"slug": "product_datasheet",
"description": "Spec-led datasheet pipeline",
"revision": 7,
"is_custom": true,
"steps": [
{
"id": 501,
"workflow_id": 12,
"project_id": 1,
"article_type": "product_datasheet",
"step_number": 1,
"step_name": "Research product details",
"step_description": "Compile specifications and use cases",
"step_icon": "search",
"system": "You are a technical writer specializing in product documentation.",
"user": "Research and compile detailed specifications for: {title}.",
"output_format": "json",
"timeout_seconds": 120,
"include_additional_context": true,
"include_additional_instruction": false,
"include_requirements": false,
"include_research": false,
"include_outline": false,
"json_schema": null,
"is_custom": true,
"is_redacted": false,
"created_at": "2026-07-14T09:00:00.000000Z",
"updated_at": "2026-07-14T09:00:00.000000Z"
}
],
"created_at": "2026-07-14T09:00:00.000000Z",
"updated_at": "2026-07-14T09:00:00.000000Z"
}
],
"meta": {
"current_page": 1,
"last_page": 1,
"per_page": 20,
"total": 1
}
}
{
"message": "This action is unauthorized."
}
List the custom workflows defined in a project, each with its steps nested.
GET https://serpon.ai/v1/projects/{project}/workflows
Workflows come back ordered by slug, and each one's steps are ordered by step number — the order they execute in. Only this project's custom workflows are returned; built-in workflows are never listed. See Custom workflows.
Authentication
Bearer token in the Authorization header. Requires view access to the project. See Authentication.
Path parameters
The project ID.
Query parameters
Restrict to the workflow with this slug — the usual way to fetch one pipeline in running order. Matches at most one workflow.
Workflows per page. Default 20. Steps are not paginated; every step of a returned workflow is included.
Page number, starting at 1.
Example
Response fields
Always true on 200.
Workflows, each with the fields below.
Workflow ID. Distinct from the step IDs under steps.
Owning project. null would indicate a built-in workflow, which this endpoint never returns.
Human-readable name, e.g. Product Datasheet.
The workflow's article type. Pass this value as article_type when creating an article.
Free-text note about what the pipeline produces.
Increments on every change to the workflow or any of its steps — create, update, delete, or reorder. Use it to detect that a pipeline changed underneath you.
true for project-scoped workflows — always the case here.
The workflow's steps in execution order. See Get workflow step for the full field reference.
Pagination over workflows: current_page, last_page, per_page, total.
Errors
| Status | When |
|---|---|
401 | Missing, invalid, or expired token |
402 | Account has no active subscription |
403 | No view access to the project |
404 | No such project |
429 | Rate limit exceeded |
A project with no custom workflows returns 200 with data: []. A workflow always has at least one step: deleting its last step deletes the workflow.
See Errors for the full reference.