GET /v1/projects/{project}/workflows/{workflow}
Retrieve a single custom workflow step, including its prompts.
curl https://serpon.ai/v1/projects/1/workflows/501 \
-H "Authorization: Bearer $SERPON_TOKEN" \
-H "Accept: application/json"
const res = await fetch('https://serpon.ai/v1/projects/1/workflows/501', {
headers: {
Authorization: `Bearer ${process.env.SERPON_TOKEN}`,
Accept: 'application/json',
},
});
const { data } = await res.json();
import os, requests
r = requests.get(
"https://serpon.ai/v1/projects/1/workflows/501",
headers={
"Authorization": f"Bearer {os.environ['SERPON_TOKEN']}",
"Accept": "application/json",
},
)
data = r.json()["data"]
{
"success": true,
"data": {
"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"
}
}
{
"message": "Workflow not found for this project."
}
Retrieve one workflow step.
GET https://serpon.ai/v1/projects/{project}/workflows/{workflow}
The step must belong to the project in the path. A step that exists elsewhere returns 404.
Authentication
Bearer token in the Authorization header. Requires view access to the project. See Authentication.
Path parameters
The project ID.
The workflow step ID.
Example
Response fields
Step ID, used on update, delete, and reorder.
The workflow this step belongs to. Steps are ordered and made unique within this workflow.
Owning project, taken from the parent workflow. null would indicate a built-in workflow, which these endpoints never return.
The owning workflow's slug. Pass this value as article_type when creating an article.
Execution position. Unique within the owning workflow. Numbers need not be contiguous.
Display name; appears as current_step on articles while the step runs.
Free-text note about the step.
Icon name used in the dashboard.
System prompt.
User prompt, including any {template} variables.
text, json, or markdown.
Per-step time budget, 30–600.
Whether {additional_context} is injected.
Whether {additional_instruction} is injected.
Whether {requirements} — word count, tone, point of view — is injected.
Whether {research} is injected. At least one step needs this before articles of this type can enable research.
Whether {outline} is injected.
Structured-output schema for output_format: "json".
true for project-scoped steps — always the case here.
true when prompts have been withheld because the step belongs to a built-in workflow. Always false on these endpoints.
ISO 8601 timestamp.
ISO 8601 timestamp.
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 step, or it belongs to another project |
429 | Rate limit exceeded |
See Errors for the full reference.