Skip to main content
POST
/
api
/
v1
/
runs
Create Run
curl --request POST \
  --url https://api.example.com/api/v1/runs \
  --header 'Authorization: Bearer <token>' \
  --header 'Content-Type: application/json' \
  --data '
{
  "version": 1,
  "cwd": "/tmp/project",
  "target": {
    "identifier": "smoke",
    "path": "fabro/workflows/smoke/workflow.fabro"
  },
  "workflows": {},
  "run_id": "01HV6D7S5YF4Z4B2M7K4N0Q6T9",
  "args": {
    "model": "<string>",
    "provider": "<string>",
    "sandbox": "<string>",
    "verbose": true,
    "dry_run": true,
    "auto_approve": true,
    "no_retro": true,
    "preserve_sandbox": true,
    "label": [
      "<string>"
    ]
  },
  "configs": [
    {
      "type": "project",
      "path": "<string>",
      "source": "<string>"
    }
  ]
}
'
{
  "id": "01JNQVR7M0EJ5GKAT2SC4ERS1Z",
  "status": "submitted",
  "created_at": "2026-03-06T14:30:00Z",
  "error": {
    "message": "Stage 'apply-changes' exceeded maximum retries."
  },
  "queue_position": 3,
  "status_reason": "completed",
  "pending_control": "cancel"
}

Authorizations

Authorization
string
header
required

JWT bearer token issued by fabro-web. See the Authentication guide for details.

Body

application/json

Self-contained workflow run manifest.

version
integer
required

Manifest schema version.

Example:

1

cwd
string
required

CLI working directory at invocation time.

Example:

"/tmp/project"

target
object
required
workflows
object
required
run_id
string | null

Optional pre-generated run ID to use instead of allocating a new ULID.

Example:

"01HV6D7S5YF4Z4B2M7K4N0Q6T9"

git
object

Observable git state from the CLI working directory.

goal
object

Resolved goal with provenance.

args
object

Sparse command-local args that affect run settings.

configs
object[]

Response

Run created

Current status of a run with optional error and queue position.

id
string
required

Unique run identifier (ULID).

Example:

"01JNQVR7M0EJ5GKAT2SC4ERS1Z"

status
enum<string>
required

Lifecycle status of a run.

Available options:
submitted,
queued,
starting,
running,
completed,
failed,
cancelled,
paused
created_at
string<date-time>
required

Timestamp when the run was created.

Example:

"2026-03-06T14:30:00Z"

error
object

Error information for a failed run.

queue_position
integer

Position in the queue (1-based). Only present when status is queued.

Example:

3

status_reason
enum<string>

Optional reason attached to a run status transition.

Available options:
completed,
partial_success,
workflow_error,
cancelled,
terminated,
transient_infra,
budget_exhausted,
launch_failed,
bootstrap_failed,
sandbox_init_failed,
sandbox_initializing
pending_control
enum<string>

Run control action requested by the API.

Available options:
cancel,
pause,
unpause