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


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

Deleted Endpoints: None


Modified Endpoints: 57


GET /auth/user/sessions

  • Description changed from 'Returns paginated sessions for the currently authenticated user.
    Each session includes device info, IP addresses, and activity timestamps.
    The current session is marked with is_current: true.
    ' to 'Returns paginated sessions for the currently authenticated user.
    Each session includes device info, IP addresses, and activity timestamps.
    The current session is marked with is_current: true.

Ordering and pagination. Without sort, results are ordered by most
recent activity and paged with page/limit, returning the
sessions/total/page/limit/total_pages body below. This is the
legacy default and is preserved for existing clients.

Send sort=created_at to opt into the standard list contract: results are
ordered by session start (newest first) and may be paged either with
page/limit or by cursor with cursor/ending_before plus a bounded
offset past the cursor anchor. Cursor responses use the shared
data envelope with next_cursor/prev_cursor.

Unlike other list endpoints, sending limit without page does not
select cursor mode here; sort=created_at is the only opt-in. Cursor
pagination is rejected with 400 for the activity order, because
last_activity_at changes whenever a session refreshes its token: a row
that crosses the cursor anchor between two requests would be skipped and
never shown. The status=expired filter is also offset-only because a
session can expire above the cursor anchor during a walk. Sending that
filter in cursor mode, page with cursor or ending_before, or both
cursor directions returns 400.
'

  • New query param: cursor
  • New query param: ending_before
  • New query param: offset
  • New query param: sort
  • New query param: status
  • Responses changed
    • New response: 400
    • Modified response: 200
      • Content changed
        • Modified media type: application/json
          • Schema changed
            • Properties changed
              • New property: data
              • New property: has_more
              • New property: next_cursor
              • New property: prev_cursor
              • Modified property: sessions
                • Items changed
                  • Required changed
                    • New required property: is_active
                    • New required property: is_current

GET /databases/regions

  • Summary changed from 'List platform-supported AWS-backed regions for database provisioning' to 'List platform-supported regions for database provisioning'
  • Description changed from 'Returns the AWS-backed Neon regions enabled for this platform environment.
    This is a public endpoint that doesn't require authentication.
    ' to 'Returns the regions enabled for database provisioning in this platform environment.
    This is a public endpoint that doesn't require authentication.
    '
  • Responses changed
    • Modified response: 200
      • Description changed from 'List of platform-supported AWS-backed regions' to 'List of platform-supported regions'

POST /databases/{databaseName}/branches/{branchName}/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}/branches/{branchName}/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}/branches/{branchName}/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}/branches/{branchName}/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}/branches/{branchName}/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 /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

  • Description changed from 'Query your database using a simple REST API - no SQL required!

Authentication: Requires auth user access token (from signup/signin)

Row-Level Security: Automatically enforced - you see only data you have access to

Use Cases:

  • Query from browser/mobile apps
  • Simple data retrieval
  • Filtered searches with sorting and pagination

Note: For complex queries (JOINs, CTEs), use Lambda functions with direct SQL
' to 'Query your database using a simple REST API - no SQL required!

Authentication: Requires auth user access token (from signup/signin)

Row-Level Security: Automatically enforced - you see only data you have access to

Use Cases:

  • Query from browser/mobile apps
  • Simple data retrieval
  • Filtered searches with sorting and pagination

Note: For complex queries (JOINs, CTEs), use functions with direct SQL
'

  • 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.
        '

GET /functions/regions

  • Summary changed from 'List available AWS regions for function deployment' to 'List available regions for function deployment'
  • Description changed from 'Returns the configured AWS regions where functions can be deployed, each annotated
    with a human-readable label and country flag emoji for use in UI pickers.
    This is a public endpoint that doesn't require authentication.
    ' to 'Returns the configured regions where functions can be deployed, each annotated
    with a human-readable label and country flag emoji for use in UI pickers.
    This is a public endpoint that doesn't require authentication.
    '
  • Responses changed
    • Modified response: 200
      • Content changed
        • Modified media type: application/json
          • Schema changed
            • Items changed
              • Properties changed
                • Modified property: code
                  • Description changed from 'AWS region identifier accepted by function APIs.' to 'Region identifier accepted by function APIs.'

POST /functions/{functionId}/invoke

  • Request body changed
    • Content changed
      • Modified media type: application/json
        • Schema changed
          • Properties changed
            • Modified property: payload
              • Description changed from 'Payload to send to the Lambda function.

If invoked with auth user token, Volcano automatically injects __volcano_auth context:

{
  ...yourPayload,
  __volcano_auth: {
    user_id: "uuid",
    email: "user@example.com",
    project_id: "uuid",
    role: "authenticated" | "anonymous"
  }
}

' to 'Payload to send to the function.

If invoked with auth user token, Volcano automatically injects __volcano_auth context:

{
  ...yourPayload,
  __volcano_auth: {
    user_id: "uuid",
    email: "user@example.com",
    project_id: "uuid",
    role: "authenticated" | "anonymous"
  }
}

'

  • Responses changed
    • Modified response: 200
      • Headers changed
        • New header: x-volcano-region
    • 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.
        '
    • Modified response: default
      • Headers changed
        • New header: x-volcano-region

GET /projects

  • Responses changed
    • Modified response: 200
      • Content changed
        • Modified media type: application/json
          • Schema changed
            • Properties changed
              • Modified property: data
                • Items changed
                  • Properties changed
                    • Modified property: logo_url
                    • Description changed from 'Relative API path that serves the project logo when one has been
                      uploaded. The path is versioned with a ?v= cache-busting query
                      param that changes on each upload. Absent when the project has no
                      logo. The logo image is stored in the project's S3 folder.
                      ' to 'Relative API path that serves the project logo when one has been
                      uploaded. The path is versioned with a ?v= cache-busting query
                      param that changes on each upload. Absent when the project has no
                      logo. The logo image is stored in the project's storage folder.
                      '

POST /projects

  • Responses changed
    • Modified response: 201
      • Content changed
        • Modified media type: application/json
          • Schema changed
            • Properties changed
              • Modified property: logo_url
                • Description changed from 'Relative API path that serves the project logo when one has been
                  uploaded. The path is versioned with a ?v= cache-busting query
                  param that changes on each upload. Absent when the project has no
                  logo. The logo image is stored in the project's S3 folder.
                  ' to 'Relative API path that serves the project logo when one has been
                  uploaded. The path is versioned with a ?v= cache-busting query
                  param that changes on each upload. Absent when the project has no
                  logo. The logo image is stored in the project's storage folder.
                  '

GET /projects/{id}

  • Responses changed
    • Modified response: 200
      • Content changed
        • Modified media type: application/json
          • Schema changed
            • Properties changed
              • Modified property: logo_url
                • Description changed from 'Relative API path that serves the project logo when one has been
                  uploaded. The path is versioned with a ?v= cache-busting query
                  param that changes on each upload. Absent when the project has no
                  logo. The logo image is stored in the project's S3 folder.
                  ' to 'Relative API path that serves the project logo when one has been
                  uploaded. The path is versioned with a ?v= cache-busting query
                  param that changes on each upload. Absent when the project has no
                  logo. The logo image is stored in the project's storage folder.
                  '

PATCH /projects/{id}

  • Responses changed
    • Modified response: 200
      • Content changed
        • Modified media type: application/json
          • Schema changed
            • Properties changed
              • Modified property: logo_url
                • Description changed from 'Relative API path that serves the project logo when one has been
                  uploaded. The path is versioned with a ?v= cache-busting query
                  param that changes on each upload. Absent when the project has no
                  logo. The logo image is stored in the project's S3 folder.
                  ' to 'Relative API path that serves the project logo when one has been
                  uploaded. The path is versioned with a ?v= cache-busting query
                  param that changes on each upload. Absent when the project has no
                  logo. The logo image is stored in the project's storage folder.
                  '

GET /projects/{id}/auth/config

  • Responses changed
    • Modified response: 200
      • Content changed
        • Modified media type: application/json
          • Schema changed
            • Properties changed
              • Modified property: allowed_email_domains
                • Description changed from 'Email domains allowed to create users in this project. Applies to
                  email/password signup, OAuth/SSO signup, anonymous conversion, and
                  email changes. Empty (the default) allows every domain.

Entries are stored normalized (lowercase, no @ prefix) and match
the domain part exactly: domain1.com does not cover
mail.domain1.com. Signups from other domains are rejected with
403, and allowed_email_domains_mode decides whether sign-in is
covered as well.
' to 'Email domains allowed to create users in this project. Applies to
email/password signup, OAuth/SSO signup, anonymous conversion, and
email changes. Empty (the default) allows every domain.

Entries are stored normalized (lowercase, no @ prefix) and match
the domain part exactly: domain1.com does not cover
mail.domain1.com. Signups from other domains are rejected with
403, and allowed_email_domains_mode decides whether sign-in is
covered as well.

The allowlist is a PRO feature to configure and to enforce. A
downgrade parks it: the domains are still returned here and stop
being applied until the project is back on PRO.
'

PUT /projects/{id}/auth/config

  • Description changed from '' to 'Updates the project's auth configuration. Only the fields present in
    the body are changed.
    '
  • Request body changed
    • Content changed
      • Modified media type: application/json
        • Schema changed
          • Properties changed
            • Modified property: allowed_email_domains
              • Description changed from 'Replaces the email domain allowlist. Empty array removes the
                restriction so any domain can sign up. Entries must be bare domains
                such as domain1.com and are stored normalized (lowercase, no @
                prefix); matching is exact, so subdomains need their own entry. At
                most 100 entries.
                ' to 'Replaces the email domain allowlist. Empty array removes the
                restriction so any domain can sign up. Entries must be bare domains
                such as domain1.com and are stored normalized (lowercase, no @
                prefix); matching is exact, so subdomains need their own entry. At
                most 100 entries.

Restricting signups is a PRO feature to configure and to enforce: a
FREE project can only remove the restriction and gets 403 for any
other change, and the list it keeps is parked until it upgrades.
'

  • Responses changed
    • New response: 403
    • Modified response: 200
      • Content changed
        • Modified media type: application/json
          • Schema changed
            • Properties changed
              • Modified property: allowed_email_domains
                • Description changed from 'Email domains allowed to create users in this project. Applies to
                  email/password signup, OAuth/SSO signup, anonymous conversion, and
                  email changes. Empty (the default) allows every domain.

Entries are stored normalized (lowercase, no @ prefix) and match
the domain part exactly: domain1.com does not cover
mail.domain1.com. Signups from other domains are rejected with
403, and allowed_email_domains_mode decides whether sign-in is
covered as well.
' to 'Email domains allowed to create users in this project. Applies to
email/password signup, OAuth/SSO signup, anonymous conversion, and
email changes. Empty (the default) allows every domain.

Entries are stored normalized (lowercase, no @ prefix) and match
the domain part exactly: domain1.com does not cover
mail.domain1.com. Signups from other domains are rejected with
403, and allowed_email_domains_mode decides whether sign-in is
covered as well.

The allowlist is a PRO feature to configure and to enforce. A
downgrade parks it: the domains are still returned here and stop
being applied until the project is back on PRO.
'

GET /projects/{id}/auth/hosted-pages/{pageType}

  • Description changed from 'Returns current saved HTML/CSS for the page type. If no custom page exists yet, returns the default template for that page type.' to 'Returns the saved HTML/CSS for the page type, or page: null when the
    project has not customized it yet. Always returns defaults (the theme
    shell to seed an editor with, which is valid input to the update endpoint)
    and runtime (the script the rendered page runs, plus a preview harness).
    '
  • Responses changed
    • Modified response: 200
      • Content changed
        • Modified media type: application/json
          • Schema changed
            • Required changed
              • New required property: defaults
              • New required property: page
              • New required property: runtime
            • Properties changed
              • New property: defaults
              • New property: runtime
              • Modified property: page
                • Property 'AllOf' changed
                  • Schemas added: #/components/schemas/AuthHostedPage
                • Type changed from 'object' to ''
                • Description changed from '' to 'The saved page, or null when the project has not customized this page type yet.'
                • Nullable changed from false to true
                • Properties changed
                  • Deleted property: created_at
                  • Deleted property: css
                  • Deleted property: html
                  • Deleted property: id
                  • Deleted property: page_type
                  • Deleted property: project_id
                  • Deleted property: updated_at

PUT /projects/{id}/auth/hosted-pages/{pageType}

  • Responses changed
    • Modified response: 200
      • Content changed
        • Modified media type: application/json
          • Schema changed
            • Required changed
              • New required property: defaults
              • New required property: page
              • New required property: runtime
            • Properties changed
              • New property: defaults
              • New property: runtime
              • Modified property: page
                • Property 'AllOf' changed
                  • Schemas added: #/components/schemas/AuthHostedPage
                • Type changed from 'object' to ''
                • Description changed from '' to 'The saved page, or null when the project has not customized this page type yet.'
                • Nullable changed from false to true
                • Properties changed
                  • Deleted property: created_at
                  • Deleted property: css
                  • Deleted property: html
                  • Deleted property: id
                  • Deleted property: page_type
                  • Deleted property: project_id
                  • Deleted property: updated_at

GET /projects/{id}/auth/users/{userId}/sessions

  • Description changed from 'List paginated sessions for a specific auth user.
    Returns session details including device info, IP address, and activity timestamps.
    ' to 'List paginated sessions for a specific auth user.
    Returns session details including device info, IP address, and activity timestamps.

Ordering and pagination match GET /auth/user/sessions: the default is
activity order with page/limit and the legacy sessions body, and
sort=created_at opts into the standard cursor/offset hybrid with the
shared data envelope. Cursor pagination is only available for
sort=created_at, because the activity timestamp changes under paging.
The status=expired filter is offset-only because sessions can expire
above a cursor anchor during a walk.
'

  • New query param: cursor
  • New query param: ending_before
  • New query param: offset
  • New query param: sort
  • New query param: status
  • Responses changed
    • New response: 400
    • Modified response: 200
      • Content changed
        • Modified media type: application/json
          • Schema changed
            • Properties changed
              • New property: data
              • New property: has_more
              • New property: next_cursor
              • New property: prev_cursor
              • Modified property: sessions
                • Items changed
                  • Required changed
                    • New required property: is_active
                    • New required property: is_current

GET /projects/{id}/config

  • Responses changed
    • Modified response: 200
      • Content changed
        • Modified media type: application/json
          • Schema changed
            • Properties changed
              • Modified property: auth
                • Properties changed
                  • Modified property: signup
                    • Properties changed
                    • Modified property: allowed_email_domains
                    • Description changed from 'Email domains allowed to create users. Empty allows every domain.
                      Replaces the stored list; entries are normalized (lowercase, no @
                      prefix) and must be bare domains such as domain1.com. Matching is
                      exact, so subdomains need their own entry. At most 100 entries.
                      ' to 'Email domains allowed to create users. Empty allows every domain.
                      Replaces the stored list; entries are normalized (lowercase, no @
                      prefix) and must be bare domains such as domain1.com. Matching is
                      exact, so subdomains need their own entry. At most 100 entries.

Restricting signups is a PRO feature to configure and to enforce: a
FREE project can only declare the list it already has or remove the
restriction, and the list it keeps is parked until it upgrades.
'
- Modified property: databases
- Items changed
- Properties changed
- Modified property: region
- Description changed from 'Deployed region (aws- prefixed, e.g. aws-us-east-1). Asserted, never written.' to 'Deployed region ID (e.g. aws-us-east-1). Asserted, never written.'
- Modified property: project
- Properties changed
- Modified property: selected_regions
- Description changed from 'Region subset (bare AWS names). Requires all_regions=false.' to 'Region subset (bare region names). Requires all_regions=false.'

PUT /projects/{id}/config

  • Request body changed
    • Content changed
      • Modified media type: application/json
        • Schema changed
          • Properties changed
            • Modified property: auth
              • Properties changed
                • Modified property: signup
                  • Properties changed
                    • Modified property: allowed_email_domains
                    • Description changed from 'Email domains allowed to create users. Empty allows every domain.
                      Replaces the stored list; entries are normalized (lowercase, no @
                      prefix) and must be bare domains such as domain1.com. Matching is
                      exact, so subdomains need their own entry. At most 100 entries.
                      ' to 'Email domains allowed to create users. Empty allows every domain.
                      Replaces the stored list; entries are normalized (lowercase, no @
                      prefix) and must be bare domains such as domain1.com. Matching is
                      exact, so subdomains need their own entry. At most 100 entries.

Restricting signups is a PRO feature to configure and to enforce: a
FREE project can only declare the list it already has or remove the
restriction, and the list it keeps is parked until it upgrades.
'
- Modified property: databases
- Items changed
- Properties changed
- Modified property: region
- Description changed from 'Deployed region (aws- prefixed, e.g. aws-us-east-1). Asserted, never written.' to 'Deployed region ID (e.g. aws-us-east-1). Asserted, never written.'
- Modified property: project
- Properties changed
- Modified property: selected_regions
- Description changed from 'Region subset (bare AWS names). Requires all_regions=false.' to 'Region subset (bare region names). Requires all_regions=false.'

GET /projects/{id}/databases

  • Responses changed
    • Modified response: 200
      • Content changed
        • Modified media type: application/json
          • Schema changed
            • Properties changed
              • Modified property: data
                • Items changed
                  • Properties changed
                    • Modified property: region
                    • Description changed from 'AWS region where database is hosted' to 'Region where the database is hosted'

POST /projects/{id}/databases

  • Request body changed
    • Content changed
      • Modified media type: application/json
        • Schema changed
          • Properties changed
            • Modified property: region
              • Description changed from 'AWS region for database hosting' to 'Region for database hosting'
  • Responses changed
    • Modified response: 201
      • Content changed
        • Modified media type: application/json
          • Schema changed
            • Properties changed
              • Modified property: region
                • Description changed from 'AWS region where database is hosted' to 'Region where the database is hosted'

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

  • Description changed from 'Deletes a database and its backing Neon project. When the Neon project is
    removed synchronously the database row is deleted and the response is
    204. If the Neon project cannot be deleted right away, the database row
    is retained (status deleting) and its teardown is handed to the
    background reconciler, which retries the Neon deletion and removes the row
    once Neon is gone; in that case the response is 202. The database row is
    never dropped while its Neon project still exists, so a Neon project is
    never orphaned without a record to retry from.
    ' to 'Deletes a database and the instance backing it. When the instance is
    removed synchronously the database row is deleted and the response is
    204. If the instance cannot be deleted right away, the database row
    is retained (status deleting) and its teardown is handed to the
    background reconciler, which retries the deletion and removes the row
    once the instance is gone; in that case the response is 202. The database row is
    never dropped while its instance still exists, so an instance is
    never orphaned without a record to retry from.
    '
  • Responses changed
    • Modified response: 202
      • Description changed from 'Deletion accepted and in progress. The Neon project could not be
        removed synchronously, so the database is marked deleting and torn
        down asynchronously by the reconciler.
        ' to 'Deletion accepted and in progress. The backing instance could not be
        removed synchronously, so the database is marked deleting and torn
        down asynchronously by the reconciler.
        '
    • Modified response: 204
      • Description changed from 'Database deleted (Neon project removed synchronously)' to 'Database deleted (backing instance removed synchronously)'

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

  • Responses changed
    • Modified response: 200
      • Content changed
        • Modified media type: application/json
          • Schema changed
            • Properties changed
              • Modified property: region
                • Description changed from 'AWS region where database is hosted' to 'Region where the database is hosted'

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

  • Responses changed
    • Modified response: 200
      • Content changed
        • Modified media type: application/json
          • Schema changed
            • Properties changed
              • Modified property: data
                • Items changed
                  • Properties changed
                    • Modified property: status
                    • Description changed from 'Branch status. A new branch starts provisioning and is not
                      connectable until it reports active; poll this endpoint until it
                      does. connection_string is only present while active.
                      ' to 'Branch status. A new branch starts provisioning and is not
                      connectable until it reports active; poll this endpoint until it
                      does. connection_string is only present while active.

provisioning also covers a branch being rebuilt after a reset,
and a build that is between retries, so it is the status to keep
waiting on. failed is terminal: it means the platform gave up, and
the branch will not become active on its own.
'

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

  • Responses changed
    • Modified response: 202
      • Content changed
        • Modified media type: application/json
          • Schema changed
            • Properties changed
              • Modified property: status
                • Description changed from 'Branch status. A new branch starts provisioning and is not
                  connectable until it reports active; poll this endpoint until it
                  does. connection_string is only present while active.
                  ' to 'Branch status. A new branch starts provisioning and is not
                  connectable until it reports active; poll this endpoint until it
                  does. connection_string is only present while active.

provisioning also covers a branch being rebuilt after a reset,
and a build that is between retries, so it is the status to keep
waiting on. failed is terminal: it means the platform gave up, and
the branch will not become active on its own.
'

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.
'

GET /projects/{id}/databases/{databaseName}/branches/{branchName}

  • Responses changed
    • Modified response: 200
      • Content changed
        • Modified media type: application/json
          • Schema changed
            • Properties changed
              • Modified property: status
                • Description changed from 'Branch status. A new branch starts provisioning and is not
                  connectable until it reports active; poll this endpoint until it
                  does. connection_string is only present while active.
                  ' to 'Branch status. A new branch starts provisioning and is not
                  connectable until it reports active; poll this endpoint until it
                  does. connection_string is only present while active.

provisioning also covers a branch being rebuilt after a reset,
and a build that is between retries, so it is the status to keep
waiting on. failed is terminal: it means the platform gave up, and
the branch will not become active on its own.
'

PATCH /projects/{id}/databases/{databaseName}/branches/{branchName}

  • Responses changed
    • Modified response: 200
      • Content changed
        • Modified media type: application/json
          • Schema changed
            • Properties changed
              • Modified property: status
                • Description changed from 'Branch status. A new branch starts provisioning and is not
                  connectable until it reports active; poll this endpoint until it
                  does. connection_string is only present while active.
                  ' to 'Branch status. A new branch starts provisioning and is not
                  connectable until it reports active; poll this endpoint until it
                  does. connection_string is only present while active.

provisioning also covers a branch being rebuilt after a reset,
and a build that is between retries, so it is the status to keep
waiting on. failed is terminal: it means the platform gave up, and
the branch will not become active on its own.
'

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

  • Responses changed
    • Modified response: 202
      • Content changed
        • Modified media type: application/json
          • Schema changed
            • Properties changed
              • Modified property: status
                • Description changed from 'Branch status. A new branch starts provisioning and is not
                  connectable until it reports active; poll this endpoint until it
                  does. connection_string is only present while active.
                  ' to 'Branch status. A new branch starts provisioning and is not
                  connectable until it reports active; poll this endpoint until it
                  does. connection_string is only present while active.

provisioning also covers a branch being rebuilt after a reset,
and a build that is between retries, so it is the status to keep
waiting on. failed is terminal: it means the platform gave up, and
the branch will not become active on its own.
'

POST /projects/{id}/databases/{databaseName}/branches/{branchName}/reset-password

  • Responses changed
    • Modified response: 200
      • Content changed
        • Modified media type: application/json
          • Schema changed
            • Properties changed
              • Modified property: status
                • Description changed from 'Branch status. A new branch starts provisioning and is not
                  connectable until it reports active; poll this endpoint until it
                  does. connection_string is only present while active.
                  ' to 'Branch status. A new branch starts provisioning and is not
                  connectable until it reports `act

Report truncated; see the source commit for the complete contract diff.

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 10 times, most recently from db70cc7 to bd1e685 Compare August 23, 2026 19:35
@kong
kong Bot force-pushed the chore/sync-openapi branch from bd1e685 to 96d81db Compare August 24, 2026 23:52
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