Projects Commands
See Projects module docs for permissions and data model.
soat list-projects
List projects
- Method:
GET - Path:
/api/v1/projects
Usage
soat list-projects
Options
--limit
Maximum number of results to return
- Source:
query - Required: no
- Type:
integer - Default:
50
--offset
Number of results to skip
- Source:
query - Required: no
- Type:
integer - Default:
0
soat create-project
Create a project
- Method:
POST - Path:
/api/v1/projects
Usage
soat create-project --name <string>
Options
--name
—
- Source:
body - Required: yes
- Type:
string - Example:
My Project
soat get-project
Get a project
- Method:
GET - Path:
/api/v1/projects/{project_id}
Usage
soat get-project --project-id <string>
Options
--project-id
Project public ID (proj_ prefix)
- Source:
path - Required: yes
- Type:
string - Example:
proj_V1StGXR8Z5jdHi6B
soat update-project
Update a project
- Method:
PATCH - Path:
/api/v1/projects/{project_id}
Usage
soat update-project --project-id <string>
Options
--project-id
Project public ID (proj_ prefix)
- Source:
path - Required: yes
- Type:
string - Example:
proj_V1StGXR8Z5jdHi6B
--name
—
- Source:
body - Required: no
- Type:
string - Example:
Renamed Project
--guardrail-ids
Guardrails attached at the project scope.
- Source:
body - Required: no
- Type:
array<string>
--max-concurrent-runs
Maximum orchestration runs of this project driven at once. null clears the limit (unlimited); otherwise an integer >= 1. Enforced at queue claim time — excess runs stay queued until a slot frees.
- Source:
body - Required: no
- Type:
integer \| null - Example:
5
--max-chain-generations
Generations one continuation chain in this project may hold before the platform stops resuming it. null clears the project's ceiling, leaving the deployment-wide MAX_CONTINUATION_CHAIN_GENERATIONS; otherwise an integer >= 1. The effective budget is the smallest of the deployment's ceiling, this one, and the agent's own max_chain_generations stop condition, so an agent author can be stricter than this number but never exceed it.
- Source:
body - Required: no
- Type:
integer \| null - Example:
25
--max-run-depth
loop / sub_orchestration nesting levels a run tree in this project may reach before the engine refuses to start the next child. null clears the project's bound, leaving the deployment-wide MAX_ORCHESTRATION_RUN_DEPTH (default 10); otherwise an integer >= 1. The effective bound is the smaller of the two, so this can only be stricter than the deployment's — which is what makes it a bound a graph author cannot opt out of. A refused child fails its parent run with ORCHESTRATION_RUN_DEPTH_LIMIT.
- Source:
body - Required: no
- Type:
integer \| null - Example:
5
--default-model-route-id
Model route inherited by consumers in this project that bind neither model_route_id nor ai_provider_id. The route must belong to this project (400 otherwise). null clears the default, which is refused with 409 while any consumer inherits it — repointing it to another route is always allowed and immediately changes which targets those consumers use.
- Source:
body - Required: no
- Type:
string \| null - Example:
route_V1StGXR8Z5jdHi6B
--audit-reads-enabled
Opt the project into read auditing. When true, GET requests that name this project are recorded in the audit log alongside mutations. Defaults to false.
- Source:
body - Required: no
- Type:
boolean - Example:
true
--trace-content-retention-days
How long trace and generation content is kept before the daily retention sweep content-purges it. null (the default) disables retention; otherwise an integer >= 1. The sweep uses the same purge path as DELETE /traces/\{trace_id\}/content, so the row survives as an auditable skeleton with content_redacted_at set.
- Source:
body - Required: no
- Type:
integer \| null - Example:
90
--trace-content-mode
Whether trace and generation content is persisted at all. full (the default) stores it; none is zero-retention — content is never written, for every agent in the project. An agent may tighten this to none on its own but cannot loosen a none project back to full.
- Source:
body - Required: no
- Type:
enum("full", "none") - Example:
none
soat delete-project
Delete a project
- Method:
DELETE - Path:
/api/v1/projects/{project_id}
Usage
soat delete-project --project-id <string>
Options
--project-id
Project public ID (proj_ prefix)
- Source:
path - Required: yes
- Type:
string - Example:
proj_V1StGXR8Z5jdHi6B
--force
When true, deletes all of the project's dependent resources instead of returning 409 PROJECT_HAS_DEPENDENTS.
- Source:
query - Required: no
- Type:
boolean - Default:
false
soat get-project-prices
List a project's price rows
- Method:
GET - Path:
/api/v1/projects/{project_id}/prices
Usage
soat get-project-prices --project-id <string>
Options
--project-id
Project public ID (proj_ prefix)
- Source:
path - Required: yes
- Type:
string - Example:
proj_V1StGXR8Z5jdHi6B
soat update-project-prices
Upsert a project's price rows
- Method:
PUT - Path:
/api/v1/projects/{project_id}/prices
Usage
soat update-project-prices --project-id <string> --prices <array<object>>
Options
--project-id
Project public ID (proj_ prefix)
- Source:
path - Required: yes
- Type:
string - Example:
proj_V1StGXR8Z5jdHi6B
--prices
—
- Source:
body - Required: yes
- Type:
array<object>