Conversation
kong
Bot
force-pushed
the
chore/sync-openapi
branch
10 times, most recently
from
July 20, 2026 13:54
04d66d1 to
b8d922a
Compare
kong
Bot
force-pushed
the
chore/sync-openapi
branch
10 times, most recently
from
July 27, 2026 22:41
ee0bdba to
eb217d3
Compare
kong
Bot
force-pushed
the
chore/sync-openapi
branch
9 times, most recently
from
July 31, 2026 00:52
bc4afe5 to
7b3fd89
Compare
kong
Bot
force-pushed
the
chore/sync-openapi
branch
9 times, most recently
from
August 22, 2026 01:21
3d85dcf to
9f5fc74
Compare
kong
Bot
force-pushed
the
chore/sync-openapi
branch
10 times, most recently
from
August 29, 2026 05:35
61e1bcc to
882ac57
Compare
kong
Bot
force-pushed
the
chore/sync-openapi
branch
8 times, most recently
from
September 5, 2026 02:49
5187d45 to
1d7604f
Compare
kong
Bot
force-pushed
the
chore/sync-openapi
branch
2 times, most recently
from
September 10, 2026 22:00
d4953ec to
1e2ab55
Compare
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment
Add this suggestion to a batch that can be applied as a single commit.This suggestion is invalid because no changes were made to the code.Suggestions cannot be applied while the pull request is closed.Suggestions cannot be applied while viewing a subset of changes.Only one suggestion per line can be applied in a batch.Add this suggestion to a batch that can be applied as a single commit.Applying suggestions on deleted lines is not supported.You must change the existing code in this line in order to create a valid suggestion.Outdated suggestions cannot be applied.This suggestion has been applied or marked resolved.Suggestions cannot be applied from pending reviews.Suggestions cannot be applied on multi-line comments.Suggestions cannot be applied while the pull request is queued to merge.Suggestion cannot be applied right now. Please check back later.
Summary
API change report
Public API
New Endpoints: 42
POST /durable-functions/{functionId}/executions
POST /mcp
GET /openapi.json
HEAD /openapi.json
GET /openapi.yaml
HEAD /openapi.yaml
GET /projects/{id}/auth/pages/appearance
DELETE /projects/{id}/auth/pages/theme
PUT /projects/{id}/auth/pages/theme
DELETE /projects/{id}/auth/pages/{pageType}/layout
PUT /projects/{id}/auth/pages/{pageType}/layout
GET /projects/{id}/auth/pages/{pageType}/preview
POST /projects/{id}/auth/pages/{pageType}/preview
PUT /projects/{id}/frontend-shared-variables
GET /projects/{id}/frontends/{frontendId}/function-routes
POST /projects/{id}/frontends/{frontendId}/function-routes
DELETE /projects/{id}/frontends/{frontendId}/function-routes/{routeId}
PUT /projects/{id}/frontends/{frontendId}/function-routes/{routeId}
POST /projects/{id}/sandbox-executions
GET /projects/{id}/sandbox-sessions
POST /projects/{id}/sandbox-sessions
GET /projects/{id}/sandboxes
POST /projects/{id}/sandboxes
DELETE /projects/{id}/sandboxes/{sandboxId}
GET /projects/{id}/sandboxes/{sandboxId}
PATCH /projects/{id}/sandboxes/{sandboxId}
GET /projects/{id}/sandboxes/{sandboxId}/deployments
PUT /projects/{id}/shared-variables
DELETE /projects/{id}/source-export
GET /projects/{id}/source-export
POST /projects/{id}/source-export
DELETE /sandbox-sessions/{sessionId}
GET /sandbox-sessions/{sessionId}
POST /sandbox-sessions/{sessionId}/access
POST /sandbox-sessions/{sessionId}/exec
POST /sandbox-sessions/{sessionId}/files/read
POST /sandbox-sessions/{sessionId}/files/write
DELETE /sandbox-sessions/{sessionId}/grants/{subjectId}
PUT /sandbox-sessions/{sessionId}/grants/{subjectId}
POST /sandbox-sessions/{sessionId}/resume
POST /sandbox-sessions/{sessionId}/suspend
GET /sandboxes/presets
Deleted Endpoints: 1
POST /projects/{id}/git-connection/repository
Modified Endpoints: 169
POST /auth/oauth/{provider}/call-api
The user's stored access token is automatically used and refreshed if needed.
The request is always sent to the provider's fixed API base URL joined with
the caller-supplied
endpoint.endpointmust be a relative path beginningwith
/(optionally with a query string); it cannot change the target host.Absolute URLs, protocol-relative
//hostvalues, or userinfo (@host) arerejected with
400so the request can never be redirected to another host.Examples of
endpoint:/oauth2/v1/userinfo/user/repos/meThe response is the raw JSON response from the provider's API.
' to 'Make an authenticated request to an OAuth provider's API on behalf of the user.
The user's stored access token is automatically used and refreshed if needed.
The request is always sent to the provider's fixed API base URL joined with
the caller-supplied
endpoint.endpointmust be a relative path beginningwith
/(optionally with a query string); it cannot change the target host.Absolute URLs, protocol-relative
//hostvalues, or userinfo (@host) arerejected with
400so the request can never be redirected to another host.Examples of
endpoint:/oauth2/v1/userinfo/user/repos/meThe response wraps the provider's raw JSON value with request metadata.
An empty provider body is represented as
data: null; the envelopepreserves the provider's HTTP status in
status_code, including errors.Provider response bodies are limited to 8 MiB after decompression.
Transport failures, invalid JSON (including invalid UTF-8), and oversized
bodies return
502. Provider redirects to another origin are blocked andreturn
400.'
endpoint, anendpointthat isnot a relative path, or an unsupported HTTP method).
' to 'Invalid request (for example: missing
endpoint, anendpointthat isnot a relative path, or an unsupported HTTP method), or a provider
redirect to another origin.
'
POST /auth/signin
Set
session_modetocookieto request HttpOnly refresh-tokenstorage. Cookie mode is honored only for an exact, credentialed CORS
origin on the same schemeful site as this API. Otherwise the response
retains the refresh token in its body.
' to 'Authenticate with email and password. Requires an anon key.
Set
session_modetocookieto request HttpOnly refresh-tokenstorage. Cookie mode is honored only for an exact, credentialed CORS
origin on the same schemeful site as this API. Otherwise the response
retains the refresh token in its body. A frontend on its default
Volcano URL is cross-site with this API and so always gets the body
token.
'
GET /databases/regions
This is a public endpoint that doesn't require authentication.
' to 'Returns the regions enabled for database provisioning in this platform environment.
These are the same regions offered for function deployment, and the only values
the
regionfield of a database accepts.This is a public endpoint that doesn't require authentication.
'
POST /databases/{databaseName}/branches/{branchName}/query/delete
bandwidth cap (aggregate ingress + egress across owned projects) or the
project's monthly database-request cap. Enforcement is eventual: queries
are rejected until the relevant cap increases (plan/override) or the
calendar-month meter resets. The error message identifies which cap.
' to 'The query was rejected by a billing-cycle allowance: either the owning
platform user's bandwidth allowance (aggregate ingress + egress across
owned projects) or their database-request allowance. Enforcement is
eventual: queries are rejected until the allowance increases or the
next anniversary cycle begins. The error message identifies the resource.
'
POST /databases/{databaseName}/branches/{branchName}/query/insert
bandwidth cap (aggregate ingress + egress across owned projects) or the
project's monthly database-request cap. Enforcement is eventual: queries
are rejected until the relevant cap increases (plan/override) or the
calendar-month meter resets. The error message identifies which cap.
' to 'The query was rejected by a billing-cycle allowance: either the owning
platform user's bandwidth allowance (aggregate ingress + egress across
owned projects) or their database-request allowance. Enforcement is
eventual: queries are rejected until the allowance increases or the
next anniversary cycle begins. The error message identifies the resource.
'
POST /databases/{databaseName}/branches/{branchName}/query/ping
bandwidth cap (aggregate ingress + egress across owned projects) or the
project's monthly database-request cap. Enforcement is eventual: queries
are rejected until the relevant cap increases (plan/override) or the
calendar-month meter resets. The error message identifies which cap.
' to 'The query was rejected by a billing-cycle allowance: either the owning
platform user's bandwidth allowance (aggregate ingress + egress across
owned projects) or their database-request allowance. Enforcement is
eventual: queries are rejected until the allowance increases or the
next anniversary cycle begins. The error message identifies the resource.
'
POST /databases/{databaseName}/branches/{branchName}/query/select
bandwidth cap (aggregate ingress + egress across owned projects) or the
project's monthly database-request cap. Enforcement is eventual: queries
are rejected until the relevant cap increases (plan/override) or the
calendar-month meter resets. The error message identifies which cap.
' to 'The query was rejected by a billing-cycle allowance: either the owning
platform user's bandwidth allowance (aggregate ingress + egress across
owned projects) or their database-request allowance. Enforcement is
eventual: queries are rejected until the allowance increases or the
next anniversary cycle begins. The error message identifies the resource.
'
POST /databases/{databaseName}/branches/{branchName}/query/update
bandwidth cap (aggregate ingress + egress across owned projects) or the
project's monthly database-request cap. Enforcement is eventual: queries
are rejected until the relevant cap increases (plan/override) or the
calendar-month meter resets. The error message identifies which cap.
' to 'The query was rejected by a billing-cycle allowance: either the owning
platform user's bandwidth allowance (aggregate ingress + egress across
owned projects) or their database-request allowance. Enforcement is
eventual: queries are rejected until the allowance increases or the
next anniversary cycle begins. The error message identifies the resource.
'
POST /databases/{databaseName}/query/delete
bandwidth cap (aggregate ingress + egress across owned projects) or the
project's monthly database-request cap. Enforcement is eventual: queries
are rejected until the relevant cap increases (plan/override) or the
calendar-month meter resets. The error message identifies which cap.
' to 'The query was rejected by a billing-cycle allowance: either the owning
platform user's bandwidth allowance (aggregate ingress + egress across
owned projects) or their database-request allowance. Enforcement is
eventual: queries are rejected until the allowance increases or the
next anniversary cycle begins. The error message identifies the resource.
'
POST /databases/{databaseName}/query/insert
bandwidth cap (aggregate ingress + egress across owned projects) or the
project's monthly database-request cap. Enforcement is eventual: queries
are rejected until the relevant cap increases (plan/override) or the
calendar-month meter resets. The error message identifies which cap.
' to 'The query was rejected by a billing-cycle allowance: either the owning
platform user's bandwidth allowance (aggregate ingress + egress across
owned projects) or their database-request allowance. Enforcement is
eventual: queries are rejected until the allowance increases or the
next anniversary cycle begins. The error message identifies the resource.
'
POST /databases/{databaseName}/query/ping
bandwidth cap (aggregate ingress + egress across owned projects) or the
project's monthly database-request cap. Enforcement is eventual: queries
are rejected until the relevant cap increases (plan/override) or the
calendar-month meter resets. The error message identifies which cap.
' to 'The query was rejected by a billing-cycle allowance: either the owning
platform user's bandwidth allowance (aggregate ingress + egress across
owned projects) or their database-request allowance. Enforcement is
eventual: queries are rejected until the allowance increases or the
next anniversary cycle begins. The error message identifies the resource.
'
POST /databases/{databaseName}/query/select
bandwidth cap (aggregate ingress + egress across owned projects) or the
project's monthly database-request cap. Enforcement is eventual: queries
are rejected until the relevant cap increases (plan/override) or the
calendar-month meter resets. The error message identifies which cap.
' to 'The query was rejected by a billing-cycle allowance: either the owning
platform user's bandwidth allowance (aggregate ingress + egress across
owned projects) or their database-request allowance. Enforcement is
eventual: queries are rejected until the allowance increases or the
next anniversary cycle begins. The error message identifies the resource.
'
POST /databases/{databaseName}/query/update
bandwidth cap (aggregate ingress + egress across owned projects) or the
project's monthly database-request cap. Enforcement is eventual: queries
are rejected until the relevant cap increases (plan/override) or the
calendar-month meter resets. The error message identifies which cap.
' to 'The query was rejected by a billing-cycle allowance: either the owning
platform user's bandwidth allowance (aggregate ingress + egress across
owned projects) or their database-request allowance. Enforcement is
eventual: queries are rejected until the allowance increases or the
next anniversary cycle begins. The error message identifies the resource.
'
GET /deployments
GET /functions/resolve
SDKs use this endpoint internally to invoke by function name while routing by function ID.
With Service Key:
With Auth User Token:
With Anon Key:
functions.invokeis_public: true' to 'Resolves a DNS-safe function name to its function ID and invocation URL within the caller's project.
SDKs use this endpoint internally to invoke by function name while routing by function ID.
Invoke the returned
invoke_urlas-is. It does not share a domain with the API, so a hostbuilt from the API URL will not reach the function. When the deployment serves no public
invocation domain, as in local development,
invoke_urlis omitted and callers invokethrough
POST /functions/{functionId}/invoke.With Service Key:
With Auth User Token:
With Anon Key:
functions.invokeis_public: true'
function is never resolvable here: it is started through
POST /durable-functions/{functionId}/executions, not invoked.'
POST /functions/{functionId}/invoke
With Service Key (admin/background operations):
With Auth User Token (user-facing):
__volcano_authcontext:With Anon Key (public function only):
functions.invokeis_public: true__volcano_auth)Transport and CORS:
http://api.<domain>/functions/{functionId}/invokehttps://{functionId}.functions.<domain>/POST, OPTIONS' to 'Invoke a serverless function.
With Service Key (admin/background operations):
With Auth User Token (user-facing):
__volcano_authcontext:With Anon Key (public function only):
functions.invokeis_public: true__volcano_auth)Transport and CORS:
POST
{payload: ...}contract, including for functions whose DNS ingress isconfigured in HTTP mode.
invoke_url. It is on adifferent domain from this API, so it cannot be derived from the API host.
/. HTTP-mode DNS ingress accepts GET,HEAD, POST, PUT, PATCH, and DELETE at
/and nested paths.POST, OPTIONS. HTTP-mode DNSpreflight advertises
GET, HEAD, POST, PUT, PATCH, DELETE, OPTIONS.http_auth_mode: noneapplies only to public HTTP-mode DNS ingress; thisdirect operation always requires a Volcano credential.
Durable functions are not invocable here. A durable function's id
answers 404, whatever its visibility, because a synchronous call would
run it with no execution record, no idempotency and no concurrency
accounting. Start one with
POST /durable-functions/{functionId}/executions.'
owning platform user's monthly bandwidth cap (aggregate ingress +
egress) was exceeded.
' to 'Rate limit exceeded (per-function or project-wide limit), or the
owning platform user's billing-cycle bandwidth allowance (aggregate ingress +
egress) was exceeded.
'
GET /projects
Supports two mutually exclusive pagination modes. Offset mode uses
pageandlimit. Cursor mode usescursororending_beforewithlimit, returnsnext_cursor/prev_cursor, and supports a boundedoffsetpast the cursor anchor. Supplyinglimitwithoutpageselects cursor mode.
searchapplies a case-insensitive project-namefilter in either mode. Sending
pagewithcursororending_before,or sending both cursor directions, returns 400.
' to 'Returns projects that are not deleting or deleted, newest first.
Supports two mutually exclusive pagination modes. Offset mode uses
pageandlimit. Cursor mode usescursororending_beforewithlimit, returnsnext_cursor/prev_cursor, and supports a boundedoffsetpast the cursor anchor. Supplyinglimitwithoutpageselects cursor mode.
searchapplies a case-insensitive project-namefilter in either mode.
includeoptionally expands each returnedproject with its Git connection and/or aggregate health summary using
git_connectionandhealth. Sendingpagewithcursororending_before,or sending both cursor directions, returns 400.
'
POST /projects
DELETE /projects/{id}
GET /projects/{id}
PATCH /projects/{id}
project holding durable functions — a region that does not offer
durable execution)
'
GET /projects/{id}/access-tokens
fullis everything you can do to that one project, up to and includingdeleting it. It cannot manage access tokens, so a leaked token cannot
mint a replacement or erase the record of its own use, but for a CI or
agent credential that only deploys, prefer
read_onlywhere the joballows it.
read_onlyrefuses mutations. It is enforced by route classificationrather than HTTP method, so the log and metrics query endpoints remain
available even though they are POST requests that carry body filters.
read_onlyalso refuses the reads that return a credential — servicekeys, variable values, and database connection strings. A service key
grants read and write over the project's data and keeps working after
the token that fetched it is revoked, so returning one to a read-only
credential would make the scope a formality.
' to 'What a project access token may do within its project.
fullis everything you can do to that one project, up to and includingdeleting it. It cannot manage access tokens, so a leaked token cannot
mint a replacement or erase the record of its own use, but for a CI or
agent credential that only deploys, prefer
read_onlywhere the joballows it.
read_onlyrefuses mutations. It is enforced by route classificationrather than HTTP method, so the log and metrics query endpoints remain
available even though they are POST requests that carry body filters.
read_onlyalso refuses the reads that return a credential — servicekeys, anon keys, variable values, and database connection strings. Those
grant write access over the project's data and keep working after the
token that fetched them is revoked, so returning one to a read-only
credential would make the scope a formality. An anon key is included
because its permissions are chosen per key and may include uploading,
deleting, and publishing.
'
POST /projects/{id}/access-tokens
The secret is in this response and nowhere else. Only its hash is
stored, so it cannot be retrieved, displayed, or recovered later — save
it when you create it.
The name must be unique within the project, which also makes this call
safe to retry: a duplicate is rejected rather than quietly minting a
second credential whose secret you never saw.
Requires a platform token.
' to 'Creates a project access token and returns its secret.
The secret is in this response and nowhere else. Only its hash is
stored, so it cannot be retrieved, displayed, or recovered later — save
it when you create it.
The name must be unique within the project, so a retry cannot mint a
second credential. It cannot recover the first one either. A retry that
returns
409with codeaccess_token_name_existsmeans the originalcreate committed and its secret is unrecoverable: list the project's
tokens, revoke the one holding that name, and create it again.
Requires a platform token.
'
one that has expired. Creating a duplicate returns 409 with code
access_token_name_exists; revoking the holder frees the name, so arotation can keep the name its caller already references.
'
fullis everything you can do to that one project, up to and includingdeleting it. It cannot manage access tokens, so a leaked token cannot
mint a replacement or erase the record of its own use, but for a CI or
agent credential that only deploys, prefer
read_onlywhere the joballows it.
read_onlyrefuses mutations. It is enforced by route classificationrather than HTTP method, so the log and metrics query endpoints remain
available even though they are POST requests that carry body filters.
read_onlyalso refuses the reads that return a credential — servicekeys, variable values, and database connection strings. A service key
grants read and write over the project's data and keeps working after
the token that fetched it is revoked, so returning one to a read-only
credential would make the scope a formality.
' to 'What a project access token may do within its project.
fullis everything you can do to that one project, up to and includingdeleting it. It cannot manage access tokens, so a leaked token cannot
mint a replacement or erase the record of its own use, but for a CI or
agent credential that only deploys, prefer
read_onlywhere the joballows it.
read_onlyrefuses mutations. It is enforced by route classificationrather than HTTP method, so the log and metrics query endpoints remain
available even though they are POST requests that carry body filters.
read_onlyalso refuses the reads that return a credential — servicekeys, anon keys, variable values, and database connection strings. Those
grant write access over the project's data and keep working after the
token that fetched them is revoked, so returning one to a read-only
credential would make the scope a formality. An anon key is included
because its permissions are chosen per key and may include uploading,
deleting, and publishing.
'
fullis everything you can do to that one project, up to and includingdeleting it. It cannot manage access tokens, so a leaked token cannot
mint a replacement or erase the record of its own use, but for a CI or
agent credential that only deploys, prefer
read_onlywhere the joballows it.
read_onlyrefuses mutations. It is enforced by route classificationrather than HTTP method, so the log and metrics query endpoints remain
available even though they are POST requests that carry body filters.
read_onlyalso refuses the reads that return a credential — servicekeys, variable values, and database connection strings. A service key
grants read and write over the project's data and keeps working after
the token that fetched it is revoked, so returning one to a read-only
credential would make the scope a formality.
' to 'What a project access token may do within its project.
fullis everything you can do to that one project, up to and includingdeleting it. It cannot manage access tokens, so a leaked token cannot
mint a replacement or erase the record of its own use, but for a CI or
agent credential that only deploys, prefer
read_onlywhere the joballows it.
read_onlyrefuses mutations. It is enforced by route classificationrather than HTTP method, so the log and metrics query endpoints remain
available even though they are POST requests that carry body filters.
read_onlyalso refuses the reads that return a credential — servicekeys, anon keys, variable values, and database connection strings. Those
grant write access over the project's data and keep working after the
token that fetched them is revoked, so returning one to a read-only
credential would make the scope a formality. An anon key is included
because its permissions are chosen per key and may include uploading,
deleting, and publishing.
'
GET /projects/{id}/access-tokens/usage
project's access tokens, oldest first. Every day in the window is
present, so a gap reads as zero rather than missing.
Revoked tokens are included, because the traffic they made before
revocation is usually the reason you are looking.
daysdefaults to 30 and is capped at 60, which is also how long per-daycounts are retained — a longer window cannot be answered.
' to 'Returns a zero-filled daily series of request counts for each of the
project's access tokens, oldest first. Every day in the window is
present, so a gap reads as zero rather than missing.
Revoked tokens are included, because the traffic they made before
revocation is usually the reason you are looking.
daysdefaults to 30 and is capped at 60, which is also how long per-daycounts are retained — a longer window cannot be answered.
A platform token sees every token in the project. A project access token
sees only its own row, so it can watch its own traffic without being
able to enumerate the project's other credentials by name.
'
GET /projects/{id}/access-tokens/{tokenId}
fullis everything you can do to that one project, up to and includingdeleting it. It cannot manage access tokens, so a leaked token cannot
mint a replacement or erase the record of its own use, but for a CI or
agent credential that only deploys, prefer
read_onlywhere the joballows it.
read_onlyrefuses mutations. It is enforced by route classificationrather than HTTP method, so the log and metrics query endpoints remain
available even though they are POST requests that carry body filters.
read_onlyalso refuses the reads that return a credential — servicekeys, variable values, and database connection strings. A service key
grants read and write over the project's data and keeps working after
the token that fetched it is revoked, so returning one to a read-only
credential would make the scope a formality.
' to 'What a project access token may do within its project.
fullis everything you can do to that one project, up to and includingdeleting it. It cannot manage access tokens, so a leaked token cannot
mint a replacement or erase the record of its own use, but for a CI or
agent credential that only deploys, prefer
read_onlywhere the joballows it.
read_onlyrefuses mutations. It is enforced by route classificationrather than HTTP method, so the log and metrics query endpoints remain
available even though they are POST requests that carry body filters.
read_onlyalso refuses the reads that return a credential — servicekeys, anon keys, variable values, and database connection strings. Those
grant write access over the project's data and keep working after the
token that fetched them is revoked, so returning one to a read-only
credential would make the scope a formality. An anon key is included
because its permissions are chosen per key and may include uploading,
deleting, and publishing.
'
GET /projects/{id}/access-tokens/{tokenId}/usage
oldest first, so the response always has exactly
daysentries.daysdefaults to 30 and is capped at 60, matching how long per-daycounts are retained.
' to 'Returns a zero-filled daily series of request counts for a single token,
oldest first, so the response always has exactly
daysentries.daysdefaults to 30 and is capped at 60, matching how long per-daycounts are retained.
A project access token may read only its own usage; asking for another
token's returns
403. A platform token may read any token in theproject.
'
GET /projects/{id}/anon-keys
POST /projects/{id}/anon-keys
DELETE /projects/{id}/anon-keys/{keyId}
GET /projects/{id}/anon-keys/{keyId}
POST /projects/{id}/anon-keys/{keyId}/regenerate
POST /projects/{id}/anon-keys/{keyId}/set-default
GET /projects/{id}/auth/config
PUT /projects/{id}/auth/config
POST /projects/{id}/auth/config/test-email
GET /projects/{id}/auth/hosted-pages/{pageType}
Report truncated; see the source commit for the complete contract diff.
Validation