Console API (/app)
Session-cookie endpoints the console calls. Documented for completeness; integrate against /v1 instead.
Generated from the Atrix Analytics — control plane API OpenAPI document, version 0.1.0. 114 operations. The raw document is at /openapi.json.
POST /app/auth/change-password
Change your password. Requires the current one; signs out every other session.
Auth: console session cookie.
Request body (application/json): ChangePasswordRequest
| Field | Type | Required | Description |
|---|---|---|---|
current_password | string | yes | |
new_password | string | yes | Same policy as signup: at least 10 characters, not common, not breached. |
POST /app/auth/login
Auth: none.
Request body (application/json): LoginRequest
| Field | Type | Required | Description |
|---|---|---|---|
email | string | yes | |
password | string | yes |
| Status | Body | Notes |
|---|---|---|
| 200 | MeResponse | Logged in; atx_session cookie set |
| 401 | ErrorBody | |
| 429 | ErrorBody |
POST /app/auth/logout
Auth: console session cookie.
| Status | Body | Notes |
|---|---|---|
| 204 | — | Session revoked, cookie cleared |
POST /app/auth/password-reset
Email a password-reset link. Always 202: the response never says whether the address has an account.
Auth: none.
Request body (application/json): PasswordResetRequest
| Field | Type | Required | Description |
|---|---|---|---|
email | string | yes |
| Status | Body | Notes |
|---|---|---|
| 202 | AcceptedResponse | |
| 429 | ErrorBody |
POST /app/auth/password-reset/confirm
Set a new password with the emailed token. Signs out every session.
Auth: none.
Request body (application/json): PasswordResetConfirm
| Field | Type | Required | Description |
|---|---|---|---|
new_password | string | yes | |
token | string | yes | The single-use token from the emailed link. |
GET /app/auth/sessions
Your signed-in sessions (never with an IP address).
Auth: console session cookie.
| Status | Body | Notes |
|---|---|---|
| 200 | SessionList | |
| 401 | ErrorBody |
DELETE /app/auth/sessions/{session_id}
Sign out one of your sessions.
Auth: console session cookie.
| Parameter | In | Type | Required | Description |
|---|---|---|---|---|
session_id | path | string (uuid) | yes |
POST /app/auth/sessions/revoke-others
Sign out every session except this one.
Auth: console session cookie.
| Status | Body | Notes |
|---|---|---|
| 200 | RevokeOthersResponse | |
| 401 | ErrorBody | |
| 403 | ErrorBody |
POST /app/auth/signup
Create an account, its personal organisation, and a session.
Auth: none.
Request body (application/json): SignupRequest
| Field | Type | Required | Description |
|---|---|---|---|
email | string | yes | |
name | string | yes | |
password | string | yes | At least 10 characters; common and breached passwords are refused. |
| Status | Body | Notes |
|---|---|---|
| 201 | MeResponse | Signed up; atx_session cookie set |
| 400 | ErrorBody | |
| 409 | ErrorBody | |
| 429 | ErrorBody |
POST /app/auth/verify-email
Auth: none.
Request body (application/json): TokenRequest
| Field | Type | Required | Description |
|---|---|---|---|
token | string | yes | The single-use token from the emailed link. |
| Status | Body | Notes |
|---|---|---|
| 204 | — | Email verified |
| 404 | ErrorBody |
POST /app/auth/verify-email/send
Send a fresh verification link (no-op when the email is already verified).
Auth: console session cookie.
POST /app/invitations/accept
Accept an invitation addressed to the signed-in user's email.
Auth: console session cookie.
Request body (application/json): TokenRequest
| Field | Type | Required | Description |
|---|---|---|---|
token | string | yes | The single-use token from the emailed link. |
GET /app/me
Auth: console session cookie.
| Status | Body | Notes |
|---|---|---|
| 200 | MeResponse | |
| 401 | ErrorBody |
GET /app/oauth/connections
Your OAuth connections (MCP clients and other apps you approved).
Auth: console session cookie.
| Status | Body | Notes |
|---|---|---|
| 200 | ConnectionList | |
| 401 | ErrorBody |
DELETE /app/oauth/connections/{grant_id}
Disconnect: revokes the grant and every token cut from it.
Auth: console session cookie.
| Parameter | In | Type | Required | Description |
|---|---|---|---|---|
grant_id | path | string (uuid) | yes |
| Status | Body | Notes |
|---|---|---|
| 204 | — | |
| 404 | ErrorBody |
GET /app/orgs
Auth: console session cookie.
| Status | Body | Notes |
|---|---|---|
| 200 | OrgList |
POST /app/orgs
Auth: console session cookie.
Request body (application/json): OrgNameRequest
| Field | Type | Required | Description |
|---|---|---|---|
name | string | yes |
| Status | Body | Notes |
|---|---|---|
| 201 | OrgDto |
PATCH /app/orgs/{org_id}
Auth: console session cookie.
| Parameter | In | Type | Required | Description |
|---|---|---|---|---|
org_id | path | string (uuid) | yes |
Request body (application/json): OrgNameRequest
| Field | Type | Required | Description |
|---|---|---|---|
name | string | yes |
GET /app/orgs/{org_id}/billing
Billing overview: plan, usage this period, current and projected invoice, spend cap, ingest stage.
Auth: console session cookie.
| Parameter | In | Type | Required | Description |
|---|---|---|---|---|
org_id | path | string (uuid) | yes |
PATCH /app/orgs/{org_id}/billing/cap
Change the spend cap. Audited; the new ingest policy reaches capture within a minute.
Auth: console session cookie.
| Parameter | In | Type | Required | Description |
|---|---|---|---|---|
org_id | path | string (uuid) | yes |
Request body (application/json): CapRequest
| Field | Type | Required | Description |
|---|---|---|---|
spend_cap_minor | integer (int64) | yes | The new spend cap in minor units of the account currency. Mandatory, never below the plan price plus overage already billed this period. |
| Status | Body | Notes |
|---|---|---|
| 200 | CapResponse | |
| 400 | ErrorBody | |
| 403 | ErrorBody | |
| 404 | ErrorBody |
POST /app/orgs/{org_id}/billing/checkout
Upgrade: a Stripe Checkout URL, or — with a live subscription — an in-place plan change prorated by Stripe.
Auth: console session cookie.
| Parameter | In | Type | Required | Description |
|---|---|---|---|---|
org_id | path | string (uuid) | yes |
Request body (application/json): CheckoutRequest
| Field | Type | Required | Description |
|---|---|---|---|
plan | string | yes | starter, growth or scale. |
| Status | Body | Notes |
|---|---|---|
| 200 | object | {kind: redirect, url} or {kind: plan_changed, plan, proration} |
| 400 | ErrorBody | |
| 403 | ErrorBody | |
| 404 | ErrorBody | |
| 409 | ErrorBody | |
| 503 | ErrorBody |
POST /app/orgs/{org_id}/billing/portal
A Stripe Customer Portal session (payment methods, invoices, cancellation).
Auth: console session cookie.
| Parameter | In | Type | Required | Description |
|---|---|---|---|---|
org_id | path | string (uuid) | yes |
| Status | Body | Notes |
|---|---|---|
| 200 | PortalResponse | |
| 403 | ErrorBody | |
| 404 | ErrorBody | |
| 409 | ErrorBody | |
| 503 | ErrorBody |
POST /app/orgs/{org_id}/invitations
Auth: console session cookie.
| Parameter | In | Type | Required | Description |
|---|---|---|---|---|
org_id | path | string (uuid) | yes |
Request body (application/json): InviteRequest
| Field | Type | Required | Description |
|---|---|---|---|
email | string | yes | |
role | string | yes | owner |
| Status | Body | Notes |
|---|---|---|
| 201 | InvitationDto | |
| 403 | ErrorBody | |
| 404 | ErrorBody | |
| 409 | ErrorBody |
DELETE /app/orgs/{org_id}/invitations/{invitation_id}
Auth: console session cookie.
| Parameter | In | Type | Required | Description |
|---|---|---|---|---|
org_id | path | string (uuid) | yes | |
invitation_id | path | string (uuid) | yes |
| Status | Body | Notes |
|---|---|---|
| 204 | — | |
| 404 | ErrorBody |
GET /app/orgs/{org_id}/members
Auth: console session cookie.
| Parameter | In | Type | Required | Description |
|---|---|---|---|---|
org_id | path | string (uuid) | yes |
| Status | Body | Notes |
|---|---|---|
| 200 | MembersResponse | |
| 404 | ErrorBody |
PATCH /app/orgs/{org_id}/members/{member_id}
Auth: console session cookie.
| Parameter | In | Type | Required | Description |
|---|---|---|---|---|
org_id | path | string (uuid) | yes | |
member_id | path | string (uuid) | yes |
Request body (application/json): RoleRequest
| Field | Type | Required | Description |
|---|---|---|---|
role | string | yes |
DELETE /app/orgs/{org_id}/members/{member_id}
Auth: console session cookie.
| Parameter | In | Type | Required | Description |
|---|---|---|---|---|
org_id | path | string (uuid) | yes | |
member_id | path | string (uuid) | yes |
GET /app/orgs/{org_id}/projects
Auth: console session cookie.
| Parameter | In | Type | Required | Description |
|---|---|---|---|---|
org_id | path | string (uuid) | yes |
| Status | Body | Notes |
|---|---|---|
| 200 | ProjectList | |
| 404 | ErrorBody |
POST /app/orgs/{org_id}/projects
Create a project in a live region: data id, three environments and a public key per environment (mirrored into the region's key registry).
Auth: console session cookie.
| Parameter | In | Type | Required | Description |
|---|---|---|---|---|
org_id | path | string (uuid) | yes |
Request body (application/json): CreateProjectRequest
| Field | Type | Required | Description |
|---|---|---|---|
currency | string | null | ISO 4217, default USD. | |
name | string | yes | |
region | string | yes | Region code. Fixed for the life of the project. Only live regions are accepted. |
timezone | string | null | IANA zone, default UTC. |
| Status | Body | Notes |
|---|---|---|
| 201 | CreateProjectResponse | |
| 400 | ErrorBody | |
| 403 | ErrorBody | |
| 404 | ErrorBody |
GET /app/projects/{project_id}
Auth: console session cookie.
| Parameter | In | Type | Required | Description |
|---|---|---|---|---|
project_id | path | string (uuid) | yes |
| Status | Body | Notes |
|---|---|---|
| 200 | ProjectDto | |
| 404 | ErrorBody |
PATCH /app/projects/{project_id}
Auth: console session cookie.
| Parameter | In | Type | Required | Description |
|---|---|---|---|---|
project_id | path | string (uuid) | yes |
Request body (application/json): RenameRequest
| Field | Type | Required | Description |
|---|---|---|---|
name | string | yes |
| Status | Body | Notes |
|---|---|---|
| 200 | ProjectDto | |
| 403 | ErrorBody | |
| 404 | ErrorBody |
DELETE /app/projects/{project_id}
Soft-delete a project and revoke all of its keys.
Auth: console session cookie.
| Parameter | In | Type | Required | Description |
|---|---|---|---|---|
project_id | path | string (uuid) | yes |
GET /app/projects/{project_id}/annotations
Auth: console session cookie.
| Parameter | In | Type | Required | Description |
|---|---|---|---|---|
project_id | path | string (uuid) | yes | |
from | path | string (date-time) | null | yes | RFC 3339; default 90 days ago. |
to | path | string (date-time) | null | yes | RFC 3339; default now + 1 day. |
kind | path | string | null | yes |
| Status | Body | Notes |
|---|---|---|
| 200 | AnnotationListResponse | |
| 404 | ErrorBody |
POST /app/projects/{project_id}/annotations
Auth: console session cookie.
| Parameter | In | Type | Required | Description |
|---|---|---|---|---|
project_id | path | string (uuid) | yes |
Request body (application/json): AnnotationCreateRequest
| Field | Type | Required | Description |
|---|---|---|---|
content | string | yes | |
kind | string | yes | |
occurred_at | string (date-time) | yes | |
ref | object | null |
| Status | Body | Notes |
|---|---|---|
| 201 | AnnotationDto | |
| 400 | ErrorBody | |
| 404 | ErrorBody |
PATCH /app/projects/{project_id}/annotations/{annotation_id}
Auth: console session cookie.
| Parameter | In | Type | Required | Description |
|---|---|---|---|---|
project_id | path | string (uuid) | yes | |
annotation_id | path | string (uuid) | yes |
Request body (application/json): AnnotationUpdateRequest
| Field | Type | Required | Description |
|---|---|---|---|
content | string | null | ||
kind | string | null | ||
occurred_at | string (date-time) | null |
| Status | Body | Notes |
|---|---|---|
| 200 | AnnotationDto | |
| 404 | ErrorBody | |
| 409 | ErrorBody |
DELETE /app/projects/{project_id}/annotations/{annotation_id}
Auth: console session cookie.
| Parameter | In | Type | Required | Description |
|---|---|---|---|---|
project_id | path | string (uuid) | yes | |
annotation_id | path | string (uuid) | yes |
GET /app/projects/{project_id}/catalog/codegen
Auth: console session cookie.
| Parameter | In | Type | Required | Description |
|---|---|---|---|---|
project_id | path | string (uuid) | yes |
| Status | Body | Notes |
|---|---|---|
| 200 | CatalogCodegenExport | |
| 404 | ErrorBody |
GET /app/projects/{project_id}/catalog/events
Auth: console session cookie.
| Parameter | In | Type | Required | Description |
|---|---|---|---|---|
project_id | path | string (uuid) | yes | |
status | path | string | null | yes | |
search | path | string | null | yes |
| Status | Body | Notes |
|---|---|---|
| 200 | CatalogEventListResponse | |
| 404 | ErrorBody |
POST /app/projects/{project_id}/catalog/events
Auth: console session cookie.
| Parameter | In | Type | Required | Description |
|---|---|---|---|---|
project_id | path | string (uuid) | yes |
Request body (application/json): CatalogEventCreateRequest
| Field | Type | Required | Description |
|---|---|---|---|
description | string | null | ||
display_name | string | null | ||
name | string | yes | |
owner_id | string (uuid) | null | ||
pii_level | string | null | ||
platforms | string[] | null | ||
properties | CatalogPropertyInput[] | null | ||
question | string | null | ||
status | string | null | ||
tags | string[] | null |
| Status | Body | Notes |
|---|---|---|
| 201 | CatalogEventDto | |
| 400 | ErrorBody | |
| 404 | ErrorBody | |
| 409 | ErrorBody |
GET /app/projects/{project_id}/catalog/events/{event_id}
Auth: console session cookie.
| Parameter | In | Type | Required | Description |
|---|---|---|---|---|
project_id | path | string (uuid) | yes | |
event_id | path | string (uuid) | yes |
| Status | Body | Notes |
|---|---|---|
| 200 | CatalogEventDto | |
| 404 | ErrorBody |
PATCH /app/projects/{project_id}/catalog/events/{event_id}
Auth: console session cookie.
| Parameter | In | Type | Required | Description |
|---|---|---|---|---|
project_id | path | string (uuid) | yes | |
event_id | path | string (uuid) | yes |
Request body (application/json): CatalogEventUpdateRequest
| Field | Type | Required | Description |
|---|---|---|---|
description | string | null | ||
display_name | string | null | ||
owner_id | string (uuid) | null | ||
pii_level | string | null | ||
platforms | string[] | null | ||
properties | CatalogPropertyInput[] | null | ||
question | string | null | ||
status | string | null | ||
tags | string[] | null |
| Status | Body | Notes |
|---|---|---|
| 200 | CatalogEventDto | |
| 400 | ErrorBody | |
| 404 | ErrorBody |
DELETE /app/projects/{project_id}/catalog/events/{event_id}
Auth: console session cookie.
| Parameter | In | Type | Required | Description |
|---|---|---|---|---|
project_id | path | string (uuid) | yes | |
event_id | path | string (uuid) | yes |
| Status | Body | Notes |
|---|---|---|
| 204 | — | |
| 404 | ErrorBody |
POST /app/projects/{project_id}/catalog/sync
Merge what the region has seen into the plan (planned → implemented, unknown → unplanned).
Auth: console session cookie.
| Parameter | In | Type | Required | Description |
|---|---|---|---|---|
project_id | path | string (uuid) | yes |
Request body (application/json): CatalogSyncRequest
| Field | Type | Required | Description |
|---|---|---|---|
days | integer (int32) | null | (min 0) | |
environment | string | null |
| Status | Body | Notes |
|---|---|---|
| 200 | CatalogSyncResponse | |
| 404 | ErrorBody | |
| 503 | ErrorBody |
GET /app/projects/{project_id}/cohorts
Auth: console session cookie.
| Parameter | In | Type | Required | Description |
|---|---|---|---|---|
project_id | path | string (uuid) | yes |
| Status | Body | Notes |
|---|---|---|
| 200 | CohortListResponse | |
| 404 | ErrorBody |
POST /app/projects/{project_id}/cohorts
Auth: console session cookie.
| Parameter | In | Type | Required | Description |
|---|---|---|---|---|
project_id | path | string (uuid) | yes |
Request body (application/json): CohortCreateRequest
| Field | Type | Required | Description |
|---|---|---|---|
definition | object | null | ||
description | string | null | ||
kind | string | yes | |
name | string | yes |
GET /app/projects/{project_id}/cohorts/{cohort_id}
Auth: console session cookie.
| Parameter | In | Type | Required | Description |
|---|---|---|---|---|
project_id | path | string (uuid) | yes | |
cohort_id | path | string (uuid) | yes |
PATCH /app/projects/{project_id}/cohorts/{cohort_id}
Auth: console session cookie.
| Parameter | In | Type | Required | Description |
|---|---|---|---|---|
project_id | path | string (uuid) | yes | |
cohort_id | path | string (uuid) | yes |
Request body (application/json): CohortUpdateRequest
| Field | Type | Required | Description |
|---|---|---|---|
definition | object | null | ||
description | string | null | ||
name | string | null |
DELETE /app/projects/{project_id}/cohorts/{cohort_id}
Auth: console session cookie.
| Parameter | In | Type | Required | Description |
|---|---|---|---|---|
project_id | path | string (uuid) | yes | |
cohort_id | path | string (uuid) | yes |
| Status | Body | Notes |
|---|---|---|
| 204 | — | |
| 404 | ErrorBody |
POST /app/projects/{project_id}/cohorts/{cohort_id}/calculate
Ask the region to recompute the cohort; records the size it reports.
Auth: console session cookie.
| Parameter | In | Type | Required | Description |
|---|---|---|---|---|
project_id | path | string (uuid) | yes | |
cohort_id | path | string (uuid) | yes |
Request body (application/json): CohortCalculateRequest
| Field | Type | Required | Description |
|---|---|---|---|
environment | string | null |
GET /app/projects/{project_id}/dashboards
Auth: console session cookie.
| Parameter | In | Type | Required | Description |
|---|---|---|---|---|
project_id | path | string (uuid) | yes |
| Status | Body | Notes |
|---|---|---|
| 200 | DashboardListResponse | |
| 404 | ErrorBody |
POST /app/projects/{project_id}/dashboards
Auth: console session cookie.
| Parameter | In | Type | Required | Description |
|---|---|---|---|---|
project_id | path | string (uuid) | yes |
Request body (application/json): DashboardCreateRequest
| Field | Type | Required | Description |
|---|---|---|---|
date_range | object | null | ||
description | string | null | ||
filters | object | null | ||
is_home | boolean | null | ||
name | string | yes | |
tags | string[] | null |
| Status | Body | Notes |
|---|---|---|
| 201 | DashboardDto | |
| 400 | ErrorBody | |
| 403 | ErrorBody | |
| 404 | ErrorBody |
GET /app/projects/{project_id}/dashboards/{dashboard_id}
Auth: console session cookie.
| Parameter | In | Type | Required | Description |
|---|---|---|---|---|
project_id | path | string (uuid) | yes | |
dashboard_id | path | string (uuid) | yes |
| Status | Body | Notes |
|---|---|---|
| 200 | DashboardDto | |
| 404 | ErrorBody |
PATCH /app/projects/{project_id}/dashboards/{dashboard_id}
Auth: console session cookie.
| Parameter | In | Type | Required | Description |
|---|---|---|---|---|
project_id | path | string (uuid) | yes | |
dashboard_id | path | string (uuid) | yes |
Request body (application/json): DashboardUpdateRequest
| Field | Type | Required | Description |
|---|---|---|---|
date_range | object | null | ||
description | string | null | ||
filters | object | null | ||
is_home | boolean | null | ||
name | string | null | ||
tags | string[] | null |
| Status | Body | Notes |
|---|---|---|
| 200 | DashboardDto | |
| 400 | ErrorBody | |
| 403 | ErrorBody | |
| 404 | ErrorBody |
DELETE /app/projects/{project_id}/dashboards/{dashboard_id}
Auth: console session cookie.
| Parameter | In | Type | Required | Description |
|---|---|---|---|---|
project_id | path | string (uuid) | yes | |
dashboard_id | path | string (uuid) | yes |
POST /app/projects/{project_id}/dashboards/{dashboard_id}/layout
Auth: console session cookie.
| Parameter | In | Type | Required | Description |
|---|---|---|---|---|
project_id | path | string (uuid) | yes | |
dashboard_id | path | string (uuid) | yes |
Request body (application/json): LayoutRequest
| Field | Type | Required | Description |
|---|---|---|---|
tiles | TilePosition[] | yes |
| Status | Body | Notes |
|---|---|---|
| 200 | DashboardDto | |
| 400 | ErrorBody | |
| 404 | ErrorBody |
POST /app/projects/{project_id}/dashboards/{dashboard_id}/tiles
Auth: console session cookie.
| Parameter | In | Type | Required | Description |
|---|---|---|---|---|
project_id | path | string (uuid) | yes | |
dashboard_id | path | string (uuid) | yes |
Request body (application/json): TileCreateRequest
| Field | Type | Required | Description |
|---|---|---|---|
body | string | null | ||
insight_id | string (uuid) | null | ||
kind | string | yes | insight |
layout | any | null | TileLayout |
| Status | Body | Notes |
|---|---|---|
| 201 | DashboardTileDto | |
| 400 | ErrorBody | |
| 404 | ErrorBody | |
| 409 | ErrorBody |
PATCH /app/projects/{project_id}/dashboards/{dashboard_id}/tiles/{tile_id}
Auth: console session cookie.
| Parameter | In | Type | Required | Description |
|---|---|---|---|---|
project_id | path | string (uuid) | yes | |
dashboard_id | path | string (uuid) | yes | |
tile_id | path | string (uuid) | yes |
Request body (application/json): TileUpdateRequest
| Field | Type | Required | Description |
|---|---|---|---|
body | string | null | ||
layout | any | null | TileLayout |
| Status | Body | Notes |
|---|---|---|
| 200 | DashboardTileDto | |
| 400 | ErrorBody | |
| 404 | ErrorBody |
DELETE /app/projects/{project_id}/dashboards/{dashboard_id}/tiles/{tile_id}
Auth: console session cookie.
| Parameter | In | Type | Required | Description |
|---|---|---|---|---|
project_id | path | string (uuid) | yes | |
dashboard_id | path | string (uuid) | yes | |
tile_id | path | string (uuid) | yes |
| Status | Body | Notes |
|---|---|---|
| 204 | — | |
| 404 | ErrorBody |
GET /app/projects/{project_id}/experiments
Auth: console session cookie.
| Parameter | In | Type | Required | Description |
|---|---|---|---|---|
project_id | path | string (uuid) | yes |
| Status | Body | Notes |
|---|---|---|
| 200 | ExperimentListResponse | |
| 404 | ErrorBody |
POST /app/projects/{project_id}/experiments
Auth: console session cookie.
| Parameter | In | Type | Required | Description |
|---|---|---|---|---|
project_id | path | string (uuid) | yes | |
dry_run | query | boolean |
Request body (application/json): ExperimentCreateRequest
| Field | Type | Required | Description |
|---|---|---|---|
alpha | number (double) | null | ||
attribution_window_hours | integer (int32) | null | ||
control_variant | string | null | ||
cuped | any | null | ExperimentCuped | ||
environment | string | null | ||
flag_id | string (uuid) | yes | |
guardrails | ExperimentGuardrail[] | null | ||
hypothesis | string | null | ||
key | string | yes | |
mde | number (double) | null | ||
method | string | null | ||
name | string | yes | |
power | number (double) | null | ||
primary_metric_id | string (uuid) | null | ||
secondary_metric_ids | string (uuid)[] | null | ||
winsor_pct | number (double) | null |
GET /app/projects/{project_id}/experiments/{experiment_id}
Auth: console session cookie.
| Parameter | In | Type | Required | Description |
|---|---|---|---|---|
project_id | path | string (uuid) | yes | |
experiment_id | path | string (uuid) | yes |
| Status | Body | Notes |
|---|---|---|
| 200 | ExperimentDto | |
| 404 | ErrorBody |
PATCH /app/projects/{project_id}/experiments/{experiment_id}
Auth: console session cookie.
| Parameter | In | Type | Required | Description |
|---|---|---|---|---|
project_id | path | string (uuid) | yes | |
experiment_id | path | string (uuid) | yes | |
dry_run | query | boolean |
Request body (application/json): ExperimentUpdateRequest
| Field | Type | Required | Description |
|---|---|---|---|
alpha | number (double) | null | ||
attribution_window_hours | integer (int32) | null | ||
control_variant | string | null | ||
cuped | any | null | ExperimentCuped | ||
guardrails | ExperimentGuardrail[] | null | ||
hypothesis | string | null | ||
mde | number (double) | null | ||
method | string | null | ||
name | string | null | ||
power | number (double) | null | ||
primary_metric_id | string (uuid) | null | ||
secondary_metric_ids | string (uuid)[] | null | ||
winsor_pct | number (double) | null |
| Status | Body | Notes |
|---|---|---|
| 200 | ExperimentDto | |
| 400 | ErrorBody | |
| 403 | ErrorBody | |
| 404 | ErrorBody | |
| 409 | ErrorBody |
DELETE /app/projects/{project_id}/experiments/{experiment_id}
Auth: console session cookie.
| Parameter | In | Type | Required | Description |
|---|---|---|---|---|
project_id | path | string (uuid) | yes | |
experiment_id | path | string (uuid) | yes | |
dry_run | query | boolean |
| Status | Body | Notes |
|---|---|---|
| 200 | ExperimentDto | archived |
| 403 | ErrorBody | |
| 404 | ErrorBody | |
| 409 | ErrorBody |
POST /app/projects/{project_id}/experiments/{experiment_id}/launch
Auth: console session cookie.
| Parameter | In | Type | Required | Description |
|---|---|---|---|---|
project_id | path | string (uuid) | yes | |
experiment_id | path | string (uuid) | yes | |
dry_run | query | boolean |
Request body (application/json): ExperimentTransitionRequest
| Field | Type | Required | Description |
|---|---|---|---|
override_block | boolean | null | ||
reason | string | null | ||
variant | string | null |
| Status | Body | Notes |
|---|---|---|
| 200 | ExperimentDto | |
| 400 | ErrorBody | |
| 403 | ErrorBody | flags.production needed in production |
| 404 | ErrorBody | |
| 409 | ErrorBody |
GET /app/projects/{project_id}/experiments/{experiment_id}/results
Auth: console session cookie.
| Parameter | In | Type | Required | Description |
|---|---|---|---|---|
project_id | path | string (uuid) | yes | |
experiment_id | path | string (uuid) | yes | |
refresh | path | boolean | null | yes | Recompute now instead of returning a result younger than 5 minutes. |
| Status | Body | Notes |
|---|---|---|
| 200 | ExperimentResultsDto | |
| 404 | ErrorBody | |
| 409 | ErrorBody | |
| 503 | ErrorBody |
POST /app/projects/{project_id}/experiments/{experiment_id}/ship
Auth: console session cookie.
| Parameter | In | Type | Required | Description |
|---|---|---|---|---|
project_id | path | string (uuid) | yes | |
experiment_id | path | string (uuid) | yes | |
dry_run | query | boolean |
Request body (application/json): ExperimentTransitionRequest
| Field | Type | Required | Description |
|---|---|---|---|
override_block | boolean | null | ||
reason | string | null | ||
variant | string | null |
| Status | Body | Notes |
|---|---|---|
| 200 | ExperimentDto | |
| 400 | ErrorBody | |
| 403 | ErrorBody | experiments.ship (and flags.production in production) |
| 404 | ErrorBody | |
| 409 | ErrorBody | experiment_blocked |
POST /app/projects/{project_id}/experiments/{experiment_id}/stop
Auth: console session cookie.
| Parameter | In | Type | Required | Description |
|---|---|---|---|---|
project_id | path | string (uuid) | yes | |
experiment_id | path | string (uuid) | yes | |
dry_run | query | boolean |
Request body (application/json): ExperimentTransitionRequest
| Field | Type | Required | Description |
|---|---|---|---|
override_block | boolean | null | ||
reason | string | null | ||
variant | string | null |
| Status | Body | Notes |
|---|---|---|
| 200 | ExperimentDto | |
| 403 | ErrorBody | |
| 404 | ErrorBody | |
| 409 | ErrorBody |
POST /app/projects/{project_id}/experiments/plan
Auth: console session cookie.
| Parameter | In | Type | Required | Description |
|---|---|---|---|---|
project_id | path | string (uuid) | yes |
Request body (application/json): ExperimentPlanRequest
| Field | Type | Required | Description |
|---|---|---|---|
alpha | number (double) | null | ||
control_units | number (double) | null | ||
daily_units | number (double) | null | ||
mde | number (double) | yes | |
mde_kind | string | null | ||
method | string | null | ||
metric | object | yes | |
power | number (double) | null | ||
variants | integer (int32) | null | (min 0) |
| Status | Body | Notes |
|---|---|---|
| 200 | ExperimentPlanResponse | |
| 400 | ErrorBody | |
| 404 | ErrorBody |
GET /app/projects/{project_id}/findings/destinations
Auth: console session cookie.
| Parameter | In | Type | Required | Description |
|---|---|---|---|---|
project_id | path | string (uuid) | yes |
| Status | Body | Notes |
|---|---|---|
| 200 | DestinationListResponse | |
| 404 | ErrorBody |
POST /app/projects/{project_id}/findings/destinations
Auth: console session cookie.
| Parameter | In | Type | Required | Description |
|---|---|---|---|---|
project_id | path | string (uuid) | yes |
Request body (application/json): DestinationCreateRequest
| Field | Type | Required | Description |
|---|---|---|---|
config | any | null | DestinationConfig | ||
enabled | boolean | null | ||
kind | string | yes | |
min_severity | string | null | ||
name | string | yes | |
secret | string | null | slack: the incoming-webhook URL; webhook: the endpoint URL. | |
signing_secret | string | null | webhook: the HMAC signing secret. |
| Status | Body | Notes |
|---|---|---|
| 201 | DestinationDto | |
| 400 | ErrorBody | |
| 404 | ErrorBody | |
| 503 | ErrorBody |
PATCH /app/projects/{project_id}/findings/destinations/{destination_id}
Auth: console session cookie.
| Parameter | In | Type | Required | Description |
|---|---|---|---|---|
project_id | path | string (uuid) | yes | |
destination_id | path | string (uuid) | yes |
Request body (application/json): DestinationUpdateRequest
| Field | Type | Required | Description |
|---|---|---|---|
config | any | null | DestinationConfig | ||
enabled | boolean | null | ||
min_severity | string | null | ||
name | string | null | ||
secret | string | null | ||
signing_secret | string | null |
| Status | Body | Notes |
|---|---|---|
| 200 | DestinationDto | |
| 400 | ErrorBody | |
| 404 | ErrorBody |
DELETE /app/projects/{project_id}/findings/destinations/{destination_id}
Auth: console session cookie.
| Parameter | In | Type | Required | Description |
|---|---|---|---|---|
project_id | path | string (uuid) | yes | |
destination_id | path | string (uuid) | yes |
| Status | Body | Notes |
|---|---|---|
| 204 | — | |
| 404 | ErrorBody |
GET /app/projects/{project_id}/findings/rules
Auth: console session cookie.
| Parameter | In | Type | Required | Description |
|---|---|---|---|---|
project_id | path | string (uuid) | yes |
| Status | Body | Notes |
|---|---|---|
| 200 | RuleListResponse | |
| 404 | ErrorBody |
POST /app/projects/{project_id}/findings/rules
Auth: console session cookie.
| Parameter | In | Type | Required | Description |
|---|---|---|---|---|
project_id | path | string (uuid) | yes |
Request body (application/json): RuleCreateRequest
| Field | Type | Required | Description |
|---|---|---|---|
cadence | string | null | ||
daily_cap | integer (int32) | null | ||
destination_ids | string (uuid)[] | null | ||
enabled | boolean | null | ||
min_severity | string | null | ||
name | string | yes | |
target | RuleTarget | yes | |
thresholds | any | null | Thresholds |
PATCH /app/projects/{project_id}/findings/rules/{rule_id}
Auth: console session cookie.
| Parameter | In | Type | Required | Description |
|---|---|---|---|---|
project_id | path | string (uuid) | yes | |
rule_id | path | string (uuid) | yes |
Request body (application/json): RuleUpdateRequest
| Field | Type | Required | Description |
|---|---|---|---|
cadence | string | null | ||
daily_cap | integer (int32) | null | null clears the cap (deployment default). | |
destination_ids | string (uuid)[] | null | ||
enabled | boolean | null | ||
min_severity | string | null | ||
name | string | null | ||
target | any | null | RuleTarget | ||
thresholds | any | null | Thresholds |
DELETE /app/projects/{project_id}/findings/rules/{rule_id}
Auth: console session cookie.
| Parameter | In | Type | Required | Description |
|---|---|---|---|---|
project_id | path | string (uuid) | yes | |
rule_id | path | string (uuid) | yes |
| Status | Body | Notes |
|---|---|---|
| 204 | — | |
| 404 | ErrorBody |
GET /app/projects/{project_id}/flags
Auth: console session cookie.
| Parameter | In | Type | Required | Description |
|---|---|---|---|---|
project_id | path | string (uuid) | yes | |
archived | path | boolean | null | yes | Include archived flags. |
search | path | string | null | yes | Case-insensitive match on key or name. |
| Status | Body | Notes |
|---|---|---|
| 200 | FlagListResponse | |
| 404 | ErrorBody |
POST /app/projects/{project_id}/flags
Auth: console session cookie.
| Parameter | In | Type | Required | Description |
|---|---|---|---|---|
project_id | path | string (uuid) | yes | |
dry_run | query | boolean |
Request body (application/json): FlagCreateRequest
| Field | Type | Required | Description |
|---|---|---|---|
description | string | null | ||
key | string | yes | |
kind | string | null | boolean | |
name | string | yes | |
payload | object | null | ||
rules | object[] | null | ||
stickiness | string | null | ||
tags | string[] | null | ||
variants | object[] | null |
GET /app/projects/{project_id}/flags/{flag_id}
Auth: console session cookie.
| Parameter | In | Type | Required | Description |
|---|---|---|---|---|
project_id | path | string (uuid) | yes | |
flag_id | path | string (uuid) | yes |
PATCH /app/projects/{project_id}/flags/{flag_id}
Auth: console session cookie.
| Parameter | In | Type | Required | Description |
|---|---|---|---|---|
project_id | path | string (uuid) | yes | |
flag_id | path | string (uuid) | yes | |
dry_run | query | boolean |
Request body (application/json): FlagUpdateRequest
| Field | Type | Required | Description |
|---|---|---|---|
description | string | null | ||
name | string | null | ||
owner_id | string (uuid) | null | ||
tags | string[] | null |
DELETE /app/projects/{project_id}/flags/{flag_id}
Auth: console session cookie.
| Parameter | In | Type | Required | Description |
|---|---|---|---|---|
project_id | path | string (uuid) | yes | |
flag_id | path | string (uuid) | yes | |
dry_run | query | boolean |
PATCH /app/projects/{project_id}/flags/{flag_id}/environments/{environment}
Auth: console session cookie.
| Parameter | In | Type | Required | Description |
|---|---|---|---|---|
project_id | path | string (uuid) | yes | |
flag_id | path | string (uuid) | yes | |
environment | path | string | yes | |
dry_run | query | boolean |
Request body (application/json): FlagEnvironmentUpdateRequest
| Field | Type | Required | Description |
|---|---|---|---|
enabled | boolean | null | ||
payload | object | null | null clears the payload. | |
rules | object[] | null | ||
salt | string | null | ||
stickiness | string | null | ||
variants | object[] | null |
| Status | Body | Notes |
|---|---|---|
| 200 | FlagDto | |
| 400 | ErrorBody | |
| 403 | ErrorBody | missing flags:write, or flags.production for a live production config |
| 404 | ErrorBody | |
| 409 | ErrorBody |
GET /app/projects/{project_id}/flags/publications
Auth: console session cookie.
| Parameter | In | Type | Required | Description |
|---|---|---|---|---|
project_id | path | string (uuid) | yes | |
environment | path | string | null | yes |
| Status | Body | Notes |
|---|---|---|
| 200 | FlagPublicationListResponse | |
| 404 | ErrorBody |
GET /app/projects/{project_id}/flags/secret-keys
Auth: console session cookie.
| Parameter | In | Type | Required | Description |
|---|---|---|---|---|
project_id | path | string (uuid) | yes |
| Status | Body | Notes |
|---|---|---|
| 200 | FlagSecretKeyListResponse | |
| 404 | ErrorBody |
POST /app/projects/{project_id}/flags/secret-keys
Auth: console session cookie.
| Parameter | In | Type | Required | Description |
|---|---|---|---|---|
project_id | path | string (uuid) | yes |
Request body (application/json): FlagSecretKeyCreateRequest
| Field | Type | Required | Description |
|---|---|---|---|
environment | string | yes | |
name | string | yes |
| Status | Body | Notes |
|---|---|---|
| 201 | FlagSecretKeyCreated | |
| 400 | ErrorBody | |
| 403 | ErrorBody | |
| 404 | ErrorBody |
DELETE /app/projects/{project_id}/flags/secret-keys/{key_id}
Auth: console session cookie.
| Parameter | In | Type | Required | Description |
|---|---|---|---|---|
project_id | path | string (uuid) | yes | |
key_id | path | string (uuid) | yes |
GET /app/projects/{project_id}/insights
Auth: console session cookie.
| Parameter | In | Type | Required | Description |
|---|---|---|---|---|
project_id | path | string (uuid) | yes | |
search | path | string | null | yes | Case-insensitive substring of the name. |
tag | path | string | null | yes | |
favorited | path | boolean | null | yes | Only the caller's favourites (true) or only the others (false). |
kind | path | string | null | yes | trends |
limit | path | integer (int64) | null | yes | Default 50, max 200. |
offset | path | integer (int64) | null | yes |
| Status | Body | Notes |
|---|---|---|
| 200 | InsightListResponse | |
| 404 | ErrorBody |
POST /app/projects/{project_id}/insights
Auth: console session cookie.
| Parameter | In | Type | Required | Description |
|---|---|---|---|---|
project_id | path | string (uuid) | yes |
Request body (application/json): InsightCreateRequest
| Field | Type | Required | Description |
|---|---|---|---|
created_via | string | null | ui | |
description | string | null | ||
favorited | boolean | null | ||
name | string | yes | |
query | object | yes | |
tags | string[] | null | ||
viz | object | null |
| Status | Body | Notes |
|---|---|---|
| 201 | InsightDto | |
| 400 | ErrorBody | |
| 403 | ErrorBody | |
| 404 | ErrorBody |
GET /app/projects/{project_id}/insights/{insight_id}
Auth: console session cookie.
| Parameter | In | Type | Required | Description |
|---|---|---|---|---|
project_id | path | string (uuid) | yes | |
insight_id | path | string (uuid) | yes |
| Status | Body | Notes |
|---|---|---|
| 200 | InsightDto | |
| 404 | ErrorBody |
PATCH /app/projects/{project_id}/insights/{insight_id}
Auth: console session cookie.
| Parameter | In | Type | Required | Description |
|---|---|---|---|---|
project_id | path | string (uuid) | yes | |
insight_id | path | string (uuid) | yes |
Request body (application/json): InsightUpdateRequest
| Field | Type | Required | Description |
|---|---|---|---|
description | string | null | ||
favorited | boolean | null | ||
name | string | null | ||
query | object | null | ||
tags | string[] | null | ||
viz | object | null |
| Status | Body | Notes |
|---|---|---|
| 200 | InsightDto | |
| 400 | ErrorBody | |
| 403 | ErrorBody | |
| 404 | ErrorBody |
DELETE /app/projects/{project_id}/insights/{insight_id}
Auth: console session cookie.
| Parameter | In | Type | Required | Description |
|---|---|---|---|---|
project_id | path | string (uuid) | yes | |
insight_id | path | string (uuid) | yes |
PUT /app/projects/{project_id}/insights/{insight_id}/favorite
Star or un-star an insight for yourself (favourites are per user).
Auth: console session cookie.
| Parameter | In | Type | Required | Description |
|---|---|---|---|---|
project_id | path | string (uuid) | yes | |
insight_id | path | string (uuid) | yes |
Request body (application/json): InsightFavoriteRequest
| Field | Type | Required | Description |
|---|---|---|---|
favorite | boolean | yes |
| Status | Body | Notes |
|---|---|---|
| 200 | InsightDto | |
| 404 | ErrorBody |
GET /app/projects/{project_id}/integrations
Auth: console session cookie.
| Parameter | In | Type | Required | Description |
|---|---|---|---|---|
project_id | path | string (uuid) | yes |
| Status | Body | Notes |
|---|---|---|
| 200 | IntegrationList | |
| 404 | ErrorBody |
POST /app/projects/{project_id}/integrations
Auth: console session cookie.
| Parameter | In | Type | Required | Description |
|---|---|---|---|---|
project_id | path | string (uuid) | yes |
Request body (application/json): CreateIntegrationRequest
| Field | Type | Required | Description |
|---|---|---|---|
config | object | null | ||
name | string | null | ||
provider | string | yes | stripe |
secret | string | null | Stripe: the endpoint's signing secret (whsec_…). RevenueCat: the Authorization header value configured in its dashboard. App Store and Google Play take none. |
| Status | Body | Notes |
|---|---|---|
| 201 | IntegrationDto | |
| 400 | ErrorBody | |
| 403 | ErrorBody | |
| 404 | ErrorBody | |
| 503 | ErrorBody | INTEGRATIONS_KEK not configured |
GET /app/projects/{project_id}/integrations/{integration_id}
Auth: console session cookie.
| Parameter | In | Type | Required | Description |
|---|---|---|---|---|
project_id | path | string (uuid) | yes | |
integration_id | path | string (uuid) | yes |
| Status | Body | Notes |
|---|---|---|
| 200 | IntegrationDto | |
| 404 | ErrorBody |
PATCH /app/projects/{project_id}/integrations/{integration_id}
Auth: console session cookie.
| Parameter | In | Type | Required | Description |
|---|---|---|---|---|
project_id | path | string (uuid) | yes | |
integration_id | path | string (uuid) | yes |
Request body (application/json): UpdateIntegrationRequest
| Field | Type | Required | Description |
|---|---|---|---|
config | object | null | ||
name | string | null | ||
secret | string | null | Replace the stored secret (rotation). | |
status | string | null | active |
| Status | Body | Notes |
|---|---|---|
| 200 | IntegrationDto | |
| 400 | ErrorBody | |
| 403 | ErrorBody | |
| 404 | ErrorBody |
DELETE /app/projects/{project_id}/integrations/{integration_id}
Auth: console session cookie.
| Parameter | In | Type | Required | Description |
|---|---|---|---|---|
project_id | path | string (uuid) | yes | |
integration_id | path | string (uuid) | yes |
POST /app/projects/{project_id}/integrations/{integration_id}/rotate-token
Auth: console session cookie.
| Parameter | In | Type | Required | Description |
|---|---|---|---|---|
project_id | path | string (uuid) | yes | |
integration_id | path | string (uuid) | yes |
| Status | Body | Notes |
|---|---|---|
| 200 | IntegrationDto | |
| 403 | ErrorBody | |
| 404 | ErrorBody |
GET /app/projects/{project_id}/keys
Auth: console session cookie.
| Parameter | In | Type | Required | Description |
|---|---|---|---|---|
project_id | path | string (uuid) | yes |
POST /app/projects/{project_id}/keys/{key_id}/revoke
Auth: console session cookie.
| Parameter | In | Type | Required | Description |
|---|---|---|---|---|
project_id | path | string (uuid) | yes | |
key_id | path | string (uuid) | yes |
POST /app/projects/{project_id}/keys/{key_id}/rotate
Auth: console session cookie.
| Parameter | In | Type | Required | Description |
|---|---|---|---|---|
project_id | path | string (uuid) | yes | |
key_id | path | string (uuid) | yes |
Request body (application/json): RotateKeyRequest
| Field | Type | Required | Description |
|---|---|---|---|
keep_old | boolean | Keep the old key working (revoke it later). Default: revoke it now. |
| Status | Body | Notes |
|---|---|---|
| 200 | RotateKeyResponse | |
| 404 | ErrorBody | |
| 409 | ErrorBody |
GET /app/projects/{project_id}/metrics
Auth: console session cookie.
| Parameter | In | Type | Required | Description |
|---|---|---|---|---|
project_id | path | string (uuid) | yes | |
archived | path | boolean | null | yes |
| Status | Body | Notes |
|---|---|---|
| 200 | MetricListResponse | |
| 404 | ErrorBody |
POST /app/projects/{project_id}/metrics
Auth: console session cookie.
| Parameter | In | Type | Required | Description |
|---|---|---|---|---|
project_id | path | string (uuid) | yes |
Request body (application/json): MetricCreateRequest
| Field | Type | Required | Description |
|---|---|---|---|
description | string | null | ||
direction | string | null | ||
key | string | yes | |
monitor | boolean | null | ||
name | string | yes | |
owner_id | string (uuid) | null | ||
query | object | yes | |
unit | string | null |
GET /app/projects/{project_id}/metrics/{key}
Auth: console session cookie.
| Parameter | In | Type | Required | Description |
|---|---|---|---|---|
project_id | path | string (uuid) | yes | |
key | path | string | yes |
PATCH /app/projects/{project_id}/metrics/{key}
Append a new version (uncertified).
Auth: console session cookie.
| Parameter | In | Type | Required | Description |
|---|---|---|---|---|
project_id | path | string (uuid) | yes | |
key | path | string | yes |
Request body (application/json): MetricUpdateRequest
| Field | Type | Required | Description |
|---|---|---|---|
description | string | null | ||
direction | string | null | ||
monitor | boolean | null | ||
name | string | null | ||
owner_id | string (uuid) | null | ||
query | object | null | ||
unit | string | null |
POST /app/projects/{project_id}/metrics/{key}/archive
Auth: console session cookie.
| Parameter | In | Type | Required | Description |
|---|---|---|---|---|
project_id | path | string (uuid) | yes | |
key | path | string | yes |
POST /app/projects/{project_id}/metrics/{key}/certify
Auth: console session cookie.
| Parameter | In | Type | Required | Description |
|---|---|---|---|---|
project_id | path | string (uuid) | yes | |
key | path | string | yes |
GET /app/projects/{project_id}/metrics/{key}/versions
Auth: console session cookie.
| Parameter | In | Type | Required | Description |
|---|---|---|---|---|
project_id | path | string (uuid) | yes | |
key | path | string | yes |
| Status | Body | Notes |
|---|---|---|
| 200 | MetricListResponse | |
| 404 | ErrorBody |
POST /app/projects/{project_id}/region-token
Short-lived (≤ 15 min) EdDSA JWT for querying the project's region directly.
Auth: console session cookie.
| Parameter | In | Type | Required | Description |
|---|---|---|---|---|
project_id | path | string (uuid) | yes |
Request body (application/json): RegionTokenRequest
| Field | Type | Required | Description |
|---|---|---|---|
environment | string | null | production | |
scopes | string[] | null | Narrow further. Omit for every regional scope you hold. |
| Status | Body | Notes |
|---|---|---|
| 200 | RegionTokenResponse | |
| 403 | ErrorBody | |
| 404 | ErrorBody |
GET /app/regions
The region registry: where a project's data can live. Reference data; no session needed.
Auth: none.
| Status | Body | Notes |
|---|---|---|
| 200 | RegionList |
GET /app/tokens
Auth: console session cookie.
| Status | Body | Notes |
|---|---|---|
| 200 | TokenList |
POST /app/tokens
Create a personal access token. The secret is in the response once and never again.
Auth: console session cookie.
Request body (application/json): CreateTokenRequest
| Field | Type | Required | Description |
|---|---|---|---|
expires_in_days | integer (int32) | null | 1–365. Omit for a token that never expires. (min 0) | |
name | string | yes | |
org_id | string (uuid) | yes | |
project_ids | string (uuid)[] | null | Restrict to these projects. Omit for every project in the org. | |
scopes | string[] | yes | e.g. ["projects:read", "query:read"]. Must be held by your role; no wildcard exists. |
| Status | Body | Notes |
|---|---|---|
| 201 | CreatedTokenResponse | |
| 400 | ErrorBody | |
| 403 | ErrorBody | |
| 404 | ErrorBody |
DELETE /app/tokens/{token_id}
Auth: console session cookie.
| Parameter | In | Type | Required | Description |
|---|---|---|---|---|
token_id | path | string (uuid) | yes |
GET /healthz
Liveness + dependency probe: global Postgres and every configured regional Postgres.
Auth: none.
| Status | Body | Notes |
|---|---|---|
| 200 | HealthResponse | |
| 503 | HealthResponse |