Organization
Read your organization, and read and update its settings.
The organization is implied by the token — there is no org id in any path.
| Endpoint | Scope | Token owner's role |
|---|---|---|
GET /org | org:read | Any member (response depends on the role) |
GET /org/settings | org:read | Admin |
PATCH /org | org:write (sensitive) | Admin |
org:write changes exactly the settings the portal's Settings →
Organization form edits. Suspending or deleting the organization and
changing its billing mode are done in the portal.
The organization object
For an Admin token owner, the organization record and its settings are
returned as one flat object. Settings fields appear once they have been set; an organization
that never set monthly_budget, for example, has no monthly_budget key.
| Field | Type | Notes |
|---|---|---|
id | string | Opaque id. |
name | string | |
slug | string | |
is_active | boolean | false while the organization is suspended. |
billing_mode | string | The organization's billing mode (read-only here). |
region | string | The organization's region. |
created_at | string | ISO-8601 UTC. |
spend_ceiling | number | Upper bound (USD) no project spend limit may exceed. Absent = unbounded. |
default_model_allowlist | string[] | Allowlist applied to new projects. |
default_rpm_limit | integer | Default requests-per-minute limit. |
default_daily_cap | number | Default daily spend cap (USD). |
default_monthly_cap | number | Default monthly spend cap (USD). |
monthly_budget | number | Organization monthly budget (USD). |
budget_behavior | string | alert_only or hard_stop when the budget is reached. |
email_otp_enabled | boolean | Email one-time-code MFA for member sign-ins. Admins always use MFA. |
Treat the object as open: new fields may appear within v1.
The organization identity (members)
A token owner who is not an Admin gets only the organization's identity. Settings and billing mode are admin-only.
| Field | Type | Notes |
|---|---|---|
id | string | Opaque id. |
name | string | |
slug | string | |
region | string | The organization's region. |
is_active | boolean | false while the organization is suspended. |
created_at | string | ISO-8601 UTC. |
role | string | The token owner's own role, admin or member. |
{
"id": "3f9a7c21-5d4e-4b8a-9c0f-1e2d3a4b5c6d",
"name": "Acme Corp",
"slug": "acme",
"region": "default",
"is_active": true,
"created_at": "2026-03-02T09:41:17Z",
"role": "member"
}Retrieve the organization
GET /api/v1/mgmt/orgAn Admin gets the organization object; any other member gets the organization identity.
curl https://portal.<domain>/api/v1/mgmt/org \
-H "Authorization: Bearer $TF_PAT"{
"id": "3f9a7c21-5d4e-4b8a-9c0f-1e2d3a4b5c6d",
"name": "Acme Corp",
"slug": "acme",
"is_active": true,
"billing_mode": "prepaid",
"region": "default",
"created_at": "2026-03-02T09:41:17Z",
"spend_ceiling": 10000,
"default_model_allowlist": ["openai/gpt-4o-mini"],
"default_rpm_limit": 600,
"default_monthly_cap": 1000,
"monthly_budget": 5000,
"budget_behavior": "alert_only",
"email_otp_enabled": true
}Retrieve the organization settings
GET /api/v1/mgmt/org/settingsAdmin only. Returns the organization object with
every settings key. A member gets 403 insufficient_scope.
curl https://portal.<domain>/api/v1/mgmt/org/settings \
-H "Authorization: Bearer $TF_PAT"Update the organization
PATCH /api/v1/mgmt/orgSend any of the fields below at the top level of the body. Only the fields
you send change; an empty body or an unknown field is 400 invalid_request
(param names the field). Requires Idempotency-Key and an owner who is
currently an Admin. Returns 200 with the updated organization object.
| Body field | Type | Notes |
|---|---|---|
name | string | Cannot be empty. |
slug | string | Cannot be empty. Already in use → 409 slug_taken. |
default_model_allowlist | string[] | |
default_rpm_limit | integer | |
default_daily_cap | number | USD. |
default_monthly_cap | number | USD. |
monthly_budget | number | USD. |
budget_behavior | string | alert_only or hard_stop. |
email_otp_enabled | boolean | |
spend_ceiling | number | USD, not negative. 0 clears the bound. |
curl -X PATCH https://portal.<domain>/api/v1/mgmt/org \
-H "Authorization: Bearer $TF_PAT" \
-H "Content-Type: application/json" \
-H "Idempotency-Key: 9c8b7a6f-5e4d-4c3b-8a2f-1e0d9c8b7a6f" \
-d '{"monthly_budget": 6000, "budget_behavior": "hard_stop"}'Errors specific to the organization
| Status | Code | When |
|---|---|---|
| 400 | invalid_request (param set when known) | Empty body; unknown field; empty name or slug; budget_behavior not alert_only/hard_stop; negative spend_ceiling; a field of the wrong type. |
| 403 | insufficient_scope | Token lacks org:read/org:write, or (for GET /org/settings and PATCH) the owner is not currently an Admin. |
| 409 | slug_taken | The slug is already in use. |