atrixANALYTICS
REST APIReference

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

FieldTypeRequiredDescription
current_passwordstringyes
new_passwordstringyesSame policy as signup: at least 10 characters, not common, not breached.
StatusBodyNotes
204—Changed; other sessions revoked
400ErrorBody
401ErrorBody
429ErrorBody

POST /app/auth/login

Auth: none.

Request body (application/json): LoginRequest

FieldTypeRequiredDescription
emailstringyes
passwordstringyes
StatusBodyNotes
200MeResponseLogged in; atx_session cookie set
401ErrorBody
429ErrorBody

POST /app/auth/logout

Auth: console session cookie.

StatusBodyNotes
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

FieldTypeRequiredDescription
emailstringyes
StatusBodyNotes
202AcceptedResponse
429ErrorBody

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

FieldTypeRequiredDescription
new_passwordstringyes
tokenstringyesThe single-use token from the emailed link.
StatusBodyNotes
204—Password set; all sessions revoked
400ErrorBody
429ErrorBody

GET /app/auth/sessions

Your signed-in sessions (never with an IP address).

Auth: console session cookie.

StatusBodyNotes
200SessionList
401ErrorBody

DELETE /app/auth/sessions/{session_id}

Sign out one of your sessions.

Auth: console session cookie.

ParameterInTypeRequiredDescription
session_idpathstring (uuid)yes
StatusBodyNotes
204—
401ErrorBody
404ErrorBody

POST /app/auth/sessions/revoke-others

Sign out every session except this one.

Auth: console session cookie.

POST /app/auth/signup

Create an account, its personal organisation, and a session.

Auth: none.

Request body (application/json): SignupRequest

FieldTypeRequiredDescription
emailstringyes
namestringyes
passwordstringyesAt least 10 characters; common and breached passwords are refused.
StatusBodyNotes
201MeResponseSigned up; atx_session cookie set
400ErrorBody
409ErrorBody
429ErrorBody

POST /app/auth/verify-email

Auth: none.

Request body (application/json): TokenRequest

FieldTypeRequiredDescription
tokenstringyesThe single-use token from the emailed link.
StatusBodyNotes
204—Email verified
404ErrorBody

POST /app/auth/verify-email/send

Send a fresh verification link (no-op when the email is already verified).

Auth: console session cookie.

StatusBodyNotes
204—
401ErrorBody
429ErrorBody

POST /app/invitations/accept

Accept an invitation addressed to the signed-in user's email.

Auth: console session cookie.

Request body (application/json): TokenRequest

FieldTypeRequiredDescription
tokenstringyesThe single-use token from the emailed link.
StatusBodyNotes
200OrgDto
404ErrorBody

GET /app/me

Auth: console session cookie.

StatusBodyNotes
200MeResponse
401ErrorBody

GET /app/oauth/connections

Your OAuth connections (MCP clients and other apps you approved).

Auth: console session cookie.

StatusBodyNotes
200ConnectionList
401ErrorBody

DELETE /app/oauth/connections/{grant_id}

Disconnect: revokes the grant and every token cut from it.

Auth: console session cookie.

ParameterInTypeRequiredDescription
grant_idpathstring (uuid)yes
StatusBodyNotes
204—
404ErrorBody

GET /app/orgs

Auth: console session cookie.

StatusBodyNotes
200OrgList

POST /app/orgs

Auth: console session cookie.

Request body (application/json): OrgNameRequest

FieldTypeRequiredDescription
namestringyes
StatusBodyNotes
201OrgDto

PATCH /app/orgs/{org_id}

Auth: console session cookie.

ParameterInTypeRequiredDescription
org_idpathstring (uuid)yes

Request body (application/json): OrgNameRequest

FieldTypeRequiredDescription
namestringyes
StatusBodyNotes
200OrgDto
403ErrorBody
404ErrorBody

GET /app/orgs/{org_id}/billing

Billing overview: plan, usage this period, current and projected invoice, spend cap, ingest stage.

Auth: console session cookie.

ParameterInTypeRequiredDescription
org_idpathstring (uuid)yes
StatusBodyNotes
200objectBilling overview
403ErrorBody
404ErrorBody

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.

ParameterInTypeRequiredDescription
org_idpathstring (uuid)yes

Request body (application/json): CapRequest

FieldTypeRequiredDescription
spend_cap_minorinteger (int64)yesThe new spend cap in minor units of the account currency. Mandatory, never below the plan price plus overage already billed this period.
StatusBodyNotes
200CapResponse
400ErrorBody
403ErrorBody
404ErrorBody

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.

ParameterInTypeRequiredDescription
org_idpathstring (uuid)yes

Request body (application/json): CheckoutRequest

FieldTypeRequiredDescription
planstringyesstarter, growth or scale.
StatusBodyNotes
200object{kind: redirect, url} or {kind: plan_changed, plan, proration}
400ErrorBody
403ErrorBody
404ErrorBody
409ErrorBody
503ErrorBody

POST /app/orgs/{org_id}/billing/portal

A Stripe Customer Portal session (payment methods, invoices, cancellation).

Auth: console session cookie.

ParameterInTypeRequiredDescription
org_idpathstring (uuid)yes

POST /app/orgs/{org_id}/invitations

Auth: console session cookie.

ParameterInTypeRequiredDescription
org_idpathstring (uuid)yes

Request body (application/json): InviteRequest

FieldTypeRequiredDescription
emailstringyes
rolestringyesowner
StatusBodyNotes
201InvitationDto
403ErrorBody
404ErrorBody
409ErrorBody

DELETE /app/orgs/{org_id}/invitations/{invitation_id}

Auth: console session cookie.

ParameterInTypeRequiredDescription
org_idpathstring (uuid)yes
invitation_idpathstring (uuid)yes
StatusBodyNotes
204—
404ErrorBody

GET /app/orgs/{org_id}/members

Auth: console session cookie.

ParameterInTypeRequiredDescription
org_idpathstring (uuid)yes
StatusBodyNotes
200MembersResponse
404ErrorBody

PATCH /app/orgs/{org_id}/members/{member_id}

Auth: console session cookie.

ParameterInTypeRequiredDescription
org_idpathstring (uuid)yes
member_idpathstring (uuid)yes

Request body (application/json): RoleRequest

FieldTypeRequiredDescription
rolestringyes
StatusBodyNotes
200MemberDto
403ErrorBody
404ErrorBody
409ErrorBody

DELETE /app/orgs/{org_id}/members/{member_id}

Auth: console session cookie.

ParameterInTypeRequiredDescription
org_idpathstring (uuid)yes
member_idpathstring (uuid)yes
StatusBodyNotes
204—
403ErrorBody
404ErrorBody
409ErrorBody

GET /app/orgs/{org_id}/projects

Auth: console session cookie.

ParameterInTypeRequiredDescription
org_idpathstring (uuid)yes
StatusBodyNotes
200ProjectList
404ErrorBody

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.

ParameterInTypeRequiredDescription
org_idpathstring (uuid)yes

Request body (application/json): CreateProjectRequest

FieldTypeRequiredDescription
currencystring | nullISO 4217, default USD.
namestringyes
regionstringyesRegion code. Fixed for the life of the project. Only live regions are accepted.
timezonestring | nullIANA zone, default UTC.

GET /app/projects/{project_id}

Auth: console session cookie.

ParameterInTypeRequiredDescription
project_idpathstring (uuid)yes
StatusBodyNotes
200ProjectDto
404ErrorBody

PATCH /app/projects/{project_id}

Auth: console session cookie.

ParameterInTypeRequiredDescription
project_idpathstring (uuid)yes

Request body (application/json): RenameRequest

FieldTypeRequiredDescription
namestringyes
StatusBodyNotes
200ProjectDto
403ErrorBody
404ErrorBody

DELETE /app/projects/{project_id}

Soft-delete a project and revoke all of its keys.

Auth: console session cookie.

ParameterInTypeRequiredDescription
project_idpathstring (uuid)yes
StatusBodyNotes
204—
403ErrorBody
404ErrorBody

GET /app/projects/{project_id}/annotations

Auth: console session cookie.

ParameterInTypeRequiredDescription
project_idpathstring (uuid)yes
frompathstring (date-time) | nullyesRFC 3339; default 90 days ago.
topathstring (date-time) | nullyesRFC 3339; default now + 1 day.
kindpathstring | nullyes
StatusBodyNotes
200AnnotationListResponse
404ErrorBody

POST /app/projects/{project_id}/annotations

Auth: console session cookie.

ParameterInTypeRequiredDescription
project_idpathstring (uuid)yes

Request body (application/json): AnnotationCreateRequest

FieldTypeRequiredDescription
contentstringyes
kindstringyes
occurred_atstring (date-time)yes
refobject | null
StatusBodyNotes
201AnnotationDto
400ErrorBody
404ErrorBody

PATCH /app/projects/{project_id}/annotations/{annotation_id}

Auth: console session cookie.

ParameterInTypeRequiredDescription
project_idpathstring (uuid)yes
annotation_idpathstring (uuid)yes

Request body (application/json): AnnotationUpdateRequest

FieldTypeRequiredDescription
contentstring | null
kindstring | null
occurred_atstring (date-time) | null
StatusBodyNotes
200AnnotationDto
404ErrorBody
409ErrorBody

DELETE /app/projects/{project_id}/annotations/{annotation_id}

Auth: console session cookie.

ParameterInTypeRequiredDescription
project_idpathstring (uuid)yes
annotation_idpathstring (uuid)yes
StatusBodyNotes
204—
404ErrorBody
409ErrorBody

GET /app/projects/{project_id}/catalog/codegen

Auth: console session cookie.

ParameterInTypeRequiredDescription
project_idpathstring (uuid)yes
StatusBodyNotes
200CatalogCodegenExport
404ErrorBody

GET /app/projects/{project_id}/catalog/events

Auth: console session cookie.

ParameterInTypeRequiredDescription
project_idpathstring (uuid)yes
statuspathstring | nullyes
searchpathstring | nullyes

POST /app/projects/{project_id}/catalog/events

Auth: console session cookie.

ParameterInTypeRequiredDescription
project_idpathstring (uuid)yes

Request body (application/json): CatalogEventCreateRequest

FieldTypeRequiredDescription
descriptionstring | null
display_namestring | null
namestringyes
owner_idstring (uuid) | null
pii_levelstring | null
platformsstring[] | null
propertiesCatalogPropertyInput[] | null
questionstring | null
statusstring | null
tagsstring[] | null

GET /app/projects/{project_id}/catalog/events/{event_id}

Auth: console session cookie.

ParameterInTypeRequiredDescription
project_idpathstring (uuid)yes
event_idpathstring (uuid)yes
StatusBodyNotes
200CatalogEventDto
404ErrorBody

PATCH /app/projects/{project_id}/catalog/events/{event_id}

Auth: console session cookie.

ParameterInTypeRequiredDescription
project_idpathstring (uuid)yes
event_idpathstring (uuid)yes

Request body (application/json): CatalogEventUpdateRequest

FieldTypeRequiredDescription
descriptionstring | null
display_namestring | null
owner_idstring (uuid) | null
pii_levelstring | null
platformsstring[] | null
propertiesCatalogPropertyInput[] | null
questionstring | null
statusstring | null
tagsstring[] | null
StatusBodyNotes
200CatalogEventDto
400ErrorBody
404ErrorBody

DELETE /app/projects/{project_id}/catalog/events/{event_id}

Auth: console session cookie.

ParameterInTypeRequiredDescription
project_idpathstring (uuid)yes
event_idpathstring (uuid)yes
StatusBodyNotes
204—
404ErrorBody

POST /app/projects/{project_id}/catalog/sync

Merge what the region has seen into the plan (planned → implemented, unknown → unplanned).

Auth: console session cookie.

ParameterInTypeRequiredDescription
project_idpathstring (uuid)yes

Request body (application/json): CatalogSyncRequest

FieldTypeRequiredDescription
daysinteger (int32) | null(min 0)
environmentstring | null

GET /app/projects/{project_id}/cohorts

Auth: console session cookie.

ParameterInTypeRequiredDescription
project_idpathstring (uuid)yes
StatusBodyNotes
200CohortListResponse
404ErrorBody

POST /app/projects/{project_id}/cohorts

Auth: console session cookie.

ParameterInTypeRequiredDescription
project_idpathstring (uuid)yes

Request body (application/json): CohortCreateRequest

FieldTypeRequiredDescription
definitionobject | null
descriptionstring | null
kindstringyes
namestringyes
StatusBodyNotes
201CohortDto
400ErrorBody
404ErrorBody

GET /app/projects/{project_id}/cohorts/{cohort_id}

Auth: console session cookie.

ParameterInTypeRequiredDescription
project_idpathstring (uuid)yes
cohort_idpathstring (uuid)yes
StatusBodyNotes
200CohortDto
404ErrorBody

PATCH /app/projects/{project_id}/cohorts/{cohort_id}

Auth: console session cookie.

ParameterInTypeRequiredDescription
project_idpathstring (uuid)yes
cohort_idpathstring (uuid)yes

Request body (application/json): CohortUpdateRequest

FieldTypeRequiredDescription
definitionobject | null
descriptionstring | null
namestring | null
StatusBodyNotes
200CohortDto
400ErrorBody
404ErrorBody

DELETE /app/projects/{project_id}/cohorts/{cohort_id}

Auth: console session cookie.

ParameterInTypeRequiredDescription
project_idpathstring (uuid)yes
cohort_idpathstring (uuid)yes
StatusBodyNotes
204—
404ErrorBody

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.

ParameterInTypeRequiredDescription
project_idpathstring (uuid)yes
cohort_idpathstring (uuid)yes

Request body (application/json): CohortCalculateRequest

FieldTypeRequiredDescription
environmentstring | null
StatusBodyNotes
200CohortDto
404ErrorBody
503ErrorBody

GET /app/projects/{project_id}/dashboards

Auth: console session cookie.

ParameterInTypeRequiredDescription
project_idpathstring (uuid)yes
StatusBodyNotes
200DashboardListResponse
404ErrorBody

POST /app/projects/{project_id}/dashboards

Auth: console session cookie.

ParameterInTypeRequiredDescription
project_idpathstring (uuid)yes

Request body (application/json): DashboardCreateRequest

FieldTypeRequiredDescription
date_rangeobject | null
descriptionstring | null
filtersobject | null
is_homeboolean | null
namestringyes
tagsstring[] | null
StatusBodyNotes
201DashboardDto
400ErrorBody
403ErrorBody
404ErrorBody

GET /app/projects/{project_id}/dashboards/{dashboard_id}

Auth: console session cookie.

ParameterInTypeRequiredDescription
project_idpathstring (uuid)yes
dashboard_idpathstring (uuid)yes
StatusBodyNotes
200DashboardDto
404ErrorBody

PATCH /app/projects/{project_id}/dashboards/{dashboard_id}

Auth: console session cookie.

ParameterInTypeRequiredDescription
project_idpathstring (uuid)yes
dashboard_idpathstring (uuid)yes

Request body (application/json): DashboardUpdateRequest

FieldTypeRequiredDescription
date_rangeobject | null
descriptionstring | null
filtersobject | null
is_homeboolean | null
namestring | null
tagsstring[] | null
StatusBodyNotes
200DashboardDto
400ErrorBody
403ErrorBody
404ErrorBody

DELETE /app/projects/{project_id}/dashboards/{dashboard_id}

Auth: console session cookie.

ParameterInTypeRequiredDescription
project_idpathstring (uuid)yes
dashboard_idpathstring (uuid)yes
StatusBodyNotes
204—
403ErrorBody
404ErrorBody

POST /app/projects/{project_id}/dashboards/{dashboard_id}/layout

Auth: console session cookie.

ParameterInTypeRequiredDescription
project_idpathstring (uuid)yes
dashboard_idpathstring (uuid)yes

Request body (application/json): LayoutRequest

FieldTypeRequiredDescription
tilesTilePosition[]yes
StatusBodyNotes
200DashboardDto
400ErrorBody
404ErrorBody

POST /app/projects/{project_id}/dashboards/{dashboard_id}/tiles

Auth: console session cookie.

ParameterInTypeRequiredDescription
project_idpathstring (uuid)yes
dashboard_idpathstring (uuid)yes

Request body (application/json): TileCreateRequest

FieldTypeRequiredDescription
bodystring | null
insight_idstring (uuid) | null
kindstringyesinsight
layoutany | null | TileLayout

PATCH /app/projects/{project_id}/dashboards/{dashboard_id}/tiles/{tile_id}

Auth: console session cookie.

ParameterInTypeRequiredDescription
project_idpathstring (uuid)yes
dashboard_idpathstring (uuid)yes
tile_idpathstring (uuid)yes

Request body (application/json): TileUpdateRequest

FieldTypeRequiredDescription
bodystring | null
layoutany | null | TileLayout
StatusBodyNotes
200DashboardTileDto
400ErrorBody
404ErrorBody

DELETE /app/projects/{project_id}/dashboards/{dashboard_id}/tiles/{tile_id}

Auth: console session cookie.

ParameterInTypeRequiredDescription
project_idpathstring (uuid)yes
dashboard_idpathstring (uuid)yes
tile_idpathstring (uuid)yes
StatusBodyNotes
204—
404ErrorBody

GET /app/projects/{project_id}/experiments

Auth: console session cookie.

ParameterInTypeRequiredDescription
project_idpathstring (uuid)yes
StatusBodyNotes
200ExperimentListResponse
404ErrorBody

POST /app/projects/{project_id}/experiments

Auth: console session cookie.

ParameterInTypeRequiredDescription
project_idpathstring (uuid)yes
dry_runqueryboolean

Request body (application/json): ExperimentCreateRequest

FieldTypeRequiredDescription
alphanumber (double) | null
attribution_window_hoursinteger (int32) | null
control_variantstring | null
cupedany | null | ExperimentCuped
environmentstring | null
flag_idstring (uuid)yes
guardrailsExperimentGuardrail[] | null
hypothesisstring | null
keystringyes
mdenumber (double) | null
methodstring | null
namestringyes
powernumber (double) | null
primary_metric_idstring (uuid) | null
secondary_metric_idsstring (uuid)[] | null
winsor_pctnumber (double) | null
StatusBodyNotes
200DryRundry_run
201ExperimentDto
400ErrorBody
403ErrorBody
404ErrorBody
409ErrorBody

GET /app/projects/{project_id}/experiments/{experiment_id}

Auth: console session cookie.

ParameterInTypeRequiredDescription
project_idpathstring (uuid)yes
experiment_idpathstring (uuid)yes
StatusBodyNotes
200ExperimentDto
404ErrorBody

PATCH /app/projects/{project_id}/experiments/{experiment_id}

Auth: console session cookie.

ParameterInTypeRequiredDescription
project_idpathstring (uuid)yes
experiment_idpathstring (uuid)yes
dry_runqueryboolean

Request body (application/json): ExperimentUpdateRequest

FieldTypeRequiredDescription
alphanumber (double) | null
attribution_window_hoursinteger (int32) | null
control_variantstring | null
cupedany | null | ExperimentCuped
guardrailsExperimentGuardrail[] | null
hypothesisstring | null
mdenumber (double) | null
methodstring | null
namestring | null
powernumber (double) | null
primary_metric_idstring (uuid) | null
secondary_metric_idsstring (uuid)[] | null
winsor_pctnumber (double) | null

DELETE /app/projects/{project_id}/experiments/{experiment_id}

Auth: console session cookie.

ParameterInTypeRequiredDescription
project_idpathstring (uuid)yes
experiment_idpathstring (uuid)yes
dry_runqueryboolean
StatusBodyNotes
200ExperimentDtoarchived
403ErrorBody
404ErrorBody
409ErrorBody

POST /app/projects/{project_id}/experiments/{experiment_id}/launch

Auth: console session cookie.

ParameterInTypeRequiredDescription
project_idpathstring (uuid)yes
experiment_idpathstring (uuid)yes
dry_runqueryboolean

Request body (application/json): ExperimentTransitionRequest

FieldTypeRequiredDescription
override_blockboolean | null
reasonstring | null
variantstring | null
StatusBodyNotes
200ExperimentDto
400ErrorBody
403ErrorBodyflags.production needed in production
404ErrorBody
409ErrorBody

GET /app/projects/{project_id}/experiments/{experiment_id}/results

Auth: console session cookie.

ParameterInTypeRequiredDescription
project_idpathstring (uuid)yes
experiment_idpathstring (uuid)yes
refreshpathboolean | nullyesRecompute now instead of returning a result younger than 5 minutes.

POST /app/projects/{project_id}/experiments/{experiment_id}/ship

Auth: console session cookie.

ParameterInTypeRequiredDescription
project_idpathstring (uuid)yes
experiment_idpathstring (uuid)yes
dry_runqueryboolean

Request body (application/json): ExperimentTransitionRequest

FieldTypeRequiredDescription
override_blockboolean | null
reasonstring | null
variantstring | null
StatusBodyNotes
200ExperimentDto
400ErrorBody
403ErrorBodyexperiments.ship (and flags.production in production)
404ErrorBody
409ErrorBodyexperiment_blocked

POST /app/projects/{project_id}/experiments/{experiment_id}/stop

Auth: console session cookie.

ParameterInTypeRequiredDescription
project_idpathstring (uuid)yes
experiment_idpathstring (uuid)yes
dry_runqueryboolean

Request body (application/json): ExperimentTransitionRequest

FieldTypeRequiredDescription
override_blockboolean | null
reasonstring | null
variantstring | null
StatusBodyNotes
200ExperimentDto
403ErrorBody
404ErrorBody
409ErrorBody

POST /app/projects/{project_id}/experiments/plan

Auth: console session cookie.

ParameterInTypeRequiredDescription
project_idpathstring (uuid)yes

Request body (application/json): ExperimentPlanRequest

FieldTypeRequiredDescription
alphanumber (double) | null
control_unitsnumber (double) | null
daily_unitsnumber (double) | null
mdenumber (double)yes
mde_kindstring | null
methodstring | null
metricobjectyes
powernumber (double) | null
variantsinteger (int32) | null(min 0)

GET /app/projects/{project_id}/findings/destinations

Auth: console session cookie.

ParameterInTypeRequiredDescription
project_idpathstring (uuid)yes

POST /app/projects/{project_id}/findings/destinations

Auth: console session cookie.

ParameterInTypeRequiredDescription
project_idpathstring (uuid)yes

Request body (application/json): DestinationCreateRequest

FieldTypeRequiredDescription
configany | null | DestinationConfig
enabledboolean | null
kindstringyes
min_severitystring | null
namestringyes
secretstring | nullslack: the incoming-webhook URL; webhook: the endpoint URL.
signing_secretstring | nullwebhook: the HMAC signing secret.

PATCH /app/projects/{project_id}/findings/destinations/{destination_id}

Auth: console session cookie.

ParameterInTypeRequiredDescription
project_idpathstring (uuid)yes
destination_idpathstring (uuid)yes

Request body (application/json): DestinationUpdateRequest

FieldTypeRequiredDescription
configany | null | DestinationConfig
enabledboolean | null
min_severitystring | null
namestring | null
secretstring | null
signing_secretstring | null
StatusBodyNotes
200DestinationDto
400ErrorBody
404ErrorBody

DELETE /app/projects/{project_id}/findings/destinations/{destination_id}

Auth: console session cookie.

ParameterInTypeRequiredDescription
project_idpathstring (uuid)yes
destination_idpathstring (uuid)yes
StatusBodyNotes
204—
404ErrorBody

GET /app/projects/{project_id}/findings/rules

Auth: console session cookie.

ParameterInTypeRequiredDescription
project_idpathstring (uuid)yes
StatusBodyNotes
200RuleListResponse
404ErrorBody

POST /app/projects/{project_id}/findings/rules

Auth: console session cookie.

ParameterInTypeRequiredDescription
project_idpathstring (uuid)yes

Request body (application/json): RuleCreateRequest

FieldTypeRequiredDescription
cadencestring | null
daily_capinteger (int32) | null
destination_idsstring (uuid)[] | null
enabledboolean | null
min_severitystring | null
namestringyes
targetRuleTargetyes
thresholdsany | null | Thresholds
StatusBodyNotes
201RuleDto
400ErrorBody
404ErrorBody

PATCH /app/projects/{project_id}/findings/rules/{rule_id}

Auth: console session cookie.

ParameterInTypeRequiredDescription
project_idpathstring (uuid)yes
rule_idpathstring (uuid)yes

Request body (application/json): RuleUpdateRequest

FieldTypeRequiredDescription
cadencestring | null
daily_capinteger (int32) | nullnull clears the cap (deployment default).
destination_idsstring (uuid)[] | null
enabledboolean | null
min_severitystring | null
namestring | null
targetany | null | RuleTarget
thresholdsany | null | Thresholds
StatusBodyNotes
200RuleDto
400ErrorBody
404ErrorBody

DELETE /app/projects/{project_id}/findings/rules/{rule_id}

Auth: console session cookie.

ParameterInTypeRequiredDescription
project_idpathstring (uuid)yes
rule_idpathstring (uuid)yes
StatusBodyNotes
204—
404ErrorBody

GET /app/projects/{project_id}/flags

Auth: console session cookie.

ParameterInTypeRequiredDescription
project_idpathstring (uuid)yes
archivedpathboolean | nullyesInclude archived flags.
searchpathstring | nullyesCase-insensitive match on key or name.
StatusBodyNotes
200FlagListResponse
404ErrorBody

POST /app/projects/{project_id}/flags

Auth: console session cookie.

ParameterInTypeRequiredDescription
project_idpathstring (uuid)yes
dry_runqueryboolean

Request body (application/json): FlagCreateRequest

FieldTypeRequiredDescription
descriptionstring | null
keystringyes
kindstring | nullboolean
namestringyes
payloadobject | null
rulesobject[] | null
stickinessstring | null
tagsstring[] | null
variantsobject[] | null
StatusBodyNotes
200DryRundry_run
201FlagDto
400ErrorBody
403ErrorBody
404ErrorBody
409ErrorBody

GET /app/projects/{project_id}/flags/{flag_id}

Auth: console session cookie.

ParameterInTypeRequiredDescription
project_idpathstring (uuid)yes
flag_idpathstring (uuid)yes
StatusBodyNotes
200FlagDto
404ErrorBody

PATCH /app/projects/{project_id}/flags/{flag_id}

Auth: console session cookie.

ParameterInTypeRequiredDescription
project_idpathstring (uuid)yes
flag_idpathstring (uuid)yes
dry_runqueryboolean

Request body (application/json): FlagUpdateRequest

FieldTypeRequiredDescription
descriptionstring | null
namestring | null
owner_idstring (uuid) | null
tagsstring[] | null
StatusBodyNotes
200FlagDto
400ErrorBody
403ErrorBody
404ErrorBody

DELETE /app/projects/{project_id}/flags/{flag_id}

Auth: console session cookie.

ParameterInTypeRequiredDescription
project_idpathstring (uuid)yes
flag_idpathstring (uuid)yes
dry_runqueryboolean
StatusBodyNotes
200FlagDtoarchived
403ErrorBody
404ErrorBody
409ErrorBody

PATCH /app/projects/{project_id}/flags/{flag_id}/environments/{environment}

Auth: console session cookie.

ParameterInTypeRequiredDescription
project_idpathstring (uuid)yes
flag_idpathstring (uuid)yes
environmentpathstringyes
dry_runqueryboolean

Request body (application/json): FlagEnvironmentUpdateRequest

FieldTypeRequiredDescription
enabledboolean | null
payloadobject | nullnull clears the payload.
rulesobject[] | null
saltstring | null
stickinessstring | null
variantsobject[] | null
StatusBodyNotes
200FlagDto
400ErrorBody
403ErrorBodymissing flags:write, or flags.production for a live production config
404ErrorBody
409ErrorBody

GET /app/projects/{project_id}/flags/publications

Auth: console session cookie.

ParameterInTypeRequiredDescription
project_idpathstring (uuid)yes
environmentpathstring | nullyes

GET /app/projects/{project_id}/flags/secret-keys

Auth: console session cookie.

ParameterInTypeRequiredDescription
project_idpathstring (uuid)yes

POST /app/projects/{project_id}/flags/secret-keys

Auth: console session cookie.

ParameterInTypeRequiredDescription
project_idpathstring (uuid)yes

Request body (application/json): FlagSecretKeyCreateRequest

FieldTypeRequiredDescription
environmentstringyes
namestringyes

DELETE /app/projects/{project_id}/flags/secret-keys/{key_id}

Auth: console session cookie.

ParameterInTypeRequiredDescription
project_idpathstring (uuid)yes
key_idpathstring (uuid)yes
StatusBodyNotes
204—
403ErrorBody
404ErrorBody

GET /app/projects/{project_id}/insights

Auth: console session cookie.

ParameterInTypeRequiredDescription
project_idpathstring (uuid)yes
searchpathstring | nullyesCase-insensitive substring of the name.
tagpathstring | nullyes
favoritedpathboolean | nullyesOnly the caller's favourites (true) or only the others (false).
kindpathstring | nullyestrends
limitpathinteger (int64) | nullyesDefault 50, max 200.
offsetpathinteger (int64) | nullyes
StatusBodyNotes
200InsightListResponse
404ErrorBody

POST /app/projects/{project_id}/insights

Auth: console session cookie.

ParameterInTypeRequiredDescription
project_idpathstring (uuid)yes

Request body (application/json): InsightCreateRequest

FieldTypeRequiredDescription
created_viastring | nullui
descriptionstring | null
favoritedboolean | null
namestringyes
queryobjectyes
tagsstring[] | null
vizobject | null
StatusBodyNotes
201InsightDto
400ErrorBody
403ErrorBody
404ErrorBody

GET /app/projects/{project_id}/insights/{insight_id}

Auth: console session cookie.

ParameterInTypeRequiredDescription
project_idpathstring (uuid)yes
insight_idpathstring (uuid)yes
StatusBodyNotes
200InsightDto
404ErrorBody

PATCH /app/projects/{project_id}/insights/{insight_id}

Auth: console session cookie.

ParameterInTypeRequiredDescription
project_idpathstring (uuid)yes
insight_idpathstring (uuid)yes

Request body (application/json): InsightUpdateRequest

FieldTypeRequiredDescription
descriptionstring | null
favoritedboolean | null
namestring | null
queryobject | null
tagsstring[] | null
vizobject | null
StatusBodyNotes
200InsightDto
400ErrorBody
403ErrorBody
404ErrorBody

DELETE /app/projects/{project_id}/insights/{insight_id}

Auth: console session cookie.

ParameterInTypeRequiredDescription
project_idpathstring (uuid)yes
insight_idpathstring (uuid)yes
StatusBodyNotes
204—
403ErrorBody
404ErrorBody

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.

ParameterInTypeRequiredDescription
project_idpathstring (uuid)yes
insight_idpathstring (uuid)yes

Request body (application/json): InsightFavoriteRequest

FieldTypeRequiredDescription
favoritebooleanyes
StatusBodyNotes
200InsightDto
404ErrorBody

GET /app/projects/{project_id}/integrations

Auth: console session cookie.

ParameterInTypeRequiredDescription
project_idpathstring (uuid)yes
StatusBodyNotes
200IntegrationList
404ErrorBody

POST /app/projects/{project_id}/integrations

Auth: console session cookie.

ParameterInTypeRequiredDescription
project_idpathstring (uuid)yes

Request body (application/json): CreateIntegrationRequest

FieldTypeRequiredDescription
configobject | null
namestring | null
providerstringyesstripe
secretstring | nullStripe: the endpoint's signing secret (whsec_…). RevenueCat: the Authorization header value configured in its dashboard. App Store and Google Play take none.
StatusBodyNotes
201IntegrationDto
400ErrorBody
403ErrorBody
404ErrorBody
503ErrorBodyINTEGRATIONS_KEK not configured

GET /app/projects/{project_id}/integrations/{integration_id}

Auth: console session cookie.

ParameterInTypeRequiredDescription
project_idpathstring (uuid)yes
integration_idpathstring (uuid)yes
StatusBodyNotes
200IntegrationDto
404ErrorBody

PATCH /app/projects/{project_id}/integrations/{integration_id}

Auth: console session cookie.

ParameterInTypeRequiredDescription
project_idpathstring (uuid)yes
integration_idpathstring (uuid)yes

Request body (application/json): UpdateIntegrationRequest

FieldTypeRequiredDescription
configobject | null
namestring | null
secretstring | nullReplace the stored secret (rotation).
statusstring | nullactive

DELETE /app/projects/{project_id}/integrations/{integration_id}

Auth: console session cookie.

ParameterInTypeRequiredDescription
project_idpathstring (uuid)yes
integration_idpathstring (uuid)yes
StatusBodyNotes
204—
403ErrorBody
404ErrorBody

POST /app/projects/{project_id}/integrations/{integration_id}/rotate-token

Auth: console session cookie.

ParameterInTypeRequiredDescription
project_idpathstring (uuid)yes
integration_idpathstring (uuid)yes
StatusBodyNotes
200IntegrationDto
403ErrorBody
404ErrorBody

GET /app/projects/{project_id}/keys

Auth: console session cookie.

ParameterInTypeRequiredDescription
project_idpathstring (uuid)yes
StatusBodyNotes
200KeyList
404ErrorBody

POST /app/projects/{project_id}/keys/{key_id}/revoke

Auth: console session cookie.

ParameterInTypeRequiredDescription
project_idpathstring (uuid)yes
key_idpathstring (uuid)yes
StatusBodyNotes
200KeyDto
404ErrorBody

POST /app/projects/{project_id}/keys/{key_id}/rotate

Auth: console session cookie.

ParameterInTypeRequiredDescription
project_idpathstring (uuid)yes
key_idpathstring (uuid)yes

Request body (application/json): RotateKeyRequest

FieldTypeRequiredDescription
keep_oldbooleanKeep the old key working (revoke it later). Default: revoke it now.
StatusBodyNotes
200RotateKeyResponse
404ErrorBody
409ErrorBody

GET /app/projects/{project_id}/metrics

Auth: console session cookie.

ParameterInTypeRequiredDescription
project_idpathstring (uuid)yes
archivedpathboolean | nullyes
StatusBodyNotes
200MetricListResponse
404ErrorBody

POST /app/projects/{project_id}/metrics

Auth: console session cookie.

ParameterInTypeRequiredDescription
project_idpathstring (uuid)yes

Request body (application/json): MetricCreateRequest

FieldTypeRequiredDescription
descriptionstring | null
directionstring | null
keystringyes
monitorboolean | null
namestringyes
owner_idstring (uuid) | null
queryobjectyes
unitstring | null
StatusBodyNotes
201MetricDto
400ErrorBody
409ErrorBody

GET /app/projects/{project_id}/metrics/{key}

Auth: console session cookie.

ParameterInTypeRequiredDescription
project_idpathstring (uuid)yes
keypathstringyes
StatusBodyNotes
200MetricDto
404ErrorBody

PATCH /app/projects/{project_id}/metrics/{key}

Append a new version (uncertified).

Auth: console session cookie.

ParameterInTypeRequiredDescription
project_idpathstring (uuid)yes
keypathstringyes

Request body (application/json): MetricUpdateRequest

FieldTypeRequiredDescription
descriptionstring | null
directionstring | null
monitorboolean | null
namestring | null
owner_idstring (uuid) | null
queryobject | null
unitstring | null
StatusBodyNotes
200MetricDto
400ErrorBody
404ErrorBody
409ErrorBody

POST /app/projects/{project_id}/metrics/{key}/archive

Auth: console session cookie.

ParameterInTypeRequiredDescription
project_idpathstring (uuid)yes
keypathstringyes
StatusBodyNotes
200MetricDto
404ErrorBody

POST /app/projects/{project_id}/metrics/{key}/certify

Auth: console session cookie.

ParameterInTypeRequiredDescription
project_idpathstring (uuid)yes
keypathstringyes
StatusBodyNotes
200MetricDto
403ErrorBody
404ErrorBody

GET /app/projects/{project_id}/metrics/{key}/versions

Auth: console session cookie.

ParameterInTypeRequiredDescription
project_idpathstring (uuid)yes
keypathstringyes
StatusBodyNotes
200MetricListResponse
404ErrorBody

POST /app/projects/{project_id}/region-token

Short-lived (≤ 15 min) EdDSA JWT for querying the project's region directly.

Auth: console session cookie.

ParameterInTypeRequiredDescription
project_idpathstring (uuid)yes

Request body (application/json): RegionTokenRequest

FieldTypeRequiredDescription
environmentstring | nullproduction
scopesstring[] | nullNarrow further. Omit for every regional scope you hold.

GET /app/regions

The region registry: where a project's data can live. Reference data; no session needed.

Auth: none.

StatusBodyNotes
200RegionList

GET /app/tokens

Auth: console session cookie.

StatusBodyNotes
200TokenList

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

FieldTypeRequiredDescription
expires_in_daysinteger (int32) | null1–365. Omit for a token that never expires. (min 0)
namestringyes
org_idstring (uuid)yes
project_idsstring (uuid)[] | nullRestrict to these projects. Omit for every project in the org.
scopesstring[]yese.g. ["projects:read", "query:read"]. Must be held by your role; no wildcard exists.

DELETE /app/tokens/{token_id}

Auth: console session cookie.

ParameterInTypeRequiredDescription
token_idpathstring (uuid)yes
StatusBodyNotes
200TokenDto
404ErrorBody

GET /healthz

Liveness + dependency probe: global Postgres and every configured regional Postgres.

Auth: none.

StatusBodyNotes
200HealthResponse
503HealthResponse

On this page

POST /app/auth/change-passwordPOST /app/auth/loginPOST /app/auth/logoutPOST /app/auth/password-resetPOST /app/auth/password-reset/confirmGET /app/auth/sessionsDELETE /app/auth/sessions/{session_id}POST /app/auth/sessions/revoke-othersPOST /app/auth/signupPOST /app/auth/verify-emailPOST /app/auth/verify-email/sendPOST /app/invitations/acceptGET /app/meGET /app/oauth/connectionsDELETE /app/oauth/connections/{grant_id}GET /app/orgsPOST /app/orgsPATCH /app/orgs/{org_id}GET /app/orgs/{org_id}/billingPATCH /app/orgs/{org_id}/billing/capPOST /app/orgs/{org_id}/billing/checkoutPOST /app/orgs/{org_id}/billing/portalPOST /app/orgs/{org_id}/invitationsDELETE /app/orgs/{org_id}/invitations/{invitation_id}GET /app/orgs/{org_id}/membersPATCH /app/orgs/{org_id}/members/{member_id}DELETE /app/orgs/{org_id}/members/{member_id}GET /app/orgs/{org_id}/projectsPOST /app/orgs/{org_id}/projectsGET /app/projects/{project_id}PATCH /app/projects/{project_id}DELETE /app/projects/{project_id}GET /app/projects/{project_id}/annotationsPOST /app/projects/{project_id}/annotationsPATCH /app/projects/{project_id}/annotations/{annotation_id}DELETE /app/projects/{project_id}/annotations/{annotation_id}GET /app/projects/{project_id}/catalog/codegenGET /app/projects/{project_id}/catalog/eventsPOST /app/projects/{project_id}/catalog/eventsGET /app/projects/{project_id}/catalog/events/{event_id}PATCH /app/projects/{project_id}/catalog/events/{event_id}DELETE /app/projects/{project_id}/catalog/events/{event_id}POST /app/projects/{project_id}/catalog/syncGET /app/projects/{project_id}/cohortsPOST /app/projects/{project_id}/cohortsGET /app/projects/{project_id}/cohorts/{cohort_id}PATCH /app/projects/{project_id}/cohorts/{cohort_id}DELETE /app/projects/{project_id}/cohorts/{cohort_id}POST /app/projects/{project_id}/cohorts/{cohort_id}/calculateGET /app/projects/{project_id}/dashboardsPOST /app/projects/{project_id}/dashboardsGET /app/projects/{project_id}/dashboards/{dashboard_id}PATCH /app/projects/{project_id}/dashboards/{dashboard_id}DELETE /app/projects/{project_id}/dashboards/{dashboard_id}POST /app/projects/{project_id}/dashboards/{dashboard_id}/layoutPOST /app/projects/{project_id}/dashboards/{dashboard_id}/tilesPATCH /app/projects/{project_id}/dashboards/{dashboard_id}/tiles/{tile_id}DELETE /app/projects/{project_id}/dashboards/{dashboard_id}/tiles/{tile_id}GET /app/projects/{project_id}/experimentsPOST /app/projects/{project_id}/experimentsGET /app/projects/{project_id}/experiments/{experiment_id}PATCH /app/projects/{project_id}/experiments/{experiment_id}DELETE /app/projects/{project_id}/experiments/{experiment_id}POST /app/projects/{project_id}/experiments/{experiment_id}/launchGET /app/projects/{project_id}/experiments/{experiment_id}/resultsPOST /app/projects/{project_id}/experiments/{experiment_id}/shipPOST /app/projects/{project_id}/experiments/{experiment_id}/stopPOST /app/projects/{project_id}/experiments/planGET /app/projects/{project_id}/findings/destinationsPOST /app/projects/{project_id}/findings/destinationsPATCH /app/projects/{project_id}/findings/destinations/{destination_id}DELETE /app/projects/{project_id}/findings/destinations/{destination_id}GET /app/projects/{project_id}/findings/rulesPOST /app/projects/{project_id}/findings/rulesPATCH /app/projects/{project_id}/findings/rules/{rule_id}DELETE /app/projects/{project_id}/findings/rules/{rule_id}GET /app/projects/{project_id}/flagsPOST /app/projects/{project_id}/flagsGET /app/projects/{project_id}/flags/{flag_id}PATCH /app/projects/{project_id}/flags/{flag_id}DELETE /app/projects/{project_id}/flags/{flag_id}PATCH /app/projects/{project_id}/flags/{flag_id}/environments/{environment}GET /app/projects/{project_id}/flags/publicationsGET /app/projects/{project_id}/flags/secret-keysPOST /app/projects/{project_id}/flags/secret-keysDELETE /app/projects/{project_id}/flags/secret-keys/{key_id}GET /app/projects/{project_id}/insightsPOST /app/projects/{project_id}/insightsGET /app/projects/{project_id}/insights/{insight_id}PATCH /app/projects/{project_id}/insights/{insight_id}DELETE /app/projects/{project_id}/insights/{insight_id}PUT /app/projects/{project_id}/insights/{insight_id}/favoriteGET /app/projects/{project_id}/integrationsPOST /app/projects/{project_id}/integrationsGET /app/projects/{project_id}/integrations/{integration_id}PATCH /app/projects/{project_id}/integrations/{integration_id}DELETE /app/projects/{project_id}/integrations/{integration_id}POST /app/projects/{project_id}/integrations/{integration_id}/rotate-tokenGET /app/projects/{project_id}/keysPOST /app/projects/{project_id}/keys/{key_id}/revokePOST /app/projects/{project_id}/keys/{key_id}/rotateGET /app/projects/{project_id}/metricsPOST /app/projects/{project_id}/metricsGET /app/projects/{project_id}/metrics/{key}PATCH /app/projects/{project_id}/metrics/{key}POST /app/projects/{project_id}/metrics/{key}/archivePOST /app/projects/{project_id}/metrics/{key}/certifyGET /app/projects/{project_id}/metrics/{key}/versionsPOST /app/projects/{project_id}/region-tokenGET /app/regionsGET /app/tokensPOST /app/tokensDELETE /app/tokens/{token_id}GET /healthz