Skip to content
Select themeSelect language

get_api_projects_id_automations

GET
/api/projects/{id}/automations
curl --request GET \
--url https://example.com/api/projects/2489E9AD-2EE2-8E00-8EC9-32D5F69181C0/automations \
--cookie supacloud_session=<supacloud_session>
id
required
string format: uuid

Project id

Effective automations for the project

Media typeapplication/json
object
automations
required
Array<object>

ADR 0045 Stage 1b — the consolidated automation READ surface: the EFFECTIVE automation row for every kind (the new project_automations row when present, else the legacy-derived view), so the project-edit Automation section renders one uniform shape. webhook_secret is #[serde(skip_serializing)] on the model, so the response never leaks a secret. Spec-only projection of one effective project_automations row — the fields the ProjectAutomation model serializes (it omits webhook_secret, which is #[serde(skip_serializing)]). ProjectAutomation is a persistence model owned by another vertical without a ToSchema derive, so this mirrors its wire shape for the OpenAPI spec while the field keeps serializing the full model at runtime.

object
agent_profile_id
string | null format: uuid
autonomy_override
integer | null format: int32
candidate_profile_ids

#534 WS-2 — the backlog arm’s multi-agent work-lane candidate pool.

Array<string> | null
close_source_issue
boolean | null
completion_action
required

#538 L12 — close | comment | nothing (the legacy 3-way action; #708 C1 superseded it with the two booleans below, kept as the dual-read fallback).

string
created_at
required
string format: date-time
denied_tools
required
Array<string>
enabled
required
boolean
environment_scope
required
string
id
required
string format: uuid
kind
required

pr_review | tracker | backlog | debate.

string
pipeline_config
required

#538 feinschliff — the dev-pipeline knobs blob (return_to_sender / convergence_level / max_rounds / max_cost_usd / per-stage overrides).

object
convergence_level

Batch 4 — the ITEM-severity threshold that gates loop ENTRY: a failed audit only re-dispatches when the ITEM’s classified severity is AT OR ABOVE this level (an item below it is not worth the budget and stays blocked). The loop does NOT inspect any audit FINDING severity — see [Self::convergence_decision]. None = no severity gate (the loop runs for every item severity, bounded only by max_rounds / max_cost_usd).

string | null
judge_threshold

#705 2.4d — the arm’s machine-judge pass threshold (0–100) FALLBACK for the visual-verify gate. This is the ARM tier of the per-FIELD first-non-null resolution: the per-profile judge_threshold wins, this arm value is the fallback consulted only when the profile authored none. None ⇒ no arm bar (a bare machine PASS releases unless the profile sets one).

integer | null format: int32
max_cost_usd

Batch 4 — the operator-bounded $ ceiling across the loop. None falls back to the arm’s daily budget / engine default.

number | null format: double
max_rounds

Batch 4 — the operator-bounded ceiling on self-improvement rounds. None falls back to the engine default. The EFFECTIVE ceiling is floored at 1 when the loop is on (see [Self::convergence_decision]), so max_rounds = 0 still allows the single baseline escalation rather than being strictly weaker than leaving the loop off.

integer | null format: int32
return_to_sender

Batch 4 — when true and Review is enabled, a failing audit RE-DISPATCHES the implement stage (the self-improvement loop) instead of routing straight to blocked, until the audit converges or a ceiling is hit.

boolean
stages
One of:
null
vision_judge_model

#708 B5 — the arm’s vision judge model for the visual-verify gate. Since #708 X2a this is the SOLE source (the legacy projects.backlog_vision_judge_model column was dropped, migration 297); None ⇒ no judge-model override.

#705 2.4d — this is the ARM tier of the per-FIELD first-non-null visual resolution: the per-profile vision_judge_model wins, this arm value is the FALLBACK.

string | null
visual_verify

#708 B5 — the arm’s visual-verify mode (off | machine | ...). Since #708 X2a (Phase 8) this is the SOLE source — the legacy projects.backlog_visual_verify fallback column was dropped (migration 297); None/empty ⇒ off.

string | null
post_completion_comment

#708 C1 — the two ADDITIVE completion booleans (mig 295): post the closing comment × close/transition the source issue. null on a not-yet-backfilled row (the FE decodes completion_action as the fallback). Together they express the previously-inexpressible “silent close” (close WITHOUT a comment).

boolean | null
project_id
required
string format: uuid
review_enabled
required

#538 feinschliff — the Review (audit) toggle.

boolean
severity_min
string | null
source_filter
required

The backlog dispatch/classifier blob (source_filter) — an open map.

object
key
additional properties
trigger
required

webhook | schedule | manual.

string
updated_at
required
string format: date-time
workflow_id
string | null format: uuid
workspace_id
required
string format: uuid
issue_listing_credential_present
required

#708 Rev 2.4g (B1.5 credential precondition) — is an issue-LISTING credential configured for this project’s issue source (tracker OAuth, else a git access token)? false means an armed Issues-intake/backlog automation would scan nothing; the automation UI renders a “connect a credential” precondition warning on the intake row. Fail-soft true on a transient lookup error (never a spurious warning). Independent of whether any arm is currently enabled — the FE gates the warning on the intake toggle.

boolean
Example
{
"automations": [
{
"pipeline_config": {
"convergence_level": null,
"judge_threshold": null,
"max_cost_usd": null,
"max_rounds": null,
"return_to_sender": false,
"stages": null,
"vision_judge_model": null,
"visual_verify": null
}
}
]
}

Authentication required

Media typeapplication/json

The canonical JSON body of every error response — the single source of truth the frontend binds to. Every AppError serializes as this exact shape, and the generated OpenAPI component ApiErrorBody (with its ErrorCode enum) is what the frontend error schema is generated from, so there is no hand-written error schema on either end.

object
code
required

Machine-readable, stable error code.

string
Allowed values: not_found unauthorized forbidden bad_request unprocessable precondition_failed conflict method_not_allowed rate_limited quota_exceeded database_error docker_error vault_error internal_error
details
One of:
null
error
required

Human-readable message (the server’s English text; the client may localize by code).

string
Example
{
"code": "not_found"
}

Project not found

Media typeapplication/json

The canonical JSON body of every error response — the single source of truth the frontend binds to. Every AppError serializes as this exact shape, and the generated OpenAPI component ApiErrorBody (with its ErrorCode enum) is what the frontend error schema is generated from, so there is no hand-written error schema on either end.

object
code
required

Machine-readable, stable error code.

string
Allowed values: not_found unauthorized forbidden bad_request unprocessable precondition_failed conflict method_not_allowed rate_limited quota_exceeded database_error docker_error vault_error internal_error
details
One of:
null
error
required

Human-readable message (the server’s English text; the client may localize by code).

string
Example
{
"code": "not_found"
}

Structured server error

Media typeapplication/json

The canonical JSON body of every error response — the single source of truth the frontend binds to. Every AppError serializes as this exact shape, and the generated OpenAPI component ApiErrorBody (with its ErrorCode enum) is what the frontend error schema is generated from, so there is no hand-written error schema on either end.

object
code
required

Machine-readable, stable error code.

string
Allowed values: not_found unauthorized forbidden bad_request unprocessable precondition_failed conflict method_not_allowed rate_limited quota_exceeded database_error docker_error vault_error internal_error
details
One of:
null
error
required

Human-readable message (the server’s English text; the client may localize by code).

string
Example
{
"code": "not_found"
}