Skip to content

chore(api): sync OpenAPI contract - #51

Draft
kong[bot] wants to merge 1 commit into
mainfrom
chore/sync-openapi
Draft

chore(api): sync OpenAPI contract#51
kong[bot] wants to merge 1 commit into
mainfrom
chore/sync-openapi

Conversation

@kong

@kong kong Bot commented Jul 13, 2026

Copy link
Copy Markdown

Summary

API change report

Public API

New Endpoints: 3


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: 37


POST /databases/{databaseName}/branches/{branchName}/query/delete

  • Responses changed
    • New response: 503
    • Modified response: 429
      • Description changed from 'The query was rejected by a monthly usage cap: either the platform user's
        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

  • Responses changed
    • New response: 503
    • Modified response: 429
      • Description changed from 'The query was rejected by a monthly usage cap: either the platform user's
        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

  • Responses changed
    • New response: 503
    • Modified response: 429
      • Description changed from 'The query was rejected by a monthly usage cap: either the platform user's
        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

  • Responses changed
    • New response: 503
    • Modified response: 429
      • Description changed from 'The query was rejected by a monthly usage cap: either the platform user's
        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

  • Responses changed
    • New response: 503
    • Modified response: 429
      • Description changed from 'The query was rejected by a monthly usage cap: either the platform user's
        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

  • Responses changed
    • Modified response: 429
      • Description changed from 'The query was rejected by a monthly usage cap: either the platform user's
        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

  • Responses changed
    • Modified response: 429
      • Description changed from 'The query was rejected by a monthly usage cap: either the platform user's
        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

  • Responses changed
    • Modified response: 429
      • Description changed from 'The query was rejected by a monthly usage cap: either the platform user's
        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

  • Responses changed
    • Modified response: 429
      • Description changed from 'The query was rejected by a monthly usage cap: either the platform user's
        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

  • Responses changed
    • Modified response: 429
      • Description changed from 'The query was rejected by a monthly usage cap: either the platform user's
        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

  • Responses changed
    • Modified response: 429
      • Description changed from 'Rate limit exceeded (per-function or project-wide limit), or the
        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/{id}/databases

  • New query param: status

POST /projects/{id}/databases

  • Description changed from 'Creates a serverless PostgreSQL database in the project.
    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.
    '

DELETE /projects/{id}/databases/{databaseName}

  • Responses changed
    • New response: 503

PUT /projects/{id}/databases/{databaseName}/backup-schedule

  • Responses changed
    • Modified response: 400
      • Description changed from 'Invalid schedule' to 'The schedule names a recurrence that cannot fire: a weekly or
        monthly one with no day, or a day outside its frequency's range
        (1-7 for weekly, 1-28 for monthly). The response says which.
        '
    • Modified response: 409
      • Description changed from 'The database is not active' to 'The database is not active, or a restore is running on it — a restore
        moves the data to a new branch, and the provider keeps the schedule
        per branch.
        '

GET /projects/{id}/databases/{databaseName}/backups

  • Responses changed
    • Modified response: 200
      • Content changed
        • Modified media type: application/json
          • Schema changed
            • Properties changed
              • Modified property: restore_window
                • Description changed from 'The span a point-in-time restore may target. Empty when the owner's plan
                  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

  • Responses changed
    • Modified response: 409
      • Description changed from 'A backup of that name already exists, the database is not active, or
        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}

  • Description changed from 'Deletes the backup and frees its storage. Scheduled backups can be
    deleted too. A backup that is already gone reports 404, so a name
    that never existed and a name that no longer does read the same.

Refused with 409 while 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 name
that never existed and a name that no longer does read the same.
Refused with 409 while the database is being restored.
'

POST /projects/{id}/databases/{databaseName}/branches

  • Responses changed
    • Modified response: 409
      • Description changed from 'A branch of that name already exists on this database, or the
        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}

  • Description changed from '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. 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

  • Responses changed
    • Modified response: 409
      • Description changed from 'The branch is not active, or a reset is already in progress.
        ' 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

  • Description changed from '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.

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

  • Description changed from '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.
    ' 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.
'

  • Responses changed
    • New response: 503

POST /projects/{id}/databases/{databaseName}/restores

  • Request body changed
    • Content changed
      • Modified media type: application/json
        • Schema changed
          • Properties changed
            • Modified property: backup_name
              • Description changed from 'A backup of this database to restore.' to 'A backup of this database to restore, exactly as returned by the list
                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

  • Responses changed
    • New response: 503

POST /projects/{id}/frontends

  • Description changed from '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 to active, degraded, or
    failed. If another deployment is running, the response preserves the frontend's current status
    and 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 active on the previous deployment, and
    records the attempted deployment as failed. degraded means the runtime remains available but
    edge 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_root as a relative path from the uploaded archive root
    to 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.json engines.node; if omitted, Volcano uses Node.js 22.x.
    The selected Node.js family must also satisfy the installed Next.js package's
    engines.node constraint. 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 CLI
    does not apply its own source archive size limit. After the final container images are
    built, the publish build enforces LAMBDA_TARGET_CONTAINER_SIZE_LIMIT_MB before 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 to active, degraded, or
    failed. If another deployment is running, the response preserves the frontend's current status
    and 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 active on the previous deployment, and
    records the attempted deployment as failed. degraded means the runtime remains available but
    edge 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_root as a relative path from the uploaded archive root
    to 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.json engines.node; if omitted, Volcano uses Node.js 22.x.
    The selected Node.js family must also satisfy the installed Next.js package's
    engines.node constraint. Volcano tests Next 15.5.24 (^18.18.0 || ^19.8.0 || >=20.0.0) and Next 16.3.3 (>=20.9.0).
    Source archive size is enforced by the API with SOURCE_ARCHIVE_SIZE_LIMIT_MB; the CLI
    does not apply its own source archive size limit. After the final container images are
    built, the publish build enforces LAMBDA_TARGET_CONTAINER_SIZE_LIMIT_MB before 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.
    '

DELETE /projects/{id}/git-connection

  • Responses changed
    • New response: 409

PUT /projects/{id}/git-connection

  • Responses changed
    • New response: 409

PUT /projects/{id}/git-connection/production-branch

  • Responses changed
    • New response: 409

PUT /projects/{id}/git-deploy-settings

  • Responses changed
    • New response: 409

GET /public/{projectId}/{bucketName}/{path}

  • Responses changed
    • Modified response: 429
      • Description changed from 'The platform user exceeded their monthly bandwidth cap (aggregate
        ingress + egress across owned projects). Enforcement is eventual:
        requests are rejected until the cap increases (plan/override) or the
        calendar-month meter resets.
        ' to 'The platform user exceeded their billing-cycle bandwidth allowance (aggregate
        ingress + egress across owned projects). Enforcement is eventual:
        requests are rejected until the allowance increases or the next
        anniversary cycle begins.
        '

GET /storage/{bucketName}

  • Responses changed
    • Modified response: 429
      • Description changed from 'The platform user exceeded their monthly bandwidth cap (aggregate
        ingress + egress across owned projects). Enforcement is eventual:
        requests are rejected until the cap increases (plan/override) or the
        calendar-month meter resets.
        ' to 'The platform user exceeded their billing-cycle bandwidth allowance (aggregate
        ingress + egress across owned projects). Enforcement is eventual:
        requests are rejected until the allowance increases or the next
        anniversary cycle begins.
        '

POST /storage/{bucketName}/copy

  • Responses changed
    • Modified response: 429
      • Description changed from 'The platform user exceeded their monthly bandwidth cap (aggregate
        ingress + egress across owned projects). Enforcement is eventual:
        requests are rejected until the cap increases (plan/override) or the
        calendar-month meter resets.
        ' to 'The platform user exceeded their billing-cycle bandwidth allowance (aggregate
        ingress + egress across owned projects). Enforcement is eventual:
        requests are rejected until the allowance increases or the next
        anniversary cycle begins.
        '

POST /storage/{bucketName}/move

  • Responses changed
    • Modified response: 429
      • Description changed from 'The platform user exceeded their monthly bandwidth cap (aggregate
        ingress + egress across owned projects). Enforcement is eventual:
        requests are rejected until the cap increases (plan/override) or the
        calendar-month meter resets.
        ' to 'The platform user exceeded their billing-cycle bandwidth allowance (aggregate
        ingress + egress across owned projects). Enforcement is eventual:
        requests are rejected until the allowance increases or the next
        anniversary cycle begins.
        '

DELETE /storage/{bucketName}/{path}

  • Responses changed
    • Modified response: 429
      • Description changed from 'The platform user exceeded their monthly bandwidth cap (aggregate
        ingress + egress across owned projects). Enforcement is eventual:
        requests are rejected until the cap increases (plan/override) or the
        calendar-month meter resets.
        ' to 'The platform user exceeded their billing-cycle bandwidth allowance (aggregate
        ingress + egress across owned projects). Enforcement is eventual:
        requests are rejected until the allowance increases or the next
        anniversary cycle begins.
        '

GET /storage/{bucketName}/{path}

  • Responses changed
    • Modified response: 429
      • Description changed from 'The platform user exceeded their monthly bandwidth cap (aggregate
        ingress + egress across owned projects). Enforcement is eventual:
        requests are rejected until the cap increases (plan/override) or the
        calendar-month meter resets.
        ' to 'The platform user exceeded their billing-cycle bandwidth allowance (aggregate
        ingress + egress across owned projects). Enforcement is eventual:
        requests are rejected until the allowance increases or the next
        anniversary cycle begins.
        '

POST /storage/{bucketName}/{path}

  • Responses changed
    • Modified response: 429
      • Description changed from 'The platform user exceeded their monthly bandwidth cap (aggregate
        ingress + egress across owned projects). Enforcement is eventual:
        requests are rejected until the cap increases (plan/override) or the
        calendar-month meter resets.
        ' to 'The platform user exceeded their billing-cycle bandwidth allowance (aggregate
        ingress + egress across owned projects). Enforcement is eventual:
        requests are rejected until the allowance increases or the next
        anniversary cycle begins.
        '

Validation

@CLAassistant

CLAassistant commented Jul 13, 2026

Copy link
Copy Markdown

CLA assistant check
All committers have signed the CLA.

@kong
kong Bot force-pushed the chore/sync-openapi branch 10 times, most recently from 04d66d1 to b8d922a Compare July 20, 2026 13:54
@kong
kong Bot force-pushed the chore/sync-openapi branch 10 times, most recently from ee0bdba to eb217d3 Compare July 27, 2026 22:41
@kong
kong Bot force-pushed the chore/sync-openapi branch 9 times, most recently from bc4afe5 to 7b3fd89 Compare July 31, 2026 00:52
@kong
kong Bot force-pushed the chore/sync-openapi branch 6 times, most recently from ee8c547 to 90f7585 Compare August 7, 2026 10:32
@kong
kong Bot force-pushed the chore/sync-openapi branch 7 times, most recently from ce30e63 to 00a5297 Compare August 15, 2026 11:10
@kong
kong Bot force-pushed the chore/sync-openapi branch 11 times, most recently from bd1e685 to 96d81db Compare August 24, 2026 23:52
@kong
kong Bot force-pushed the chore/sync-openapi branch 3 times, most recently from 75791c1 to 1d0cd33 Compare August 27, 2026 05:59
@kong
kong Bot force-pushed the chore/sync-openapi branch from 1d0cd33 to 7097219 Compare August 27, 2026 08:28
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

1 participant