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: 11
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}/shared-variables
DELETE /projects/{id}/source-export
GET /projects/{id}/source-export
POST /projects/{id}/source-export
Deleted Endpoints: 1
POST /projects/{id}/git-connection/repository
Modified Endpoints: 62
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.
'
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.
'
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.
https://{functionId}.functions.<domain>/./. 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.
'
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
GET /projects/{id}
PATCH /projects/{id}
GET /projects/{id}/auth/hosted-pages/{pageType}
PUT /projects/{id}/auth/hosted-pages/{pageType}
GET /projects/{id}/auth/hosted/{pageType}
Requires
Accept: text/html.Returns 404 when managed hosted pages are disabled for the project.
' to 'Public HTML endpoint for signup, forgot-password, device approval,
verify-email, and reset-password pages. Login uses the path without a
page type.
Requires
Accept: text/html.Returns 404 when managed hosted pages are disabled for the project.
'
GET /projects/{id}/config
declarative manifest. Returns JSON by default. Request the canonical
volcano-config.yaml rendering with
Accept: application/yamlor?format=yaml; the YAML is returned verbatim as the raw response body(
Content-Type: application/yaml) and is meant to be saved as-is.Write-only secrets (SMTP password, OAuth client secrets, TLS material)
are omitted from the export; the YAML rendering adds a header comment
describing how to set them via CLI environment interpolation.
' to 'Exports the project's current user-facing configuration as a
declarative manifest. Returns JSON by default. Request the canonical
volcano-config.yaml rendering with
Accept: application/yamlor?format=yaml; the YAML is returned verbatim as the raw response body(
Content-Type: application/yaml) and is meant to be saved as-is.Variable values and write-only secrets (SMTP password, OAuth client secrets, TLS material)
are omitted from the export; shared_variables contains names only; the YAML rendering adds a header comment
describing how to set them via CLI environment interpolation.
'
volcano-config.yaml). Omitted sections are left untouched. Within
declared entries, omitted optional fields keep their current server
values (patch semantics). Declared collection keys are fully synced to
the manifest:
variables,buckets[].policies,auth.providers.oauth,auth.email.templates, andfunctions[].schedulersare reconciled toexactly match, deleting resources absent from the manifest.
shared_variablesis fully synced the same way, but membership only:names absent from a declared list stop being shared and remain as
non-shared variables, with their values untouched. Functions,
frontends, databases, and buckets are never created or deleted through
this manifest; entries referencing resources that do not exist are
skipped and reported.
' to 'Declarative project configuration manifest (the JSON form of
volcano-config.yaml). Omitted sections are left untouched. Within
declared entries, omitted optional fields keep their current server
values (patch semantics). Declared collection keys are fully synced to
the manifest:
variables,buckets[].policies,auth.providers.oauth,auth.email.templates, andfunctions[].schedulersare reconciled toexactly match, deleting resources absent from the manifest. Functions,
frontends, databases, and buckets are never created or deleted through
this manifest; entries referencing resources that do not exist are
skipped and reported.
'
all(the default)gives it every project variable.
scopedgives it only the variablesit selects: every name declared in
variables, plus the namesVolcano detects in its source that the project defines.
' to 'Which project variables this function receives.
all(the default)gives it the project variables marked
shared: true.scopedgives it only the variablesit selects: every name declared in
variables, plus the namesVolcano detects in its source that the project defines.
'
PUT /projects/{id}/config
volcano-config.yaml). Omitted sections are left untouched. Within
declared entries, omitted optional fields keep their current server
values (patch semantics). Declared collection keys are fully synced to
the manifest:
variables,buckets[].policies,auth.providers.oauth,auth.email.templates, andfunctions[].schedulersare reconciled toexactly match, deleting resources absent from the manifest.
shared_variablesis fully synced the same way, but membership only:names absent from a declared list stop being shared and remain as
non-shared variables, with their values untouched. Functions,
frontends, databases, and buckets are never created or deleted through
this manifest; entries referencing resources that do not exist are
skipped and reported.
' to 'Declarative project configuration manifest (the JSON form of
volcano-config.yaml). Omitted sections are left untouched. Within
declared entries, omitted optional fields keep their current server
values (patch semantics). Declared collection keys are fully synced to
the manifest:
variables,buckets[].policies,auth.providers.oauth,auth.email.templates, andfunctions[].schedulersare reconciled toexactly match, deleting resources absent from the manifest. Functions,
frontends, databases, and buckets are never created or deleted through
this manifest; entries referencing resources that do not exist are
skipped and reported.
'
all(the default)gives it every project variable.
scopedgives it only the variablesit selects: every name declared in
variables, plus the namesVolcano detects in its source that the project defines.
' to 'Which project variables this function receives.
all(the default)gives it the project variables marked
shared: true.scopedgives it only the variablesit selects: every name declared in
variables, plus the namesVolcano detects in its source that the project defines.
'
GET /projects/{id}/databases
POST /projects/{id}/databases
Each project can contain up to 100 databases. Requests over this cap return 403.
' to 'Creates a serverless PostgreSQL database in the project.
Each project can hold 1 database on Free and up to 10,000 on Pro.
Requests over the plan's cap return 403.
'
environment runs in, so read them from
GET /databases/regionsratherthan hardcoding a list. A region the environment does not offer is
rejected with 400.
'
DELETE /projects/{id}/databases/{databaseName}
PUT /projects/{id}/databases/{databaseName}/backup-schedule
monthly one with no
day, or adayoutside its frequency's range(1-7 for weekly, 1-28 for monthly). The response says which.
'
moves the data to a new branch, and the provider keeps the schedule
per branch.
'
GET /projects/{id}/databases/{databaseName}/backups
does not include point-in-time restore.
' to 'The span a point-in-time restore may target. Absent from the response
when the owner's plan does not include point-in-time restore, and while
the storage provider has no history window in place yet — briefly the
case after an upgrade, since the window is applied asynchronously. The
window is read from the provider rather than from the plan, so it never
advertises a point a restore could not actually reach.
'
POST /projects/{id}/databases/{databaseName}/backups
a backup was taken too recently.
' to 'A backup of that name already exists, the database is not active, a
restore is running on it, or a backup was taken too recently.
'
DELETE /projects/{id}/databases/{databaseName}/backups/{backupName}
deleted too. A backup that is already gone reports
404, so a namethat never existed and a name that no longer does read the same.
Refused with
409while the database is being restored.' to 'Deletes the backup and frees its storage. Scheduled backups can be
deleted too. A backup that is already gone reports
404, so a namethat never existed and a name that no longer does read the same.
Refused with
409while the database is being restored.'
POST /projects/{id}/databases/{databaseName}/branches
database cannot be branched right now because it is still
provisioning, failed, or being deleted.
' to 'A branch of that name already exists on this database, or the
database cannot be branched right now because it is still
provisioning, being restored, failed, or being deleted.
'
DELETE /projects/{id}/databases/{databaseName}/branches/{branchName}
accepting connections at once; its fork and its row are removed by a
background job, so a provider outage cannot leave the call hanging or the
branch half-deleted.
Deleting a branch that is still provisioning is allowed and stops the
build. Deleting a branch that is already gone succeeds.
' to 'Marks the branch for teardown and returns immediately. The branch stops
accepting connections at once; its fork and its row are removed by a
background job, so a provider outage cannot leave the call hanging or the
branch half-deleted.
Deleting a branch that is still provisioning is allowed and stops the
build, and repeating the call while teardown is in progress is accepted
again. Once the branch is gone the call returns
404.'
POST /projects/{id}/databases/{databaseName}/branches/{branchName}/reset
' to 'The branch is not active, a reset is already in progress, the parent
database is being restored, or the parent was restored within the
last 24 hours — a reset re-forks from the parent, and the provider
holds a child's reset shut for that long afterwards.
'
POST /projects/{id}/databases/{databaseName}/branches/{branchName}/reset-password
connection string. Existing connections are not interrupted; new ones
must use the returned string.
The parent database's credentials are untouched.
' to 'Issues a new password for the branch and invalidates the previous
connection string. Existing connections are not interrupted; new ones
must use the returned string. Proxies pick the rotation up within a few
seconds, so the previous password can still open new connections until
then.
The parent database's credentials are untouched.
'
POST /projects/{id}/databases/{databaseName}/reset-password
through pgproxy. This does not rotate or expose the internal owner password.
The returned password and connection string are the only client credentials that
will authenticate through pgproxy after reset.
' to 'Rotates the Volcano-managed PostgreSQL password used by clients when connecting
through pgproxy. This does not rotate or expose the internal owner password.
The returned password and connection string are the only client credentials that
will authenticate through pgproxy after reset.
Existing connections are not interrupted; new ones must use the returned
string. Proxies pick the rotation up within a few seconds, so the previous
password can still open new connections until then.
'
POST /projects/{id}/databases/{databaseName}/restores
endpoint.
Deliberately looser than the names you can create, like the backup
path parameter: a backup made by a schedule is named for you, so
restoring one accepts any name a backup can have.
'
- MinLength changed from 0 to 1
- MaxLength changed from 63 to 128
- Pattern changed from '^[a-z0-9][a-z0-9_-]{0,62}$' to ''
PATCH /projects/{id}/databases/{databaseName}/type
POST /projects/{id}/frontends
If a frontend with the same name already exists in the project, this operation updates that
frontend using the uploaded archive and starts a new deployment. A deployment that starts
immediately returns
status: provisioning, then transitions toactive,degraded, orfailed. If another deployment is running, the response preserves the frontend's current statusand exposes the queued deployment through
pending_deployment_id.Existing frontend traffic continues to use an available runtime while the new deployment builds
and provisions. Each deployment publishes its own static assets before the runtimes switch to its
build, and the live build's assets keep serving until the new deployment is live, so a page loaded
mid-deployment resolves its assets whichever build served it. A failed redeploy puts the runtimes
back on the build they were running, leaves the frontend
activeon the previous deployment, andrecords the attempted deployment as failed.
degradedmeans the runtime remains available butedge synchronization requires recovery; Volcano retries the edge step without rebuilding. Only one deployment may run for a
given frontend, while independent frontends and projects can deploy concurrently.
For monorepos, provide
app_rootas a relative path from the uploaded archive rootto the Next.js app that should be built. Omit it for single-app archives.
Supported frontend environments are Next.js 15.x and 16.x with Node.js
22.x or 24.x. The Node.js runtime is inferred from
package.jsonengines.node; if omitted, Volcano uses Node.js 22.x.The selected Node.js family must also satisfy the installed Next.js package's
engines.nodeconstraint. Volcano tests Next 15.5.23 (^18.18.0 || ^19.8.0 || >=20.0.0) and Next 16.3.2 (>=20.9.0).Source archive size is enforced by the API with
SOURCE_ARCHIVE_SIZE_LIMIT_MB; the CLIdoes not apply its own source archive size limit. After the final container images are
built, the publish build enforces
LAMBDA_TARGET_CONTAINER_SIZE_LIMIT_MBbefore pushing.This operation is limited by plan-based frontend deployment quotas (
FREE_FRONTEND_DEPLOYMENTS,PRO_FRONTEND_DEPLOYMENTS).Each project can contain up to 10,000 frontends regardless of plan.
' to 'Creates and deploys a frontend for the project.
If a frontend with the same name already exists in the project, this operation updates that
frontend using the uploaded archive and starts a new deployment. A deployment that starts
immediately returns
status: provisioning, then transitions toactive,degraded, orfailed. If another deployment is running, the response preserves the frontend's current statusand exposes the queued deployment through
pending_deployment_id.Existing frontend traffic continues to use an available runtime while the new deployment builds
and provisions. Each deployment publishes its own static assets before the runtimes switch to its
build, and the live build's assets keep serving until the new deployment is live, so a page loaded
mid-deployment resolves its assets whichever build served it. A failed redeploy puts the runtimes
back on the build they were running, leaves the frontend
activeon the previous deployment, andrecords the attempted deployment as failed.
degradedmeans the runtime remains available butedge synchronization requires recovery; Volcano retries the edge step without rebuilding. Only one deployment may run for a
given frontend, while independent frontends and projects can
Report truncated; see the source commit for the complete contract diff.
Validation