Skip to main content

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>