get_api_projects_id_automations
const url = 'https://example.com/api/projects/2489E9AD-2EE2-8E00-8EC9-32D5F69181C0/automations';const options = {method: 'GET', headers: {cookie: 'supacloud_session=<supacloud_session>'}};
try { const response = await fetch(url, options); const data = await response.json(); console.log(data);} catch (error) { console.error(error);}curl --request GET \ --url https://example.com/api/projects/2489E9AD-2EE2-8E00-8EC9-32D5F69181C0/automations \ --cookie supacloud_session=<supacloud_session>Authorizations
Section titled “Authorizations”Parameters
Section titled “Parameters”Path Parameters
Section titled “Path Parameters”Project id
Responses
Section titled “Responses”Effective automations for the project
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
#534 WS-2 — the backlog arm’s multi-agent work-lane candidate pool.
#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).
pr_review | tracker | backlog | debate.
#538 feinschliff — the dev-pipeline knobs blob (return_to_sender / convergence_level / max_rounds / max_cost_usd / per-stage overrides).
object
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).
#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).
Batch 4 — the operator-bounded $ ceiling across the loop. None falls back
to the arm’s daily budget / engine default.
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.
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.
Batch 3 — the per-stage harness / model / effort overrides. None (absent
in the partial JSONB) = no per-stage overrides.
object
One stage’s optional auto-agent overrides. An absent / empty field means “no override” — the materialized node keeps the template’s project-default harness and the profile / runner default model + effort.
object
#708 stage_affinity — the agent PROFILE (a agent_profiles.id UUID string) to
run this stage under. Pins WHO per stage (e.g. a backend-expert implement +
a reviewer review) instead of the pipeline-wide routed_profile_id. Stamped
onto the stage node’s config.agent_profile_id, which wins over the run’s
trigger-context profile fill. Membership-validated against the workspace on save.
#708 Rev 2.3/2.4a — the PLAN-stage APPROVAL flag: stop for a human approve_plan
before implement. Meaningful on stages.plan (implies enabled). Maps from the legacy
approval_mode='concept'.
#708 B1 (K1) — the COUNCIL flag: run this stage as a multi-agent COUNCIL (several
candidate agents propose, a judge synthesizes) instead of a single agent. Stamped
onto the stage node’s config (the COUNCIL_CONFIG_KEY); the run-time invocation
(B2) reads it. Meaningful on the deliberative stages (draft/plan + review) and the
PR-review arm; rejected on implement (validated on save). None/false = a
single-agent stage (the default).
#708 Rev 2.3/2.4a — the IMPLEMENT-stage DRAFT-PR-APPROVAL flag: the PR is opened as a
draft and a human draft_review node stops after implement. Meaningful on
stages.implement. Maps from the legacy approval_mode='pr_draft' /
auto_developer_draft_first. Orthogonal to (combinable with) the plan gate — both on =
stop at the concept AND see the draft PR (the additive-gate new capability).
The reasoning effort (minimal | low | medium | high | max) for this stage.
#708 Rev 2.3/2.4a — the PLAN-stage RUN flag: run the plan/concept round at all.
Meaningful on stages.plan. approval implies enabled (a stop needs a round);
enabled without approval is “plan-then-go” (a plan round runs but never stops for a
human). The K2 legacy approval_mode='concept' maps to enabled + approval.
The harness (agent_type, e.g. claude / codex) to run this stage with.
Axis 2 (mig 272) — the harness-native MODE (build | plan) to run this stage
with. The DRAFT stage DEFAULTS to plan (overridable per arm) on harnesses that
expose a native plan-mode; implement defaults to build, review keeps the default.
DECOUPLED from execution_mode/effort — both can be set on a stage node.
The model id to run this stage with.
The plan/concept stage (the deliberative first round). #708 Rev 2.4a renamed the JSON
key draft → plan (the canonical stage vocabulary plan|implement|review); the
#[serde(alias = "draft")] keeps stored pipeline_config blobs written under the old
key deserializing losslessly (K2 dual-read — pipeline_config is only ever read, never
re-serialized back into the column, so no data migration is required for the rename).
object
#708 stage_affinity — the agent PROFILE (a agent_profiles.id UUID string) to
run this stage under. Pins WHO per stage (e.g. a backend-expert implement +
a reviewer review) instead of the pipeline-wide routed_profile_id. Stamped
onto the stage node’s config.agent_profile_id, which wins over the run’s
trigger-context profile fill. Membership-validated against the workspace on save.
#708 Rev 2.3/2.4a — the PLAN-stage APPROVAL flag: stop for a human approve_plan
before implement. Meaningful on stages.plan (implies enabled). Maps from the legacy
approval_mode='concept'.
#708 B1 (K1) — the COUNCIL flag: run this stage as a multi-agent COUNCIL (several
candidate agents propose, a judge synthesizes) instead of a single agent. Stamped
onto the stage node’s config (the COUNCIL_CONFIG_KEY); the run-time invocation
(B2) reads it. Meaningful on the deliberative stages (draft/plan + review) and the
PR-review arm; rejected on implement (validated on save). None/false = a
single-agent stage (the default).
#708 Rev 2.3/2.4a — the IMPLEMENT-stage DRAFT-PR-APPROVAL flag: the PR is opened as a
draft and a human draft_review node stops after implement. Meaningful on
stages.implement. Maps from the legacy approval_mode='pr_draft' /
auto_developer_draft_first. Orthogonal to (combinable with) the plan gate — both on =
stop at the concept AND see the draft PR (the additive-gate new capability).
The reasoning effort (minimal | low | medium | high | max) for this stage.
#708 Rev 2.3/2.4a — the PLAN-stage RUN flag: run the plan/concept round at all.
Meaningful on stages.plan. approval implies enabled (a stop needs a round);
enabled without approval is “plan-then-go” (a plan round runs but never stops for a
human). The K2 legacy approval_mode='concept' maps to enabled + approval.
The harness (agent_type, e.g. claude / codex) to run this stage with.
Axis 2 (mig 272) — the harness-native MODE (build | plan) to run this stage
with. The DRAFT stage DEFAULTS to plan (overridable per arm) on harnesses that
expose a native plan-mode; implement defaults to build, review keeps the default.
DECOUPLED from execution_mode/effort — both can be set on a stage node.
The model id to run this stage with.
One stage’s optional auto-agent overrides. An absent / empty field means “no override” — the materialized node keeps the template’s project-default harness and the profile / runner default model + effort.
object
#708 stage_affinity — the agent PROFILE (a agent_profiles.id UUID string) to
run this stage under. Pins WHO per stage (e.g. a backend-expert implement +
a reviewer review) instead of the pipeline-wide routed_profile_id. Stamped
onto the stage node’s config.agent_profile_id, which wins over the run’s
trigger-context profile fill. Membership-validated against the workspace on save.
#708 Rev 2.3/2.4a — the PLAN-stage APPROVAL flag: stop for a human approve_plan
before implement. Meaningful on stages.plan (implies enabled). Maps from the legacy
approval_mode='concept'.
#708 B1 (K1) — the COUNCIL flag: run this stage as a multi-agent COUNCIL (several
candidate agents propose, a judge synthesizes) instead of a single agent. Stamped
onto the stage node’s config (the COUNCIL_CONFIG_KEY); the run-time invocation
(B2) reads it. Meaningful on the deliberative stages (draft/plan + review) and the
PR-review arm; rejected on implement (validated on save). None/false = a
single-agent stage (the default).
#708 Rev 2.3/2.4a — the IMPLEMENT-stage DRAFT-PR-APPROVAL flag: the PR is opened as a
draft and a human draft_review node stops after implement. Meaningful on
stages.implement. Maps from the legacy approval_mode='pr_draft' /
auto_developer_draft_first. Orthogonal to (combinable with) the plan gate — both on =
stop at the concept AND see the draft PR (the additive-gate new capability).
The reasoning effort (minimal | low | medium | high | max) for this stage.
#708 Rev 2.3/2.4a — the PLAN-stage RUN flag: run the plan/concept round at all.
Meaningful on stages.plan. approval implies enabled (a stop needs a round);
enabled without approval is “plan-then-go” (a plan round runs but never stops for a
human). The K2 legacy approval_mode='concept' maps to enabled + approval.
The harness (agent_type, e.g. claude / codex) to run this stage with.
Axis 2 (mig 272) — the harness-native MODE (build | plan) to run this stage
with. The DRAFT stage DEFAULTS to plan (overridable per arm) on harnesses that
expose a native plan-mode; implement defaults to build, review keeps the default.
DECOUPLED from execution_mode/effort — both can be set on a stage node.
The model id to run this stage with.
#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.
#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.
#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).
#538 feinschliff — the Review (audit) toggle.
The backlog dispatch/classifier blob (source_filter) — an open map.
object
webhook | schedule | manual.
#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.
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
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
Machine-readable, stable error code.
Present only on a quota-exceeded 403 — the inline upgrade-CTA payload.
object
The entitlement feature key that was hit, e.g. apps.max_count.
The plan’s limit for this key.
Where to send the user to upgrade.
Current usage (count or bytes, per the key).
Human-readable message (the server’s English text; the client may localize
by code).
Example
{ "code": "not_found"}Project not found
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
Machine-readable, stable error code.
Present only on a quota-exceeded 403 — the inline upgrade-CTA payload.
object
The entitlement feature key that was hit, e.g. apps.max_count.
The plan’s limit for this key.
Where to send the user to upgrade.
Current usage (count or bytes, per the key).
Human-readable message (the server’s English text; the client may localize
by code).
Example
{ "code": "not_found"}Structured server error
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
Machine-readable, stable error code.
Present only on a quota-exceeded 403 — the inline upgrade-CTA payload.
object
The entitlement feature key that was hit, e.g. apps.max_count.
The plan’s limit for this key.
Where to send the user to upgrade.
Current usage (count or bytes, per the key).
Human-readable message (the server’s English text; the client may localize
by code).
Example
{ "code": "not_found"}