Appwrite TablesDB API

The TablesDB service allows you to create structured tables of columns, query and filter lists of rows. 80 operations across 59 paths in the Appwrite 2.0.0 OpenAPI.

Operations 80

GET /tablesdb List databases #
POST /tablesdb Create database #
GET /tablesdb/specifications List specifications #
GET /tablesdb/transactions List transactions #
POST /tablesdb/transactions Create transaction #
GET /tablesdb/transactions/{transactionId} Get transaction #
PATCH /tablesdb/transactions/{transactionId} Update transaction #
DELETE /tablesdb/transactions/{transactionId} Delete transaction #
POST /tablesdb/transactions/{transactionId}/operations Create operations #
GET /tablesdb/{databaseId} Get database #
PUT /tablesdb/{databaseId} Update database #
DELETE /tablesdb/{databaseId} Delete database #
POST /tablesdb/{databaseId}/failovers Create failover #
GET /tablesdb/{databaseId}/migrations List migrations #
POST /tablesdb/{databaseId}/migrations Create migration #
GET /tablesdb/{databaseId}/migrations/{migrationId} Get migration #
DELETE /tablesdb/{databaseId}/migrations/{migrationId} Delete migration #
POST /tablesdb/{databaseId}/migrations/{migrationId}/cutovers Cutover migration #
GET /tablesdb/{databaseId}/operations List operations #
GET /tablesdb/{databaseId}/replicas Get replicas #
GET /tablesdb/{databaseId}/status Get status #
GET /tablesdb/{databaseId}/tables List tables #
POST /tablesdb/{databaseId}/tables Create table #
GET /tablesdb/{databaseId}/tables/{tableId} Get table #
PUT /tablesdb/{databaseId}/tables/{tableId} Update table #
DELETE /tablesdb/{databaseId}/tables/{tableId} Delete table #
GET /tablesdb/{databaseId}/tables/{tableId}/columns List columns #
POST /tablesdb/{databaseId}/tables/{tableId}/columns/bigint Create bigint column #
PATCH /tablesdb/{databaseId}/tables/{tableId}/columns/bigint/{key} Update bigint column #
POST /tablesdb/{databaseId}/tables/{tableId}/columns/boolean Create boolean column #
PATCH /tablesdb/{databaseId}/tables/{tableId}/columns/boolean/{key} Update boolean column #
POST /tablesdb/{databaseId}/tables/{tableId}/columns/datetime Create datetime column #
PATCH /tablesdb/{databaseId}/tables/{tableId}/columns/datetime/{key} Update datetime column #
POST /tablesdb/{databaseId}/tables/{tableId}/columns/email Create email column #
PATCH /tablesdb/{databaseId}/tables/{tableId}/columns/email/{key} Update email column #
POST /tablesdb/{databaseId}/tables/{tableId}/columns/enum Create enum column #
PATCH /tablesdb/{databaseId}/tables/{tableId}/columns/enum/{key} Update enum column #
POST /tablesdb/{databaseId}/tables/{tableId}/columns/float Create float column #
PATCH /tablesdb/{databaseId}/tables/{tableId}/columns/float/{key} Update float column #
POST /tablesdb/{databaseId}/tables/{tableId}/columns/integer Create integer column #
PATCH /tablesdb/{databaseId}/tables/{tableId}/columns/integer/{key} Update integer column #
POST /tablesdb/{databaseId}/tables/{tableId}/columns/ip Create IP address column #
PATCH /tablesdb/{databaseId}/tables/{tableId}/columns/ip/{key} Update IP address column #
POST /tablesdb/{databaseId}/tables/{tableId}/columns/line Create line column #
PATCH /tablesdb/{databaseId}/tables/{tableId}/columns/line/{key} Update line column #
POST /tablesdb/{databaseId}/tables/{tableId}/columns/longtext Create longtext column #
PATCH /tablesdb/{databaseId}/tables/{tableId}/columns/longtext/{key} Update longtext column #
POST /tablesdb/{databaseId}/tables/{tableId}/columns/mediumtext Create mediumtext column #
PATCH /tablesdb/{databaseId}/tables/{tableId}/columns/mediumtext/{key} Update mediumtext column #
POST /tablesdb/{databaseId}/tables/{tableId}/columns/point Create point column #
PATCH /tablesdb/{databaseId}/tables/{tableId}/columns/point/{key} Update point column #
POST /tablesdb/{databaseId}/tables/{tableId}/columns/polygon Create polygon column #
PATCH /tablesdb/{databaseId}/tables/{tableId}/columns/polygon/{key} Update polygon column #
POST /tablesdb/{databaseId}/tables/{tableId}/columns/relationship Create relationship column #
POST /tablesdb/{databaseId}/tables/{tableId}/columns/string Create string column #
PATCH /tablesdb/{databaseId}/tables/{tableId}/columns/string/{key} Update string column #
POST /tablesdb/{databaseId}/tables/{tableId}/columns/text Create text column #
PATCH /tablesdb/{databaseId}/tables/{tableId}/columns/text/{key} Update text column #
POST /tablesdb/{databaseId}/tables/{tableId}/columns/url Create URL column #
PATCH /tablesdb/{databaseId}/tables/{tableId}/columns/url/{key} Update URL column #
POST /tablesdb/{databaseId}/tables/{tableId}/columns/varchar Create varchar column #
PATCH /tablesdb/{databaseId}/tables/{tableId}/columns/varchar/{key} Update varchar column #
GET /tablesdb/{databaseId}/tables/{tableId}/columns/{key} Get column #
DELETE /tablesdb/{databaseId}/tables/{tableId}/columns/{key} Delete column #
PATCH /tablesdb/{databaseId}/tables/{tableId}/columns/{key}/relationship Update relationship column #
GET /tablesdb/{databaseId}/tables/{tableId}/indexes List indexes #
POST /tablesdb/{databaseId}/tables/{tableId}/indexes Create index #
GET /tablesdb/{databaseId}/tables/{tableId}/indexes/{key} Get index #
DELETE /tablesdb/{databaseId}/tables/{tableId}/indexes/{key} Delete index #
GET /tablesdb/{databaseId}/tables/{tableId}/rows List rows #
POST /tablesdb/{databaseId}/tables/{tableId}/rows Create row #
PUT /tablesdb/{databaseId}/tables/{tableId}/rows Upsert rows #
PATCH /tablesdb/{databaseId}/tables/{tableId}/rows Update rows #
DELETE /tablesdb/{databaseId}/tables/{tableId}/rows Delete rows #
GET /tablesdb/{databaseId}/tables/{tableId}/rows/{rowId} Get row #
PUT /tablesdb/{databaseId}/tables/{tableId}/rows/{rowId} Upsert a row #
PATCH /tablesdb/{databaseId}/tables/{tableId}/rows/{rowId} Update row #
DELETE /tablesdb/{databaseId}/tables/{tableId}/rows/{rowId} Delete row #
PATCH /tablesdb/{databaseId}/tables/{tableId}/rows/{rowId}/{column}/decrement Decrement row column #
PATCH /tablesdb/{databaseId}/tables/{tableId}/rows/{rowId}/{column}/increment Increment row column #

Work with this as data

Every API here is available over the APIs.io API and to AI agents over MCP.

MCP server

One button, every client — Claude, Cursor, VS Code and the rest.

https://apis.io/mcp

Tools for apis

7 MCP tools reach this
  • find_apisBrowse and filter every API in the catalog.
  • get_api_artifactsOne API's artifacts, grouped by type.
  • get_openapiThe primary OpenAPI for this API.
  • find_similar_apisAPIs that look like this one.
  • apis_io_searchSTART HERE — APIs, providers and tags for one query, each with its total.
  • resolveTurn a domain, URL or GitHub org into the provider it belongs to.
  • find_cohortsEvery scored population of providers in the catalog.
All 92 tools →

Call it yourself

curl for this page
This API
curl "https://apis.io/api/v1/apis/appwrite-tablesdb-api"
All apis
curl "https://apis.io/api/v1/apis?limit=25"

Discovery needs no key. Ratings and market analysis are Pro.

Get an API key

Free tier, no form to fill in. Signing in shares your email address with us — we store it to create your key and to recognise you if you sign in with another provider. See our Privacy Policy and Terms.

A second provider on the same verified email joins the account you already have.

OpenAPI Specification

appwrite-tablesdb-api-openapi.yml Raw ↑
openapi: 3.0.0
info:
  title: Appwrite TablesDB API
  description: Appwrite backend as a service cuts up to 70% of the time and costs required for building a modern application. We abstract and simplify common development tasks behind a REST APIs, to help you develop your app in a fast and secure way. For full API documentation and tutorials go to [https://appwrite.io/docs](https://appwrite.io/docs)
  version: 2.0.0
  termsOfService: https://appwrite.io/policy/terms
  contact:
    name: Appwrite Team
    url: https://appwrite.io/support
    email: team@appwrite.io
  license:
    name: BSD-3-Clause
    url: https://raw.githubusercontent.com/appwrite/appwrite/master/LICENSE
servers:
- url: https://cloud.appwrite.io/v1
  description: Appwrite Cloud endpoint.
- url: https://{region}.cloud.appwrite.io/v1
  description: Appwrite Cloud regional endpoint. Replace `{region}` with your project region.
  variables:
    region:
      default: fra
      description: Appwrite Cloud region.
tags:
- name: tablesDB
  description: The TablesDB service allows you to create structured tables of columns, query and filter lists of rows
paths:
  /tablesdb:
    get:
      summary: List databases
      operationId: tablesDBList
      tags:
      - tablesDB
      description: Get a list of all databases from the current Appwrite project. You can use the search parameter to filter your results.
      responses:
        '200':
          description: Databases List
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/databaseList'
      deprecated: false
      x-appwrite:
        group: tablesdb
        demo: tablesdb/list.md
        rate-limit: 0
        rate-time: 3600
        rate-key: url:{url},ip:{ip}
        scope: databases.read
        platforms:
        - console
        - server
        packaging: false
        public: true
        auth:
          console:
            Project: []
          server:
            Project: []
            Key: []
      security:
      - Project: []
        Key: []
      parameters:
      - name: queries
        description: 'Array of query strings generated using the Query class provided by the SDK. [Learn more about queries](https://appwrite.io/docs/queries). Maximum of 100 queries are allowed, each 4096 characters long. You may filter on the following columns: name'
        required: false
        schema:
          type: array
          items:
            type: string
          default: []
        in: query
      - name: search
        description: 'Search term to filter your list results. Max length: 256 chars.'
        required: false
        schema:
          type: string
          example: <SEARCH>
          default: ''
        in: query
      - name: total
        description: When set to false, the total count returned will be 0 and will not be calculated.
        required: false
        schema:
          type: boolean
          example: false
          default: true
        in: query
    post:
      summary: Create database
      operationId: tablesDBCreate
      tags:
      - tablesDB
      description: 'Create a new Database.

        '
      responses:
        '201':
          description: Database
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/database'
      deprecated: false
      x-appwrite:
        group: tablesdb
        demo: tablesdb/create.md
        rate-limit: 0
        rate-time: 3600
        rate-key: url:{url},ip:{ip}
        scope: databases.write
        platforms:
        - console
        - server
        packaging: false
        public: true
        auth:
          console:
            Project: []
          server:
            Project: []
            Key: []
      security:
      - Project: []
        Key: []
      requestBody:
        content:
          application/json:
            schema:
              type: object
              properties:
                databaseId:
                  description: Unique Id. Choose a custom ID or generate a random ID with `ID.unique()`. Valid chars are a-z, A-Z, 0-9, period, hyphen, and underscore. Can't start with a special char. Max length is 36 chars.
                  type: string
                  example: <DATABASE_ID>
                  x-appwrite:
                    idGenerator: ID.unique
                name:
                  description: 'Database name. Max length: 128 chars.'
                  type: string
                  example: <NAME>
                enabled:
                  description: Is the database enabled? When set to 'disabled', users cannot access the database but Server SDKs with an API key can still read and write to the database. No data is lost when this is toggled.
                  type: boolean
                  default: true
                  example: false
                specification:
                  description: Database specification. Defaults to `serverless`, which creates the database on the shared pool. Any other value provisions a dedicated database on that specification.
                  type: string
                  default: serverless
                  example: serverless
                replicas:
                  description: Number of high availability replicas (0-5) for the dedicated database backing this database. Requires a dedicated `specification`; must be 0 for a serverless database. High availability is enabled when greater than 0.
                  type: integer
                  default: 0
                  example: 0
                  format: int32
                syncMode:
                  description: 'Replication sync mode for the dedicated database backing this database. Requires a dedicated `specification`; the mode is only in force once there is at least one replica. Allowed values: async, sync, quorum.'
                  type: string
                  example: async
                  nullable: true
              required:
              - databaseId
              - name
  /tablesdb/specifications:
    get:
      summary: List specifications
      operationId: tablesDBListSpecifications
      tags:
      - tablesDB
      description: List the dedicated database specifications available on the current plan. Each specification reports its resource limits, its own prices and overage rates, and whether it is enabled for the organization.
      responses:
        '200':
          description: SpecificationList
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/dedicatedDatabaseSpecificationList'
      deprecated: false
      x-appwrite:
        group: tablesdb
        demo: tablesdb/list-specifications.md
        rate-limit: 0
        rate-time: 3600
        rate-key: url:{url},ip:{ip}
        scope: databases.read
        platforms:
        - console
        - server
        packaging: false
        public: true
        auth:
          console:
            Project: []
          server:
            Project: []
            Key: []
      security:
      - Project: []
        Key: []
  /tablesdb/transactions:
    get:
      summary: List transactions
      operationId: tablesDBListTransactions
      tags:
      - tablesDB
      description: List transactions across all databases.
      responses:
        '200':
          description: Transaction List
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/transactionList'
      deprecated: false
      x-appwrite:
        group: transactions
        demo: tablesdb/list-transactions.md
        rate-limit: 0
        rate-time: 3600
        rate-key: url:{url},ip:{ip}
        scope:
        - documents.read
        - rows.read
        platforms:
        - console
        - server
        - client
        packaging: false
        public: true
        auth:
          console:
            Project: []
          server:
            Project: []
            Key: []
          client:
            Project: []
      security:
      - Project: []
        Key: []
        Session: []
        JWT: []
      parameters:
      - name: queries
        description: Array of query strings generated using the Query class provided by the SDK. [Learn more about queries](https://appwrite.io/docs/queries).
        required: false
        schema:
          type: array
          items:
            type: string
          default: []
        in: query
    post:
      summary: Create transaction
      operationId: tablesDBCreateTransaction
      tags:
      - tablesDB
      description: Create a new transaction.
      responses:
        '201':
          description: Transaction
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/transaction'
      deprecated: false
      x-appwrite:
        group: transactions
        demo: tablesdb/create-transaction.md
        rate-limit: 0
        rate-time: 3600
        rate-key: url:{url},ip:{ip}
        scope:
        - documents.write
        - rows.write
        platforms:
        - console
        - server
        - client
        packaging: false
        public: true
        auth:
          console:
            Project: []
          server:
            Project: []
            Key: []
          client:
            Project: []
      security:
      - Project: []
        Key: []
        Session: []
        JWT: []
      requestBody:
        content:
          application/json:
            schema:
              type: object
              properties:
                ttl:
                  description: Seconds before the transaction expires.
                  type: integer
                  default: 300
                  example: 60
                  format: int32
  /tablesdb/transactions/{transactionId}:
    get:
      summary: Get transaction
      operationId: tablesDBGetTransaction
      tags:
      - tablesDB
      description: Get a transaction by its unique ID.
      responses:
        '200':
          description: Transaction
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/transaction'
      deprecated: false
      x-appwrite:
        group: transactions
        demo: tablesdb/get-transaction.md
        rate-limit: 0
        rate-time: 3600
        rate-key: url:{url},ip:{ip}
        scope:
        - documents.read
        - rows.read
        platforms:
        - console
        - server
        - client
        packaging: false
        public: true
        auth:
          console:
            Project: []
          server:
            Project: []
            Key: []
          client:
            Project: []
      security:
      - Project: []
        Key: []
        Session: []
        JWT: []
      parameters:
      - name: transactionId
        description: Transaction ID.
        required: true
        schema:
          type: string
          example: <TRANSACTION_ID>
        in: path
    patch:
      summary: Update transaction
      operationId: tablesDBUpdateTransaction
      tags:
      - tablesDB
      description: Update a transaction, to either commit or roll back its operations.
      responses:
        '200':
          description: Transaction
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/transaction'
      deprecated: false
      x-appwrite:
        group: transactions
        demo: tablesdb/update-transaction.md
        rate-limit: 0
        rate-time: 3600
        rate-key: url:{url},ip:{ip}
        scope:
        - documents.write
        - rows.write
        platforms:
        - console
        - server
        - client
        packaging: false
        public: true
        auth:
          console:
            Project: []
          server:
            Project: []
            Key: []
          client:
            Project: []
      security:
      - Project: []
        Key: []
        Session: []
        JWT: []
      parameters:
      - name: transactionId
        description: Transaction ID.
        required: true
        schema:
          type: string
          example: <TRANSACTION_ID>
        in: path
      requestBody:
        content:
          application/json:
            schema:
              type: object
              properties:
                commit:
                  description: Commit transaction?
                  type: boolean
                  default: false
                  example: false
                rollback:
                  description: Rollback transaction?
                  type: boolean
                  default: false
                  example: false
    delete:
      summary: Delete transaction
      operationId: tablesDBDeleteTransaction
      tags:
      - tablesDB
      description: Delete a transaction by its unique ID.
      responses:
        '204':
          description: No content
      deprecated: false
      x-appwrite:
        group: transactions
        demo: tablesdb/delete-transaction.md
        rate-limit: 0
        rate-time: 3600
        rate-key: url:{url},ip:{ip}
        scope:
        - documents.write
        - rows.write
        platforms:
        - console
        - server
        - client
        packaging: false
        public: true
        auth:
          console:
            Project: []
          server:
            Project: []
            Key: []
          client:
            Project: []
      security:
      - Project: []
        Key: []
        Session: []
        JWT: []
      parameters:
      - name: transactionId
        description: Transaction ID.
        required: true
        schema:
          type: string
          example: <TRANSACTION_ID>
        in: path
  /tablesdb/transactions/{transactionId}/operations:
    post:
      summary: Create operations
      operationId: tablesDBCreateOperations
      tags:
      - tablesDB
      description: Create multiple operations in a single transaction.
      responses:
        '201':
          description: Transaction
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/transaction'
      deprecated: false
      x-appwrite:
        group: transactions
        demo: tablesdb/create-operations.md
        rate-limit: 0
        rate-time: 3600
        rate-key: url:{url},ip:{ip}
        scope:
        - documents.write
        - rows.write
        platforms:
        - console
        - server
        - client
        packaging: false
        public: true
        auth:
          console:
            Project: []
          server:
            Project: []
            Key: []
          client:
            Project: []
      security:
      - Project: []
        Key: []
        Session: []
        JWT: []
      parameters:
      - name: transactionId
        description: Transaction ID.
        required: true
        schema:
          type: string
          example: <TRANSACTION_ID>
        in: path
      requestBody:
        content:
          application/json:
            schema:
              type: object
              properties:
                operations:
                  description: Array of staged operations.
                  type: array
                  default: []
                  example:
                  - action: create
                    databaseId: <DATABASE_ID>
                    tableId: <TABLE_ID>
                    rowId: <ROW_ID>
                    data:
                      name: Walter O'Brien
                  items:
                    type: object
  /tablesdb/{databaseId}:
    get:
      summary: Get database
      operationId: tablesDBGet
      tags:
      - tablesDB
      description: Get a database by its unique ID. This endpoint response returns a JSON object with the database metadata.
      responses:
        '200':
          description: Database
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/database'
      deprecated: false
      x-appwrite:
        group: tablesdb
        demo: tablesdb/get.md
        rate-limit: 0
        rate-time: 3600
        rate-key: url:{url},ip:{ip}
        scope: databases.read
        platforms:
        - console
        - server
        packaging: false
        public: true
        auth:
          console:
            Project: []
          server:
            Project: []
            Key: []
      security:
      - Project: []
        Key: []
      parameters:
      - name: databaseId
        description: Database ID.
        required: true
        schema:
          type: string
          example: <DATABASE_ID>
        in: path
    put:
      summary: Update database
      operationId: tablesDBUpdate
      tags:
      - tablesDB
      description: Update a database by its unique ID.
      responses:
        '200':
          description: Database
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/database'
      deprecated: false
      x-appwrite:
        group: tablesdb
        demo: tablesdb/update.md
        rate-limit: 0
        rate-time: 3600
        rate-key: url:{url},ip:{ip}
        scope: databases.write
        platforms:
        - console
        - server
        packaging: false
        public: true
        auth:
          console:
            Project: []
          server:
            Project: []
            Key: []
      security:
      - Project: []
        Key: []
      parameters:
      - name: databaseId
        description: Database ID.
        required: true
        schema:
          type: string
          example: <DATABASE_ID>
        in: path
      requestBody:
        content:
          application/json:
            schema:
              type: object
              properties:
                name:
                  description: 'Database name. Max length: 128 chars.'
                  type: string
                  example: <NAME>
                enabled:
                  description: Is database enabled? When set to 'disabled', users cannot access the database but Server SDKs with an API key can still read and write to the database. No data is lost when this is toggled.
                  type: boolean
                  default: true
                  example: false
                specification:
                  description: Database specification. Resizing between dedicated specifications changes cpu, memory, storage and the connection ceiling via a rolling cutover with zero downtime. Moving a `serverless` database onto a dedicated specification is a data migration, not a resize.
                  type: string
                  example: serverless
                  nullable: true
                replicas:
                  description: Number of high availability replicas (0-5) for the dedicated database backing this database. Only valid when the database is backed by a dedicated specification. High availability is enabled when greater than 0.
                  type: integer
                  example: 0
                  format: int32
                  nullable: true
                syncMode:
                  description: 'Replication sync mode for the dedicated database backing this database. Only valid when the database is backed by a dedicated specification; the mode is only in force once there is at least one replica. Allowed values: async, sync, quorum.'
                  type: string
                  example: async
                  nullable: true
    delete:
      summary: Delete database
      operationId: tablesDBDelete
      tags:
      - tablesDB
      description: Delete a database by its unique ID. Only API keys with with databases.write scope can delete a database.
      responses:
        '204':
          description: No content
      deprecated: false
      x-appwrite:
        group: tablesdb
        demo: tablesdb/delete.md
        rate-limit: 0
        rate-time: 3600
        rate-key: url:{url},ip:{ip}
        scope: databases.write
        platforms:
        - console
        - server
        packaging: false
        public: true
        auth:
          console:
            Project: []
          server:
            Project: []
            Key: []
      security:
      - Project: []
        Key: []
      parameters:
      - name: databaseId
        description: Database ID.
        required: true
        schema:
          type: string
          example: <DATABASE_ID>
        in: path
  /tablesdb/{databaseId}/failovers:
    post:
      summary: Create failover
      operationId: tablesDBCreateFailover
      tags:
      - tablesDB
      description: Trigger a manual failover for a dedicated database with high availability enabled. Promotes a replica to primary. The failover runs asynchronously; poll the database document for status updates. A database left mid-operation also accepts this call as a repair once nothing is driving the operation it is stuck in. Repairing a failover that did not finish, a `failed` database, a stranded upgrade or migrate, or a stranded compute resize additionally requires `targetReplicaId` to name the member to promote, because the default target may be the member that operation already promoted.
      responses:
        '202':
          description: DedicatedDatabase
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/dedicatedDatabase'
      deprecated: false
      x-appwrite:
        group: failovers
        demo: tablesdb/create-failover.md
        rate-limit: 0
        rate-time: 3600
        rate-key: url:{url},ip:{ip}
        scope: databases.write
        platforms:
        - console
        - server
        packaging: false
        public: true
        auth:
          console:
            Project: []
          server:
            Project: []
            Key: []
      security:
      - Project: []
        Key: []
      parameters:
      - name: databaseId
        description: Database ID.
        required: true
        schema:
          type: string
          example: <DATABASE_ID>
        in: path
      requestBody:
        content:
          application/json:
            schema:
              type: object
              properties:
                targetReplicaId:
                  description: Target replica ID to promote. If not specified, the healthiest replica is selected.
                  type: string
                  example: <TARGET_REPLICA_ID>
                  nullable: true
  /tablesdb/{databaseId}/migrations:
    get:
      summary: List migrations
      operationId: tablesDBListMigrations
      tags:
      - tablesDB
      description: List the dedicated migrations for a TablesDB database. A database has at most one in-flight migration.
      responses:
        '200':
          description: Database Migrations List
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/databaseMigrationList'
      deprecated: false
      x-appwrite:
        group: migrations
        demo: tablesdb/list-migrations.md
        rate-limit: 0
        rate-time: 3600
        rate-key: url:{url},ip:{ip}
        scope: migrations.read
        platforms:
        - console
        - server
        packaging: false
        public: true
        auth:
          console:
            Project: []
          server:
            Project: []
            Key: []
      security:
      - Project: []
        Key: []
      parameters:
      - name: databaseId
        description: Database ID.
        required: true
        schema:
          type: string
          example: <DATABASE_ID>
        in: path
    post:
      summary: Create migration
      operationId: tablesDBCreateMigration
      tags:
      - tablesDB
      description: Start migrating a serverless TablesDB database onto a dedicated MySQL compute. Data is copied to the target while the source stays live, with a brief read-only window during cutover.
      responses:
        '201':
          description: Database Migration
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/databaseMigration'
      deprecated: false
      x-appwrite:
        group: migrations
        demo: tablesdb/create-migration.md
        rate-limit: 0
        rate-time: 3600
        rate-key: url:{url},ip:{ip}
        scope: migrations.write
        platforms:
        - console
        - server
        packaging: false
        public: true
        auth:
          console:
            Project: []
          server:
            Project: []
            Key: []
      security:
      - Project: []
        Key: []
      parameters:
      - name: databaseId
        description: Database ID.
        required: true
        schema:
          type: string
          example: <DATABASE_ID>
        in: path
      requestBody:
        content:
          application/json:
            schema:
              type: object
              properties:
                specification:
                  description: Dedicated compute specification to provision as the migration target (e.g. s-2vcpu-4gb). The migration always targets a dedicated compute, so `serverless` is not accepted.
                  type: string
                  example: s-1vcpu-1gb
                autoCutover:
                  description: Whether to cut over automatically once the copy is verified. When disabled the migration parks at ready_to_cutover and holds there until the cutover is performed manually.
                  type: boolean
                  default: true
                  example: false
              required:
              - specification
  /tablesdb/{databaseId}/migrations/{migrationId}:
    get:
      summary: Get migration
      operationId: tablesDBGetMigration
      tags:
      - tablesDB
      description: Get a single dedicated migration for a TablesDB database by its ID.
      responses:
        '200':
          description: Database Migration
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/databaseMigration'
      deprecated: false
      x-appwrite:
        group: migrations
        demo: tablesdb/get-migration.md
        rate-limit: 0
        rate-time: 3600
        rate-key: url:{url},ip:{ip}
        scope: migrations.read
        platforms:
        - console
        - server
        packaging: false
        public: true
        auth:
          console:
            Project: []
          server:
            Project: []
            Key: []
      security:
      - Project: []
        Key: []
      parameters:
      - name: databaseId
        description: Database ID.
        required: true
        schema:
          type: string
          example: <DATABASE_ID>
        in: path
      - name: migrationId
        description: Migration ID.
        required: true
        schema:
          type: string
          example: <MIGRATION_ID>
        in: path
    delete:
      summary: Delete migration
      operationId: tablesDBDeleteMigration
      tags:
      - tablesDB
      description: Abort an in-flight TablesDB dedicated migration. Only allowed before cutover; once the migration has cut over it cannot be aborted.
      responses:
        '204':
          description: No content
      deprecated: false
      x-appwrite:
        group: migrations
        demo: tablesdb/delete-migration.md
        rate-limit: 0
        rate-time: 3600
        rate-key: url:{url},ip:{ip}
        scope: migrations.write
        platforms:
        - console
        - server
        packaging: false
        public: true
        auth:
          console:
            Project: []
          server:
            Project: []
            Key: []
      security:
      - Project: []
        Key: []
      parameters:
      - name: databaseId
        description: Database ID.
        required: true
        schema:
          type: string
          example: <DATABASE_ID>
        in: path
      - name: migrationId
        description: Migration ID.
        required: true
        schema:
          type: string
          example: <MIGRATION_ID>
        in: path
  /tablesdb/{databaseId}/migrations/{migrationId}/cutovers:
    post:
      summary: Cutover migration
      operationId: tablesDBCreateCutover
      tags:
      - tablesDB
      description: 'Cut a verified TablesDB migration over to its dedicated compute. Only applies to a migration created with `autoCutover` disabled, which waits at `ready_to_cutover` until this is called. The routing flip happens shortly after this returns, with a brief read-only window. One call buys one attempt: a cutover that fails a check returns the migration to `verifying` and parks it again, so call this once more to retry.'
      responses:
        '200':
          description: Database Migration
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/databaseMigration'
      deprecated: false
      x-appwrite:
        group: migrations
        demo: tablesdb/create-cutover.md
        rate-limit: 0
        rate-time: 3600
        rate-key: url:{url},ip:{ip}
        scope: migrations.write
        platforms:
        - console
        - server
        packaging: false
        public: true
        auth:
          console:
            Project: []
          server:
            Project: []
            Key: []
      security:
      - Project: []
        Key: []
      parameters:
      - name: databaseId
        description: Database ID.
        required: true
        schema:
          type: string
          example: <DATABASE_ID>
        in: path
      - name: migrationId
        description: Migration ID.
        required: true
        schema:
          type: string
          example: <MIGRATION_ID>
        in: path
  /tablesdb/{databaseId}/operations:
    get:
      summary: List operations
      operationId: tablesDBListOperations
      tags:
      - tablesDB
      description: List the lifecycle operations recorded for a dedicated database, newest first. Every provision, update, restore, backup and replication action is recorded here with its outcome, including an attempt that was abandoned because another worker took over the database.
      responses:
        '200':
          description: OperationList
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/dedicatedDatabaseOperationList'
      deprecated: false
      x-appwrite:
        group: operations
        demo: tablesdb/list-operations.md
        rate-limit: 0
        rate-time: 3600
        rate-key: url:{url},ip:{ip}
        scope: databases.read
        platforms:
        - console
        - server
        packaging: false
        public: true
        auth:
          console:
            Project: []
          server:
            Project: []
            Key: []
      security:
      - Project: []
        Key: []
      parameters:
      - name: databaseId
        description: Database ID.
        required: true
        schema:
          type: string
          example: <DATABASE_ID>
        in: path
      - name: status
        description: Filter by operation status.
        required: false
        schema:
          type: string
          example: queued
        in: query
      - name: limit
        description: Maximum number of operations to return.
        required: false
        schema:
          type: integer
          format: int32
          example: 1
          default: 25
        in: query
      - name: offset
        description: Number of operations to skip.
        required: false
        schema:
          type: integer
          format: int32
          example: 0
          default: 0
        in: query
  /tablesdb/{databaseId}/replicas:
    get:
      summary: Get replicas
      operationId: tablesDBGetReplicas
      tags:
      - tablesDB
      description: Get high availability status for a dedicated database. Returns replica statuses, replication lag, and sync mode.
      responses:
        '200':
          description: Replicas
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/dedicatedDatabaseReplicas'
      deprecated: false
      x-appwrite:
        group: replicas
        demo: tablesdb/get-replicas.md
        rate-limit: 0
        rate-time: 3600
        rate-key: url:{url},ip:{ip}
        scope: databases.read
        platforms:
        - console
        - se

# --- truncated at 32 KB (301 KB total) ---
# Full source: https://raw.githubusercontent.com/api-evangelist/appwrite/refs/heads/main/openapi/appwrite-tablesdb-api-openapi.yml