API reference
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](/docs/reference/account.device.create) | Register a device (APNs or FCM token) to receive the account's notifications. |
DELETE /v1/account/devices/{deviceId} | [account.device.revoke](/docs/reference/account.device.revoke) | Remove a registered device: no notification is sent to it any more. |
POST /v1/account/invitations/accept | [account.invitation.accept](/docs/reference/account.invitation.accept) | Join the organization, or the project, of an invitation received by email, with the role it carries. |
GET /v1/account/mcp-clients | [mcp_client.list](/docs/reference/mcp_client.list) | List the MCP clients you authorized: their name, scopes and last use. |
DELETE /v1/account/mcp-clients/{authorizationId} | [mcp_client.revoke](/docs/reference/mcp_client.revoke) | 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](/docs/reference/mcp_client.consent.read) | 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](/docs/reference/mcp_client.consent.create) | 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](/docs/reference/account.notice.list) | Read the notices the platform addressed to the account, and what became of them. |
GET /v1/account/notifications | [account.notification.read](/docs/reference/account.notification.read) | 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](/docs/reference/account.notification.write) | Choose the channels that notify the account of one kind of event, in an organization. |
GET /v1/account/organizations | [account.organization.list](/docs/reference/account.organization.list) | List the organizations where the account holds a role: identifier, slug, name and roles. |
POST /v1/account/passkeys | [account.passkey.create](/docs/reference/account.passkey.create) | 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](/docs/reference/account.passkey.accept) | 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](/docs/reference/account.password.write) | 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](/docs/reference/personal_access_token.list) | 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](/docs/reference/personal_access_token.create) | 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](/docs/reference/personal_access_token.revoke) | 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](/docs/reference/personal_access_token.reactivation.create) | Reactivate one of your personal tokens disabled for inactivity, under a console session. |
POST /v1/account/recovery-codes | [account.recovery_codes.replace](/docs/reference/account.recovery_codes.replace) | 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](/docs/reference/account.second_factor.list) | 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](/docs/reference/account.second_factor.create) | 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](/docs/reference/account.second_factor.accept) | 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](/docs/reference/account.second_factor.revoke) | 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](/docs/reference/account.session.list) | List the account's active console sessions: where they were opened and until when. |
DELETE /v1/account/sessions/{sessionId} | [account.session.revoke](/docs/reference/account.session.revoke) | Close one of the account's console sessions: it is refused at the next call. |
PATCH /v1/billing-entities/{billingEntityId} | [billing.manage](/docs/reference/billing.manage) | Manage billing, payment methods and the spending cap. |
GET /v1/billing-entities/{billingEntityId}/usage | [usage.read](/docs/reference/usage.read) | Read the consumption and usage counters of a contracting entity. |
DELETE /v1/organizations/{organizationId} | [organization.delete](/docs/reference/organization.delete) | Delete an organization and everything it contains. |
GET /v1/organizations/{organizationId}/agent-projects | [organization.agent_projects.read](/docs/reference/organization.agent_projects.read) | Read whether projects created by the organization's agents are claimed automatically. |
PUT /v1/organizations/{organizationId}/agent-projects | [organization.agent_projects.configure](/docs/reference/organization.agent_projects.configure) | 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](/docs/reference/organization.audit.read) | Read an organization's audit log outside its projects, most recent first. |
GET /v1/organizations/{organizationId}/billing | [organization.billing.read](/docs/reference/organization.billing.read) | Read an organization's billing: details, spend cap, this month's plans and invoices. |
GET /v1/organizations/{organizationId}/github | [organization.github_connection.list](/docs/reference/organization.github_connection.list) | Read an organization's GitHub connections, and the address to install the application. |
POST /v1/organizations/{organizationId}/github | [organization.github_connection.create](/docs/reference/organization.github_connection.create) | Attach a GitHub application installation to the organization, on return from GitHub. |
GET /v1/organizations/{organizationId}/github/repositories | [organization.github_repository.list](/docs/reference/organization.github_repository.list) | Read the GitHub repositories the organization's connections open. |
POST /v1/organizations/{organizationId}/github/{connectionId}/revoke | [organization.github_connection.revoke](/docs/reference/organization.github_connection.revoke) | Remove a GitHub connection from the organization. |
GET /v1/organizations/{organizationId}/invitations | [organization.invitation.list](/docs/reference/organization.invitation.list) | Read an organization's pending invitations. |
POST /v1/organizations/{organizationId}/invitations | [organization.invitation.create](/docs/reference/organization.invitation.create) | Invite a person, by address, to an organization or one of its projects. |
POST /v1/organizations/{organizationId}/invitations/{invitationId}/revoke | [organization.invitation.revoke](/docs/reference/organization.invitation.revoke) | Revoke an organization invitation before it is accepted. |
GET /v1/organizations/{organizationId}/invoices/{invoiceId} | [organization.invoice.read](/docs/reference/organization.invoice.read) | Download an issued invoice: its Factur-X PDF, as archived at issuance. |
GET /v1/organizations/{organizationId}/members | [member.list](/docs/reference/member.list) | List an organization's members and their active entitlements. |
POST /v1/organizations/{organizationId}/members | [member.manage](/docs/reference/member.manage) | Grant, change or remove an organization member's role. |
GET /v1/organizations/{organizationId}/payment-method | [organization.payment_method.read](/docs/reference/organization.payment_method.read) | Read an organization's payment method: the valid mandate's card, read from Mollie. |
PUT /v1/organizations/{organizationId}/payment-method | [organization.payment_method.write](/docs/reference/organization.payment_method.write) | Register a card: the Mollie Components token, then 3-D Secure at Mollie. |
GET /v1/organizations/{organizationId}/projects | [project.list](/docs/reference/project.list) | List an organization's projects, page by page. |
POST /v1/organizations/{organizationId}/projects | [project.create](/docs/reference/project.create) | Create a project in an organization, without its backend. |
POST /v1/organizations/{organizationId}/projects/with-backend | [project.create_with_backend](/docs/reference/project.create_with_backend) | Create a project, its database and its first production deployment, in one call. |
GET /v1/organizations/{organizationId}/second-factor | [organization.second_factor.read](/docs/reference/organization.second_factor.read) | 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](/docs/reference/organization.second_factor.configure) | 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](/docs/reference/organization.second_factor_exemption.list) | 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](/docs/reference/organization.second_factor_exemption.create) | 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](/docs/reference/organization.second_factor_exemption.revoke) | Remove a service account's second factor exemption. |
GET /v1/organizations/{organizationId}/service-tokens | [service_token.list](/docs/reference/service_token.list) | 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](/docs/reference/service_token.create) | 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](/docs/reference/service_token.revoke) | Revoke a service account token: it is refused at the next call. |
PUT /v1/organizations/{organizationId}/sso | [sso.configure](/docs/reference/sso.configure) | Configure an organization's single sign-on and directory. |
DELETE /v1/projects/{projectId} | [project.delete](/docs/reference/project.delete) | Request the deletion of a project, its environments and its data. |
GET /v1/projects/{projectId} | [project.read](/docs/reference/project.read) | Read a project's metadata and the state of its deployments. |
PATCH /v1/projects/{projectId} | [project.settings.write](/docs/reference/project.settings.write) | Change a project's settings. |
GET /v1/projects/{projectId}/access-requests | [access.request.list](/docs/reference/access.request.list) | List Glowsoft requests for access to a project's data, most recent first. |
POST /v1/projects/{projectId}/access-requests/{accessId}/acceptance | [access.request.accept](/docs/reference/access.request.accept) | Accept a Glowsoft request for access to a project's data. |
POST /v1/projects/{projectId}/access-requests/{accessId}/revocation | [access.request.revoke](/docs/reference/access.request.revoke) | Revoke an open Glowsoft access, or refuse a pending request. |
GET /v1/projects/{projectId}/audit | [audit.read](/docs/reference/audit.read) | Read the audit log of the caller's scope, most recent first. |
GET /v1/projects/{projectId}/auth-emails | [auth_email.list](/docs/reference/auth_email.list) | Read the sending log of a project's authentication emails. |
GET /v1/projects/{projectId}/backend | [backend.read](/docs/reference/backend.read) | Read a project's backend: its entry points, its publishable key and its keys. |
GET /v1/projects/{projectId}/backend/auth | [backend.auth.read](/docs/reference/backend.auth.read) | Read the authentication settings of a project's backend. |
PATCH /v1/projects/{projectId}/backend/auth | [backend.auth.configure](/docs/reference/backend.auth.configure) | Set the authentication of a project's backend. |
PUT /v1/projects/{projectId}/backend/auth/providers | [backend.auth_provider.configure](/docs/reference/backend.auth_provider.configure) | Configure a third-party identity provider for a project's backend. |
POST /v1/projects/{projectId}/backend/keys | [backend.key.create](/docs/reference/backend.key.create) | Mint a secret key for a project's backend. It is returned only once. |
DELETE /v1/projects/{projectId}/backend/keys/{keyId} | [backend.key.revoke](/docs/reference/backend.key.revoke) | Revoke one secret key of a project's backend, leaving the others untouched. |
POST /v1/projects/{projectId}/backend/publishable-key | [backend.key.replace](/docs/reference/backend.key.replace) | Replace the publishable key of a project's backend, in a single step. |
PUT /v1/projects/{projectId}/backend/realtime | [backend.realtime.configure](/docs/reference/backend.realtime.configure) | Turn a project's backend realtime on or off. |
GET /v1/projects/{projectId}/backend/schema-drift | [backend.schema_drift.read](/docs/reference/backend.schema_drift.read) | 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](/docs/reference/build_cache.manage) | Purge a project's remote cache, by key or entirely, or set its retention. |
DELETE /v1/projects/{projectId}/bypass-tokens/{tokenId} | [preview.token.revoke](/docs/reference/preview.token.revoke) | Revoke a bypass token: the edge refuses it in under thirty seconds. |
POST /v1/projects/{projectId}/cache/purge | [cache.tag.revoke](/docs/reference/cache.tag.revoke) | Invalidate or delete from the edge cache what an environment stored under tags. |
POST /v1/projects/{projectId}/database/impersonations | [database.impersonation.create](/docs/reference/database.impersonation.create) | Open a session impersonating a user of the project's database. |
GET /v1/projects/{projectId}/database/impersonations/{impersonationId} | [database.impersonation.read](/docs/reference/database.impersonation.read) | Read as an impersonated user, to test a policy. |
POST /v1/projects/{projectId}/database/impersonations/{impersonationId}/write | [database.impersonation.write](/docs/reference/database.impersonation.write) | Write as an impersonated user, after confirmation. |
POST /v1/projects/{projectId}/database/migrations | [database.migrate](/docs/reference/database.migrate) | Apply a schema migration to a project's database. |
PUT /v1/projects/{projectId}/database/personal-columns | [database.personal_columns.configure](/docs/reference/database.personal_columns.configure) | Set the list of columns classified as personal data in a project's database. |
GET /v1/projects/{projectId}/database/policies | [database.policy.list](/docs/reference/database.policy.list) | List, for each table of the project, the policy the platform proposes. |
POST /v1/projects/{projectId}/database/policies | [database.policy.write](/docs/reference/database.policy.write) | Apply a row-level security policy to a table. |
POST /v1/projects/{projectId}/database/policies/proposed | [database.policy.write_proposed](/docs/reference/database.policy.write_proposed) | Apply to a table the policy the platform proposes, tested beforehand. |
GET /v1/projects/{projectId}/database/posture | [database.posture.read](/docs/reference/database.posture.read) | Read the latest security posture analysis of a project's database. |
PUT /v1/projects/{projectId}/database/posture | [database.posture.configure](/docs/reference/database.posture.configure) | 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](/docs/reference/database.rls.configure) | Turn row-level security on or off for a table. |
GET /v1/projects/{projectId}/database/sql | [database.sql.read](/docs/reference/database.sql.read) | Read a project's database with a read-only SQL statement. |
POST /v1/projects/{projectId}/database/sql | [database.sql.write](/docs/reference/database.sql.write) | Modify a project's database with a SQL statement, its effect measured first. |
POST /v1/projects/{projectId}/deletion/accept | [project.deletion.accept](/docs/reference/project.deletion.accept) | Validate a project's requested deletion: a second Owner, or the only one. |
POST /v1/projects/{projectId}/deletion/cancel | [project.deletion.cancel](/docs/reference/project.deletion.cancel) | 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](/docs/reference/deployment.hook.create) | 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](/docs/reference/deployment.hook.revoke) | Revoke a deploy hook: its next call is refused. |
GET /v1/projects/{projectId}/deployments | [deployment.list](/docs/reference/deployment.list) | List a project's deployments, most recent first, page by page. |
POST /v1/projects/{projectId}/deployments | [deployment.create](/docs/reference/deployment.create) | 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](/docs/reference/deployment.read) | 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](/docs/reference/deployment.log.read) | Read a build log, structured by step and timestamped to the millisecond. |
POST /v1/projects/{projectId}/deployments/{deploymentId}/cancel | [deployment.cancel](/docs/reference/deployment.cancel) | Cancel a deployment still queued or building, before it has served. |
GET /v1/projects/{projectId}/deployments/{deploymentId}/screenshot | [deployment.screenshot.read](/docs/reference/deployment.screenshot.read) | Read a deployment's screenshot, taken once it became healthy. |
GET /v1/projects/{projectId}/domains | [domain.list](/docs/reference/domain.list) | List a project's host names, the environment each serves and its state. |
POST /v1/projects/{projectId}/domains | [domain.add](/docs/reference/domain.add) | Attach a domain to a project and start its verification. |
DELETE /v1/projects/{projectId}/domains/{domain} | [domain.delete](/docs/reference/domain.delete) | Remove a domain from a project: it stops being routed and certified. |
DELETE /v1/projects/{projectId}/env | [env.delete.nonproduction](/docs/reference/env.delete.nonproduction) | Delete a variable from a non-production environment. |
GET /v1/projects/{projectId}/env | [env.list](/docs/reference/env.list) | List an environment's variables, without any value. |
PUT /v1/projects/{projectId}/env | [env.write.nonproduction](/docs/reference/env.write.nonproduction) | Write an environment variable outside production. |
DELETE /v1/projects/{projectId}/env/production | [env.delete.production](/docs/reference/env.delete.production) | Delete a variable from the production environment. |
PUT /v1/projects/{projectId}/env/production | [env.write.production](/docs/reference/env.write.production) | Write a variable or a secret of the production environment. |
GET /v1/projects/{projectId}/env/pull | [env.pull.nonproduction](/docs/reference/env.pull.nonproduction) | Read the non-sensitive variables of a non-production environment. |
GET /v1/projects/{projectId}/env/pull/production | [env.pull.production](/docs/reference/env.pull.production) | Read the non-sensitive variables of the production environment. |
GET /v1/projects/{projectId}/environments | [environment.list](/docs/reference/environment.list) | List a project's environments and what each is serving right now. |
POST /v1/projects/{projectId}/environments/{environmentId}/bypass-tokens | [preview.token.create](/docs/reference/preview.token.create) | 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](/docs/reference/preview.session.create) | Open a preview as a project member: returns the single-use address to enter by. |
GET /v1/projects/{projectId}/error-pages | [errorpage.read](/docs/reference/errorpage.read) | Read the error pages a project has set. |
PUT /v1/projects/{projectId}/error-pages | [errorpage.configure](/docs/reference/errorpage.configure) | Set, replace or remove a project's error pages, in French and English. |
PUT /v1/projects/{projectId}/firewall | [firewall.configure](/docs/reference/firewall.configure) | Configure the application firewall, rate limiting and address lists. |
POST /v1/projects/{projectId}/forks/{number}/accept | [preview.fork.accept](/docs/reference/preview.fork.accept) | 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](/docs/reference/image.read) | Read a project's allowed image sources and its monthly transformation counter. |
PUT /v1/projects/{projectId}/images | [image.configure](/docs/reference/image.configure) | Set a project's allowed image sources, and obtain the key that signs its URLs. |
GET /v1/projects/{projectId}/logs | [logs.read](/docs/reference/logs.read) | Read an environment's runtime logs over a time window. |
POST /v1/projects/{projectId}/ownership/accept | [project.ownership.accept](/docs/reference/project.ownership.accept) | Claim a project created by an agent: it becomes an ordinary project, with no expiry. |
POST /v1/projects/{projectId}/previews | [preview.manage](/docs/reference/preview.manage) | Create or destroy a preview attached to a branch. |
PUT /v1/projects/{projectId}/previews/protection | [preview.protection.configure](/docs/reference/preview.protection.configure) | 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](/docs/reference/agent.proposal.accept) | Accept a proposal filed by an agent and merge it. |
GET /v1/projects/{projectId}/restorable | [deployment.restorable.list](/docs/reference/deployment.restorable.list) | What a restore would bring back, and what it would not. |
POST /v1/projects/{projectId}/rollback | [deployment.rollback](/docs/reference/deployment.rollback) | Restore an environment's previous release, without rebuilding. |
GET /v1/projects/{projectId}/routing-rules | [routingrules.read](/docs/reference/routingrules.read) | Read a project's routing rules and their version history. |
PUT /v1/projects/{projectId}/routing-rules | [routingrules.write](/docs/reference/routingrules.write) | Publish or simulate a project's routing rules, without a redeploy. |
POST /v1/projects/{projectId}/routing-rules/rollback | [routingrules.rollback](/docs/reference/routingrules.rollback) | Roll the routing rules back to an earlier version, in one step. |
GET /v1/projects/{projectId}/secrets/reveal | [secret.reveal](/docs/reference/secret.reveal) | Read a secret's value in clear. Allowed to no role, without exception. |
GET /v1/projects/{projectId}/tasks/{taskId} | [task.read](/docs/reference/task.read) | Read the progress of a long-running task without keeping the connection open. |
POST /v1/projects/{projectId}/tier | [project.tier.write](/docs/reference/project.tier.write) | Change a project's tier, prorated to the day; dryRun returns the preview. |
POST /v1/projects/{projectId}/undo | [action.undo](/docs/reference/action.undo) | Undo, in one call and within five minutes, a class E action using the token it returned. |
POST /v1/projects/{projectId}/unpin | [environment.unpin](/docs/reference/environment.unpin) | Lift an environment's pin and promote the latest healthy deployment. |
GET /v1/projects/{projectId}/vercel-imports | [vercel_import.list](/docs/reference/vercel_import.list) | Read a project's Vercel imports: state, report, acknowledgements and calls to the source. |
POST /v1/projects/{projectId}/vercel-imports | [vercel_import.create](/docs/reference/vercel_import.create) | Import a Vercel project's configuration: glowsoft.json and a three-category report. |
POST /v1/projects/{projectId}/vercel-imports/{importId}/accept | [vercel_import.accept](/docs/reference/vercel_import.accept) | 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](/docs/reference/vercel_import.variables.create) | Import a Vercel project's variables by target and branch, with a token from the source. |
GET /v1/projects/{projectId}/webhooks | [webhook.list](/docs/reference/webhook.list) | Read a project's webhooks: its receiving endpoints and their deliveries, page by page. |
POST /v1/projects/{projectId}/webhooks | [webhook.endpoint.create](/docs/reference/webhook.endpoint.create) | 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](/docs/reference/webhook.replay.create) | Replay a finished delivery: one immediate attempt, then the dead letter queue if it fails. |
DELETE /v1/projects/{projectId}/webhooks/{endpointId} | [webhook.endpoint.delete](/docs/reference/webhook.endpoint.delete) | Delete a receiving endpoint: its pending deliveries go with it. |
POST /v1/projects/{projectId}/webhooks/{endpointId}/secret | [webhook.secret.replace](/docs/reference/webhook.secret.replace) | Replace an endpoint's secret: the old one still signs for 24 hours, then nothing. |