# API reference

> Generated from the registry. Do not edit by hand.

Product version 0.3.0. A single version in the path, "/v1", for the whole API. Operation detail pages (parameters, response fields, examples) are published in French; every table row links to one. Types, bounds and required fields are in the machine-readable schemas: openapi.json for HTTP, mcp-tools.json for agent tools.

| Route | Operation | Summary |
| --- | --- | --- |
| `POST /v1/account/devices` | [`account.device.create`](../operations/account.device.create.md) | Register a device (APNs or FCM token) to receive the account's notifications. |
| `DELETE /v1/account/devices/{deviceId}` | [`account.device.revoke`](../operations/account.device.revoke.md) | Remove a registered device: no notification is sent to it any more. |
| `GET /v1/account/mcp-clients` | [`mcp_client.list`](../operations/mcp_client.list.md) | List the MCP clients you authorized: their name, scopes and last use. |
| `DELETE /v1/account/mcp-clients/{authorizationId}` | [`mcp_client.revoke`](../operations/mcp_client.revoke.md) | Withdraw an MCP client's authorization: its agent tokens are refused at the next call. |
| `GET /v1/account/mcp-consents/{requestId}` | [`mcp_client.consent.read`](../operations/mcp_client.consent.read.md) | Re-read a pending MCP client authorization request: its name, its address, the scopes it asks for. |
| `POST /v1/account/mcp-consents/{requestId}` | [`mcp_client.consent.create`](../operations/mcp_client.consent.create.md) | Consent to an MCP client's authorization request, or refuse it. Returns the address to send the browser to. |
| `GET /v1/account/notices` | [`account.notice.list`](../operations/account.notice.list.md) | Read the notices the platform addressed to the account, and what became of them. |
| `GET /v1/account/notifications` | [`account.notification.read`](../operations/account.notification.read.md) | Read, for an organization, the channels that notify the account of each kind of event, and its registered devices. |
| `PUT /v1/account/notifications` | [`account.notification.write`](../operations/account.notification.write.md) | Choose the channels that notify the account of one kind of event, in an organization. |
| `GET /v1/account/organizations` | [`account.organization.list`](../operations/account.organization.list.md) | List the organizations where the account holds a role: identifier, slug, name and roles. |
| `POST /v1/account/passkeys` | [`account.passkey.create`](../operations/account.passkey.create.md) | Start enrolling a passkey: returns the options the browser passes to navigator.credentials.create, with a challenge to sign within fifteen minutes. |
| `POST /v1/account/passkeys/{secondFactorId}/accept` | [`account.passkey.accept`](../operations/account.passkey.accept.md) | Confirm a pending passkey with the output of navigator.credentials.create: it becomes active, other sessions close, and the first factor returns ten codes, once. |
| `PUT /v1/account/password` | [`account.password.write`](../operations/account.password.write.md) | Change the password, under a console session: the current one is required, and the account's other sessions close. |
| `GET /v1/account/personal-access-tokens` | [`personal_access_token.list`](../operations/personal_access_token.list.md) | List your personal tokens: scopes, expiry, last use and its address, and when an unused token will be disabled. |
| `POST /v1/account/personal-access-tokens` | [`personal_access_token.create`](../operations/personal_access_token.create.md) | Mint a personal token: named scopes, an expiry of 365 days at most. Returned only once. |
| `DELETE /v1/account/personal-access-tokens/{tokenId}` | [`personal_access_token.revoke`](../operations/personal_access_token.revoke.md) | Revoke one of your personal tokens: it is refused at the next call. |
| `POST /v1/account/personal-access-tokens/{tokenId}/reactivate` | [`personal_access_token.reactivation.create`](../operations/personal_access_token.reactivation.create.md) | Reactivate one of your personal tokens disabled for inactivity, under a console session. |
| `POST /v1/account/recovery-codes` | [`account.recovery_codes.replace`](../operations/account.recovery_codes.replace.md) | Issue ten new recovery codes, the current password presented: the old ones stop working, the new ones are returned once. |
| `GET /v1/account/second-factors` | [`account.second_factor.list`](../operations/account.second_factor.list.md) | List the account's second factors and the number of recovery codes left; never a secret. |
| `POST /v1/account/second-factors` | [`account.second_factor.create`](../operations/account.second_factor.create.md) | Start enrolling an authenticator app: its secret is returned once, and the factor only counts once confirmed by a first code. |
| `POST /v1/account/second-factors/{secondFactorId}/accept` | [`account.second_factor.accept`](../operations/account.second_factor.accept.md) | Confirm a pending factor with a first valid code: it becomes active, other sessions close, and the first factor returns ten recovery codes, once. |
| `POST /v1/account/second-factors/{secondFactorId}/revoke` | [`account.second_factor.revoke`](../operations/account.second_factor.revoke.md) | Remove a second factor, the current password presented: other sessions close, and the last factor takes the recovery codes with it. |
| `GET /v1/account/sessions` | [`account.session.list`](../operations/account.session.list.md) | List the account's active console sessions: where they were opened and until when. |
| `DELETE /v1/account/sessions/{sessionId}` | [`account.session.revoke`](../operations/account.session.revoke.md) | Close one of the account's console sessions: it is refused at the next call. |
| `PATCH /v1/billing-entities/{billingEntityId}` | [`billing.manage`](../operations/billing.manage.md) | Manage billing, payment methods and the spending cap. |
| `GET /v1/billing-entities/{billingEntityId}/usage` | [`usage.read`](../operations/usage.read.md) | Read the consumption and usage counters of a contracting entity. |
| `DELETE /v1/organizations/{organizationId}` | [`organization.delete`](../operations/organization.delete.md) | Delete an organization and everything it contains. |
| `GET /v1/organizations/{organizationId}/agent-projects` | [`organization.agent_projects.read`](../operations/organization.agent_projects.read.md) | Read whether projects created by the organization's agents are claimed automatically. |
| `PUT /v1/organizations/{organizationId}/agent-projects` | [`organization.agent_projects.configure`](../operations/organization.agent_projects.configure.md) | Decide whether projects created by the organization's agents are claimed automatically by the account on whose behalf they act. |
| `GET /v1/organizations/{organizationId}/audit` | [`organization.audit.read`](../operations/organization.audit.read.md) | Read an organization's audit log outside its projects, most recent first. |
| `GET /v1/organizations/{organizationId}/github` | [`organization.github_connection.list`](../operations/organization.github_connection.list.md) | Read an organization's GitHub connections, and the address to install the application. |
| `POST /v1/organizations/{organizationId}/github` | [`organization.github_connection.create`](../operations/organization.github_connection.create.md) | Attach a GitHub application installation to the organization, on return from GitHub. |
| `GET /v1/organizations/{organizationId}/github/repositories` | [`organization.github_repository.list`](../operations/organization.github_repository.list.md) | Read the GitHub repositories the organization's connections open. |
| `POST /v1/organizations/{organizationId}/github/{connectionId}/revoke` | [`organization.github_connection.revoke`](../operations/organization.github_connection.revoke.md) | Remove a GitHub connection from the organization. |
| `GET /v1/organizations/{organizationId}/invitations` | [`organization.invitation.list`](../operations/organization.invitation.list.md) | Read an organization's pending invitations. |
| `POST /v1/organizations/{organizationId}/invitations` | [`organization.invitation.create`](../operations/organization.invitation.create.md) | Invite a person, by address, to an organization or one of its projects. |
| `POST /v1/organizations/{organizationId}/invitations/{invitationId}/revoke` | [`organization.invitation.revoke`](../operations/organization.invitation.revoke.md) | Revoke an organization invitation before it is accepted. |
| `GET /v1/organizations/{organizationId}/members` | [`member.list`](../operations/member.list.md) | List an organization's members and their active entitlements. |
| `POST /v1/organizations/{organizationId}/members` | [`member.manage`](../operations/member.manage.md) | Grant, change or remove an organization member's role. |
| `GET /v1/organizations/{organizationId}/projects` | [`project.list`](../operations/project.list.md) | List an organization's projects, page by page. |
| `POST /v1/organizations/{organizationId}/projects` | [`project.create`](../operations/project.create.md) | Create a project in an organization, without its backend. |
| `POST /v1/organizations/{organizationId}/projects/with-backend` | [`project.create_with_backend`](../operations/project.create_with_backend.md) | Create a project, its database and its first production deployment, in one call. |
| `GET /v1/organizations/{organizationId}/second-factor` | [`organization.second_factor.read`](../operations/organization.second_factor.read.md) | Read an organization's second factor requirement, and how many affected accounts do not hold one. |
| `PUT /v1/organizations/{organizationId}/second-factor` | [`organization.second_factor.configure`](../operations/organization.second_factor.configure.md) | Require, or stop requiring, a second factor from an organization's Owners, Administrators and Security members. |
| `GET /v1/organizations/{organizationId}/second-factor/exemptions` | [`organization.second_factor_exemption.list`](../operations/organization.second_factor_exemption.list.md) | List an organization's second factor exemptions: which service account, why, by whom, until when. |
| `POST /v1/organizations/{organizationId}/second-factor/exemptions` | [`organization.second_factor_exemption.create`](../operations/organization.second_factor_exemption.create.md) | Exempt a service account from the second factor, by name and with a reason, for three months at most. |
| `POST /v1/organizations/{organizationId}/second-factor/exemptions/{exemptionId}/revoke` | [`organization.second_factor_exemption.revoke`](../operations/organization.second_factor_exemption.revoke.md) | Remove a service account's second factor exemption. |
| `GET /v1/organizations/{organizationId}/service-tokens` | [`service_token.list`](../operations/service_token.list.md) | List an organization's service account tokens: scopes, projects, who answers for them, expiry, last use and its address. |
| `POST /v1/organizations/{organizationId}/service-tokens` | [`service_token.create`](../operations/service_token.create.md) | Mint a service account token: named scopes, a list of projects, ninety days at most. Returned only once. |
| `DELETE /v1/organizations/{organizationId}/service-tokens/{serviceTokenId}` | [`service_token.revoke`](../operations/service_token.revoke.md) | Revoke a service account token: it is refused at the next call. |
| `PUT /v1/organizations/{organizationId}/sso` | [`sso.configure`](../operations/sso.configure.md) | Configure an organization's single sign-on and directory. |
| `DELETE /v1/projects/{projectId}` | [`project.delete`](../operations/project.delete.md) | Request the deletion of a project, its environments and its data. |
| `GET /v1/projects/{projectId}` | [`project.read`](../operations/project.read.md) | Read a project's metadata and the state of its deployments. |
| `PATCH /v1/projects/{projectId}` | [`project.settings.write`](../operations/project.settings.write.md) | Change a project's settings. |
| `GET /v1/projects/{projectId}/access-requests` | [`access.request.list`](../operations/access.request.list.md) | List Glowsoft requests for access to a project's data, most recent first. |
| `POST /v1/projects/{projectId}/access-requests/{accessId}/acceptance` | [`access.request.accept`](../operations/access.request.accept.md) | Accept a Glowsoft request for access to a project's data. |
| `POST /v1/projects/{projectId}/access-requests/{accessId}/revocation` | [`access.request.revoke`](../operations/access.request.revoke.md) | Revoke an open Glowsoft access, or refuse a pending request. |
| `GET /v1/projects/{projectId}/audit` | [`audit.read`](../operations/audit.read.md) | Read the audit log of the caller's scope, most recent first. |
| `GET /v1/projects/{projectId}/auth-emails` | [`auth_email.list`](../operations/auth_email.list.md) | Read the sending log of a project's authentication emails. |
| `GET /v1/projects/{projectId}/backend` | [`backend.read`](../operations/backend.read.md) | Read a project's backend: its entry points, its publishable key and its keys. |
| `GET /v1/projects/{projectId}/backend/auth` | [`backend.auth.read`](../operations/backend.auth.read.md) | Read the authentication settings of a project's backend. |
| `PATCH /v1/projects/{projectId}/backend/auth` | [`backend.auth.configure`](../operations/backend.auth.configure.md) | Set the authentication of a project's backend. |
| `PUT /v1/projects/{projectId}/backend/auth/providers` | [`backend.auth_provider.configure`](../operations/backend.auth_provider.configure.md) | Configure a third-party identity provider for a project's backend. |
| `POST /v1/projects/{projectId}/backend/keys` | [`backend.key.create`](../operations/backend.key.create.md) | Mint a secret key for a project's backend. It is returned only once. |
| `DELETE /v1/projects/{projectId}/backend/keys/{keyId}` | [`backend.key.revoke`](../operations/backend.key.revoke.md) | Revoke one secret key of a project's backend, leaving the others untouched. |
| `POST /v1/projects/{projectId}/backend/publishable-key` | [`backend.key.replace`](../operations/backend.key.replace.md) | Replace the publishable key of a project's backend, in a single step. |
| `PUT /v1/projects/{projectId}/backend/realtime` | [`backend.realtime.configure`](../operations/backend.realtime.configure.md) | Turn a project's backend realtime on or off. |
| `GET /v1/projects/{projectId}/backend/schema-drift` | [`backend.schema_drift.read`](../operations/backend.schema_drift.read.md) | Read the gap between the schema declared by a project's repository and its actual database. |
| `POST /v1/projects/{projectId}/build-cache` | [`build_cache.manage`](../operations/build_cache.manage.md) | Purge a project's remote cache, by key or entirely, or set its retention. |
| `DELETE /v1/projects/{projectId}/bypass-tokens/{tokenId}` | [`preview.token.revoke`](../operations/preview.token.revoke.md) | Revoke a bypass token: the edge refuses it in under thirty seconds. |
| `POST /v1/projects/{projectId}/cache/purge` | [`cache.tag.revoke`](../operations/cache.tag.revoke.md) | Invalidate or delete from the edge cache what an environment stored under tags. |
| `POST /v1/projects/{projectId}/database/impersonations` | [`database.impersonation.create`](../operations/database.impersonation.create.md) | Open a session impersonating a user of the project's database. |
| `GET /v1/projects/{projectId}/database/impersonations/{impersonationId}` | [`database.impersonation.read`](../operations/database.impersonation.read.md) | Read as an impersonated user, to test a policy. |
| `POST /v1/projects/{projectId}/database/impersonations/{impersonationId}/write` | [`database.impersonation.write`](../operations/database.impersonation.write.md) | Write as an impersonated user, after confirmation. |
| `POST /v1/projects/{projectId}/database/migrations` | [`database.migrate`](../operations/database.migrate.md) | Apply a schema migration to a project's database. |
| `PUT /v1/projects/{projectId}/database/personal-columns` | [`database.personal_columns.configure`](../operations/database.personal_columns.configure.md) | Set the list of columns classified as personal data in a project's database. |
| `GET /v1/projects/{projectId}/database/policies` | [`database.policy.list`](../operations/database.policy.list.md) | List, for each table of the project, the policy the platform proposes. |
| `POST /v1/projects/{projectId}/database/policies` | [`database.policy.write`](../operations/database.policy.write.md) | Apply a row-level security policy to a table. |
| `POST /v1/projects/{projectId}/database/policies/proposed` | [`database.policy.write_proposed`](../operations/database.policy.write_proposed.md) | Apply to a table the policy the platform proposes, tested beforehand. |
| `GET /v1/projects/{projectId}/database/posture` | [`database.posture.read`](../operations/database.posture.read.md) | Read the latest security posture analysis of a project's database. |
| `PUT /v1/projects/{projectId}/database/posture` | [`database.posture.configure`](../operations/database.posture.configure.md) | Open, or not, the daily database posture fix as a merge request on the project's repository. |
| `POST /v1/projects/{projectId}/database/rls` | [`database.rls.configure`](../operations/database.rls.configure.md) | Turn row-level security on or off for a table. |
| `GET /v1/projects/{projectId}/database/sql` | [`database.sql.read`](../operations/database.sql.read.md) | Read a project's database with a read-only SQL statement. |
| `POST /v1/projects/{projectId}/database/sql` | [`database.sql.write`](../operations/database.sql.write.md) | Modify a project's database with a SQL statement, its effect measured first. |
| `POST /v1/projects/{projectId}/deletion/accept` | [`project.deletion.accept`](../operations/project.deletion.accept.md) | Validate a project's requested deletion: a second Owner, or the only one. |
| `POST /v1/projects/{projectId}/deletion/cancel` | [`project.deletion.cancel`](../operations/project.deletion.cancel.md) | Cancel a project's deletion: withdraw the request, cancel it during the grace period, or restore the project from the trash. |
| `POST /v1/projects/{projectId}/deploy-hooks` | [`deployment.hook.create`](../operations/deployment.hook.create.md) | Create a deploy hook: a signed address to call that deploys a branch to an environment. Its secret is returned only once. |
| `DELETE /v1/projects/{projectId}/deploy-hooks/{hookId}` | [`deployment.hook.revoke`](../operations/deployment.hook.revoke.md) | Revoke a deploy hook: its next call is refused. |
| `GET /v1/projects/{projectId}/deployments` | [`deployment.list`](../operations/deployment.list.md) | List a project's deployments, most recent first, page by page. |
| `POST /v1/projects/{projectId}/deployments` | [`deployment.create`](../operations/deployment.create.md) | Deploy: build a Git reference (without putting it live if needed) or promote an already built version. |
| `GET /v1/projects/{projectId}/deployments/{deploymentId}` | [`deployment.read`](../operations/deployment.read.md) | Read a deployment's state, its end cause and the duration of each step. |
| `GET /v1/projects/{projectId}/deployments/{deploymentId}/build-log` | [`deployment.log.read`](../operations/deployment.log.read.md) | Read a build log, structured by step and timestamped to the millisecond. |
| `POST /v1/projects/{projectId}/deployments/{deploymentId}/cancel` | [`deployment.cancel`](../operations/deployment.cancel.md) | Cancel a deployment still queued or building, before it has served. |
| `GET /v1/projects/{projectId}/deployments/{deploymentId}/screenshot` | [`deployment.screenshot.read`](../operations/deployment.screenshot.read.md) | Read a deployment's screenshot, taken once it became healthy. |
| `GET /v1/projects/{projectId}/domains` | [`domain.list`](../operations/domain.list.md) | List a project's host names, the environment each serves and its state. |
| `POST /v1/projects/{projectId}/domains` | [`domain.add`](../operations/domain.add.md) | Attach a domain to a project and start its verification. |
| `DELETE /v1/projects/{projectId}/domains/{domain}` | [`domain.delete`](../operations/domain.delete.md) | Remove a domain from a project: it stops being routed and certified. |
| `DELETE /v1/projects/{projectId}/env` | [`env.delete.nonproduction`](../operations/env.delete.nonproduction.md) | Delete a variable from a non-production environment. |
| `GET /v1/projects/{projectId}/env` | [`env.list`](../operations/env.list.md) | List an environment's variables, without any value. |
| `PUT /v1/projects/{projectId}/env` | [`env.write.nonproduction`](../operations/env.write.nonproduction.md) | Write an environment variable outside production. |
| `DELETE /v1/projects/{projectId}/env/production` | [`env.delete.production`](../operations/env.delete.production.md) | Delete a variable from the production environment. |
| `PUT /v1/projects/{projectId}/env/production` | [`env.write.production`](../operations/env.write.production.md) | Write a variable or a secret of the production environment. |
| `GET /v1/projects/{projectId}/env/pull` | [`env.pull.nonproduction`](../operations/env.pull.nonproduction.md) | Read the non-sensitive variables of a non-production environment. |
| `GET /v1/projects/{projectId}/env/pull/production` | [`env.pull.production`](../operations/env.pull.production.md) | Read the non-sensitive variables of the production environment. |
| `GET /v1/projects/{projectId}/environments` | [`environment.list`](../operations/environment.list.md) | List a project's environments and what each is serving right now. |
| `POST /v1/projects/{projectId}/environments/{environmentId}/bypass-tokens` | [`preview.token.create`](../operations/preview.token.create.md) | Mint a bypass token for a preview: it goes through the preview whatever its mode. Returned only once. |
| `POST /v1/projects/{projectId}/environments/{environmentId}/preview-sessions` | [`preview.session.create`](../operations/preview.session.create.md) | Open a preview as a project member: returns the single-use address to enter by. |
| `GET /v1/projects/{projectId}/error-pages` | [`errorpage.read`](../operations/errorpage.read.md) | Read the error pages a project has set. |
| `PUT /v1/projects/{projectId}/error-pages` | [`errorpage.configure`](../operations/errorpage.configure.md) | Set, replace or remove a project's error pages, in French and English. |
| `PUT /v1/projects/{projectId}/firewall` | [`firewall.configure`](../operations/firewall.configure.md) | Configure the application firewall, rate limiting and address lists. |
| `POST /v1/projects/{projectId}/forks/{number}/accept` | [`preview.fork.accept`](../operations/preview.fork.accept.md) | Authorize the commit of a merge request coming from a fork: it is built and deployed, with no secret. |
| `GET /v1/projects/{projectId}/images` | [`image.read`](../operations/image.read.md) | Read a project's allowed image sources and its monthly transformation counter. |
| `PUT /v1/projects/{projectId}/images` | [`image.configure`](../operations/image.configure.md) | Set a project's allowed image sources, and obtain the key that signs its URLs. |
| `GET /v1/projects/{projectId}/logs` | [`logs.read`](../operations/logs.read.md) | Read an environment's runtime logs over a time window. |
| `POST /v1/projects/{projectId}/ownership/accept` | [`project.ownership.accept`](../operations/project.ownership.accept.md) | Claim a project created by an agent: it becomes an ordinary project, with no expiry. |
| `POST /v1/projects/{projectId}/previews` | [`preview.manage`](../operations/preview.manage.md) | Create or destroy a preview attached to a branch. |
| `PUT /v1/projects/{projectId}/previews/protection` | [`preview.protection.configure`](../operations/preview.protection.configure.md) | Set what a project's previews require: nothing, a password, project membership, or an allowed address. |
| `POST /v1/projects/{projectId}/proposals/accept` | [`agent.proposal.accept`](../operations/agent.proposal.accept.md) | Accept a proposal filed by an agent and merge it. |
| `GET /v1/projects/{projectId}/restorable` | [`deployment.restorable.list`](../operations/deployment.restorable.list.md) | What a restore would bring back, and what it would not. |
| `POST /v1/projects/{projectId}/rollback` | [`deployment.rollback`](../operations/deployment.rollback.md) | Restore an environment's previous release, without rebuilding. |
| `GET /v1/projects/{projectId}/secrets/reveal` | [`secret.reveal`](../operations/secret.reveal.md) | Read a secret's value in clear. Allowed to no role, without exception. |
| `GET /v1/projects/{projectId}/tasks/{taskId}` | [`task.read`](../operations/task.read.md) | Read the progress of a long-running task without keeping the connection open. |
| `POST /v1/projects/{projectId}/undo` | [`action.undo`](../operations/action.undo.md) | Undo, in one call and within five minutes, a class E action using the token it returned. |
| `POST /v1/projects/{projectId}/unpin` | [`environment.unpin`](../operations/environment.unpin.md) | Lift an environment's pin and promote the latest healthy deployment. |
| `GET /v1/projects/{projectId}/vercel-imports` | [`vercel_import.list`](../operations/vercel_import.list.md) | Read a project's Vercel imports: state, report, acknowledgements and calls to the source. |
| `POST /v1/projects/{projectId}/vercel-imports` | [`vercel_import.create`](../operations/vercel_import.create.md) | Import a Vercel project's configuration: glowsoft.json and a three-category report. |
| `POST /v1/projects/{projectId}/vercel-imports/{importId}/accept` | [`vercel_import.accept`](../operations/vercel_import.accept.md) | Acknowledge the items of a Vercel import that have no equivalent, and validate the migration. |
| `POST /v1/projects/{projectId}/vercel-imports/{importId}/variables` | [`vercel_import.variables.create`](../operations/vercel_import.variables.create.md) | Import a Vercel project's variables by target and branch, with a token from the source. |
| `GET /v1/projects/{projectId}/webhooks` | [`webhook.list`](../operations/webhook.list.md) | Read a project's webhooks: its receiving endpoints and their deliveries, page by page. |
| `POST /v1/projects/{projectId}/webhooks` | [`webhook.endpoint.create`](../operations/webhook.endpoint.create.md) | Declare a webhook receiving endpoint for a project. Its secret is returned only once. |
| `POST /v1/projects/{projectId}/webhooks/deliveries/{deliveryId}/replays` | [`webhook.replay.create`](../operations/webhook.replay.create.md) | Replay a finished delivery: one immediate attempt, then the dead letter queue if it fails. |
| `DELETE /v1/projects/{projectId}/webhooks/{endpointId}` | [`webhook.endpoint.delete`](../operations/webhook.endpoint.delete.md) | Delete a receiving endpoint: its pending deliveries go with it. |
| `POST /v1/projects/{projectId}/webhooks/{endpointId}/secret` | [`webhook.secret.replace`](../operations/webhook.secret.replace.md) | Replace an endpoint's secret: the old one still signs for 24 hours, then nothing. |
