wakato-io Tables API

The Tables API from wakato-io — 15 operation(s) for tables.

Operations 29

GET /tables List tables (record types) #
POST /tables Create a table (optionally with initial columns) #
GET /tables/{tableId} Get a table's full definition (meta + columns + views + row count) #
PATCH /tables/{tableId} Update table metadata (labels/icon/description; archived true/false) #
DELETE /tables/{tableId} Archive a table (default) or permanently delete with ?hard=true #
GET /tables/{tableId}/rows List/query rows of a table #
POST /tables/{tableId}/rows Create a row #
POST /tables/{tableId}/rows/bulk Bulk-insert up to 100 rows #
PATCH /tables/{tableId}/rows/bulk Bulk-update up to 100 rows (merge per row) #
POST /tables/{tableId}/rows/bulk-delete Bulk-delete up to 100 rows by id #
PATCH /tables/{tableId}/rows/{rowId} Update a row (merge) #
DELETE /tables/{tableId}/rows/{rowId} Delete a row #
GET /tables/{tableId}/columns List a table's columns (schema) #
POST /tables/{tableId}/columns Add a column (all field types incl. formula/lookup/rollup via field_config) #
PATCH /tables/{tableId}/columns/{columnId} Update a column #
DELETE /tables/{tableId}/columns/{columnId} Delete a column (drops its data from all rows) #
GET /tables/{tableId}/views List a table's views #
POST /tables/{tableId}/views Create a view (grid|kanban|gallery|calendar|dashboard) #
GET /tables/{tableId}/views/{viewId} Get one view (full config) #
PATCH /tables/{tableId}/views/{viewId} Update a view #
DELETE /tables/{tableId}/views/{viewId} Delete a view #
DELETE /tables/{tableId}/share-links/{linkId} Revoke a share link (URL stops working immediately) #
GET /tables/{tableId}/rows/{rowId}/comments List a row's comment thread (oldest first) #
POST /tables/{tableId}/rows/{rowId}/comments Add a comment to a row (posted as the agent) #
GET /tables/{tableId}/snapshots List Time Machine snapshots #
POST /tables/{tableId}/snapshots Capture a named save point (schema + rows + views) #
POST /tables/{tableId}/snapshots/{snapshotId}/restore Restore the table to a snapshot (atomic, reversible) #

Specifications

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/wakato-io:wakato-io-tables-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

wakato-io-tables-api-openapi.yml Raw ↑
openapi: 3.2.0
info:
  title: Wakato Space Tables API
  version: 1.0.0
  description: 'The **Wakato Space API** lets an external agent or tool (Claude Code, Cursor,

    Zapier, a partner integration, your own scripts) operate a single Wakato

    **Space** using a scoped Bearer token (a *Space API key*, `wks_live_…`).


    The **same token** works two ways:

    - **REST** — the endpoints documented here (`/functions/v1/space-api/…`).

    - **MCP** — a Model Context Protocol server at `/functions/v1/space-mcp`

    that exposes the same operations as tools to MCP clients. MCP clients

    self-discover the tools via `tools/list`; see the Quickstart to connect.


    ### Authentication

    Send the key as a Bearer token: `Authorization: Bearer wks_live_…`.

    A key is locked to exactly one Space and cannot read or write any other

    Space, the wallet (beyond read), member permissions, or other users.


    ### Scopes

    Every key grants per-domain scopes with up to three actions:

    - `read` — list / inspect

    - `write` — create / edit

    - `run` — the *consequential* action (publish a page, send an SMS, post

    socially, run an automation). Public/billable actions are deliberately

    split into `run` so you grant them explicitly.


    Each operation below notes its required scope via `x-required-scope`.

    A call without the scope returns `403`.


    ### Safety model

    - Wallet, Finance, Integrations are **read-only**. Money is never moved.

    - Secrets returns **names only** — values are never exposed.

    - Social posts and ad campaigns default to **drafts**; going live requires

    the `run` scope. Connecting new OAuth accounts is never done by a key.'
servers:
- url: https://api.wakato.io/functions/v1/space-api
  description: Production
- url: https://pnwxrleocjbcvrrwrycq.supabase.co/functions/v1/space-api
  description: Development
security:
- bearerAuth: []
tags:
- name: Tables
paths:
  /tables:
    get:
      tags:
      - Tables
      summary: List tables (record types)
      x-required-scope: tables:read
      responses:
        '200':
          $ref: '#/components/responses/Ok'
      description: '**Required scope:** `tables:read`'
      x-codeSamples:
      - lang: bash
        label: cURL
        source: "curl -X GET \"https://api.wakato.io/functions/v1/space-api/tables\" \\\n  -H \"Authorization: Bearer wks_live_YOUR_TOKEN\""
      operationId: getTables
      x-operation-id-source: derived
    post:
      tags:
      - Tables
      summary: Create a table (optionally with initial columns)
      x-required-scope: tables:write
      requestBody:
        required: true
        content:
          application/json:
            schema:
              type: object
              required:
              - name
              properties:
                name:
                  type: string
                  description: Plural label
                  e.g. Invoices: null
                singular_label:
                  type: string
                slug:
                  type: string
                  description: Auto-generated and de-duplicated when omitted
                icon:
                  type: string
                color:
                  type: string
                description:
                  type: string
                title_field_key:
                  type: string
                columns:
                  type: array
                  description: Initial schema — same shape as POST /tables/{tableId}/columns
                  items:
                    type: object
      responses:
        '201':
          $ref: '#/components/responses/Created'
      description: '**Required scope:** `tables:write`'
      x-codeSamples:
      - lang: bash
        label: cURL
        source: "curl -X POST \"https://api.wakato.io/functions/v1/space-api/tables\" \\\n  -H \"Authorization: Bearer wks_live_YOUR_TOKEN\" \\\n  -H \"Content-Type: application/json\" \\\n  -d '{\n  \"name\": \"Launch plan\"\n}'"
      operationId: postTables
      x-operation-id-source: derived
  /tables/{tableId}:
    parameters:
    - in: path
      name: tableId
      required: true
      schema:
        type: string
    get:
      tags:
      - Tables
      summary: Get a table's full definition (meta + columns + views + row count)
      x-required-scope: tables:read
      responses:
        '200':
          $ref: '#/components/responses/Ok'
      description: '**Required scope:** `tables:read`'
      x-codeSamples:
      - lang: bash
        label: cURL
        source: "curl -X GET \"https://api.wakato.io/functions/v1/space-api/tables/b7e4a1c2-9d3f-4e8a-b2c1-5f6d7e8a9b0c\" \\\n  -H \"Authorization: Bearer wks_live_YOUR_TOKEN\""
      operationId: getTablesByTableId
      x-operation-id-source: derived
    patch:
      tags:
      - Tables
      summary: Update table metadata (labels/icon/description; archived true/false)
      x-required-scope: tables:write
      requestBody:
        required: true
        content:
          application/json:
            schema:
              type: object
              properties:
                plural_label:
                  type: string
                singular_label:
                  type: string
                slug:
                  type: string
                icon:
                  type: string
                color:
                  type: string
                description:
                  type: string
                title_field_key:
                  type: string
                archived:
                  type: boolean
      responses:
        '200':
          $ref: '#/components/responses/Ok'
      description: '**Required scope:** `tables:write`'
      x-codeSamples:
      - lang: bash
        label: cURL
        source: "curl -X PATCH \"https://api.wakato.io/functions/v1/space-api/tables/b7e4a1c2-9d3f-4e8a-b2c1-5f6d7e8a9b0c\" \\\n  -H \"Authorization: Bearer wks_live_YOUR_TOKEN\" \\\n  -H \"Content-Type: application/json\" \\\n  -d '{}'"
      operationId: patchTablesByTableId
      x-operation-id-source: derived
    delete:
      tags:
      - Tables
      summary: Archive a table (default) or permanently delete with ?hard=true
      x-required-scope: tables:write
      parameters:
      - in: query
        name: hard
        schema:
          type: boolean
      responses:
        '200':
          $ref: '#/components/responses/Ok'
      description: '**Required scope:** `tables:write`'
      x-codeSamples:
      - lang: bash
        label: cURL
        source: "curl -X DELETE \"https://api.wakato.io/functions/v1/space-api/tables/b7e4a1c2-9d3f-4e8a-b2c1-5f6d7e8a9b0c\" \\\n  -H \"Authorization: Bearer wks_live_YOUR_TOKEN\""
      operationId: deleteTablesByTableId
      x-operation-id-source: derived
  /tables/{tableId}/rows:
    parameters:
    - in: path
      name: tableId
      required: true
      schema:
        type: string
    get:
      tags:
      - Tables
      summary: List/query rows of a table
      x-required-scope: tables:read
      parameters:
      - in: query
        name: limit
        schema:
          type: integer
      - in: query
        name: offset
        schema:
          type: integer
      - in: query
        name: filters
        schema:
          type: string
        description: 'JSON array: [{"column_key","op","value"}] — ops: eq|neq|contains|gt|lt|is_empty|is_not_empty'
      - in: query
        name: sort
        schema:
          type: string
        description: 'JSON array: [{"column_key","direction"}]'
      - in: query
        name: search
        schema:
          type: string
        description: Substring match on the title column
      - in: query
        name: search_column
        schema:
          type: string
      responses:
        '200':
          $ref: '#/components/responses/Ok'
      description: '**Required scope:** `tables:read`'
      x-codeSamples:
      - lang: bash
        label: cURL
        source: "curl -X GET \"https://api.wakato.io/functions/v1/space-api/tables/b7e4a1c2-9d3f-4e8a-b2c1-5f6d7e8a9b0c/rows\" \\\n  -H \"Authorization: Bearer wks_live_YOUR_TOKEN\""
      operationId: getTablesByTableIdRows
      x-operation-id-source: derived
    post:
      tags:
      - Tables
      summary: Create a row
      x-required-scope: tables:write
      requestBody:
        required: true
        content:
          application/json:
            schema:
              type: object
              properties:
                data:
                  type: object
                  description: Map of column key → value
      responses:
        '201':
          $ref: '#/components/responses/Created'
      description: '**Required scope:** `tables:write`'
      x-codeSamples:
      - lang: bash
        label: cURL
        source: "curl -X POST \"https://api.wakato.io/functions/v1/space-api/tables/b7e4a1c2-9d3f-4e8a-b2c1-5f6d7e8a9b0c/rows\" \\\n  -H \"Authorization: Bearer wks_live_YOUR_TOKEN\" \\\n  -H \"Content-Type: application/json\" \\\n  -d '{}'"
      operationId: postTablesByTableIdRows
      x-operation-id-source: derived
  /tables/{tableId}/rows/bulk:
    parameters:
    - in: path
      name: tableId
      required: true
      schema:
        type: string
    post:
      tags:
      - Tables
      summary: Bulk-insert up to 100 rows
      x-required-scope: tables:write
      requestBody:
        required: true
        content:
          application/json:
            schema:
              type: object
              required:
              - rows
              properties:
                rows:
                  type: array
                  items:
                    type: object
                  maxItems: 100
      responses:
        '201':
          $ref: '#/components/responses/Created'
      description: '**Required scope:** `tables:write`'
      x-codeSamples:
      - lang: bash
        label: cURL
        source: "curl -X POST \"https://api.wakato.io/functions/v1/space-api/tables/b7e4a1c2-9d3f-4e8a-b2c1-5f6d7e8a9b0c/rows/bulk\" \\\n  -H \"Authorization: Bearer wks_live_YOUR_TOKEN\" \\\n  -H \"Content-Type: application/json\" \\\n  -d '{\n  \"rows\": []\n}'"
      operationId: postTablesByTableIdRowsBulk
      x-operation-id-source: derived
    patch:
      tags:
      - Tables
      summary: Bulk-update up to 100 rows (merge per row)
      x-required-scope: tables:write
      requestBody:
        required: true
        content:
          application/json:
            schema:
              type: object
              required:
              - updates
              properties:
                updates:
                  type: array
                  maxItems: 100
                  items:
                    type: object
                    required:
                    - row_id
                    - data
                    properties:
                      row_id:
                        type: string
                      data:
                        type: object
      responses:
        '200':
          $ref: '#/components/responses/Ok'
      description: '**Required scope:** `tables:write`'
      x-codeSamples:
      - lang: bash
        label: cURL
        source: "curl -X PATCH \"https://api.wakato.io/functions/v1/space-api/tables/b7e4a1c2-9d3f-4e8a-b2c1-5f6d7e8a9b0c/rows/bulk\" \\\n  -H \"Authorization: Bearer wks_live_YOUR_TOKEN\" \\\n  -H \"Content-Type: application/json\" \\\n  -d '{\n  \"updates\": []\n}'"
      operationId: patchTablesByTableIdRowsBulk
      x-operation-id-source: derived
  /tables/{tableId}/rows/bulk-delete:
    parameters:
    - in: path
      name: tableId
      required: true
      schema:
        type: string
    post:
      tags:
      - Tables
      summary: Bulk-delete up to 100 rows by id
      x-required-scope: tables:write
      requestBody:
        required: true
        content:
          application/json:
            schema:
              type: object
              required:
              - row_ids
              properties:
                row_ids:
                  type: array
                  items:
                    type: string
                  maxItems: 100
      responses:
        '200':
          $ref: '#/components/responses/Ok'
      description: '**Required scope:** `tables:write`'
      x-codeSamples:
      - lang: bash
        label: cURL
        source: "curl -X POST \"https://api.wakato.io/functions/v1/space-api/tables/b7e4a1c2-9d3f-4e8a-b2c1-5f6d7e8a9b0c/rows/bulk-delete\" \\\n  -H \"Authorization: Bearer wks_live_YOUR_TOKEN\" \\\n  -H \"Content-Type: application/json\" \\\n  -d '{\n  \"row_ids\": []\n}'"
      operationId: postTablesByTableIdRowsBulkDelete
      x-operation-id-source: derived
  /tables/{tableId}/rows/{rowId}:
    parameters:
    - in: path
      name: tableId
      required: true
      schema:
        type: string
    - in: path
      name: rowId
      required: true
      schema:
        type: string
    patch:
      tags:
      - Tables
      summary: Update a row (merge)
      x-required-scope: tables:write
      requestBody:
        required: true
        content:
          application/json:
            schema:
              type: object
              properties:
                data:
                  type: object
      responses:
        '200':
          $ref: '#/components/responses/Ok'
      description: '**Required scope:** `tables:write`'
      x-codeSamples:
      - lang: bash
        label: cURL
        source: "curl -X PATCH \"https://api.wakato.io/functions/v1/space-api/tables/b7e4a1c2-9d3f-4e8a-b2c1-5f6d7e8a9b0c/rows/b7e4a1c2-9d3f-4e8a-b2c1-5f6d7e8a9b0c\" \\\n  -H \"Authorization: Bearer wks_live_YOUR_TOKEN\" \\\n  -H \"Content-Type: application/json\" \\\n  -d '{}'"
      operationId: patchTablesByTableIdRowsByRowId
      x-operation-id-source: derived
    delete:
      tags:
      - Tables
      summary: Delete a row
      x-required-scope: tables:write
      responses:
        '200':
          $ref: '#/components/responses/Ok'
      description: '**Required scope:** `tables:write`'
      x-codeSamples:
      - lang: bash
        label: cURL
        source: "curl -X DELETE \"https://api.wakato.io/functions/v1/space-api/tables/b7e4a1c2-9d3f-4e8a-b2c1-5f6d7e8a9b0c/rows/b7e4a1c2-9d3f-4e8a-b2c1-5f6d7e8a9b0c\" \\\n  -H \"Authorization: Bearer wks_live_YOUR_TOKEN\""
      operationId: deleteTablesByTableIdRowsByRowId
      x-operation-id-source: derived
  /tables/{tableId}/columns:
    parameters:
    - in: path
      name: tableId
      required: true
      schema:
        type: string
    get:
      tags:
      - Tables
      summary: List a table's columns (schema)
      x-required-scope: tables:read
      responses:
        '200':
          $ref: '#/components/responses/Ok'
      description: '**Required scope:** `tables:read`'
      x-codeSamples:
      - lang: bash
        label: cURL
        source: "curl -X GET \"https://api.wakato.io/functions/v1/space-api/tables/b7e4a1c2-9d3f-4e8a-b2c1-5f6d7e8a9b0c/columns\" \\\n  -H \"Authorization: Bearer wks_live_YOUR_TOKEN\""
      operationId: getTablesByTableIdColumns
      x-operation-id-source: derived
    post:
      tags:
      - Tables
      summary: Add a column (all field types incl. formula/lookup/rollup via field_config)
      x-required-scope: tables:write
      requestBody:
        required: true
        content:
          application/json:
            schema:
              type: object
              required:
              - key
              - label
              - type
              properties:
                key:
                  type: string
                  description: snake_case
                label:
                  type: string
                type:
                  type: string
                options:
                  type: array
                reference_target:
                  type: object
                field_config:
                  type: object
                required:
                  type: boolean
                default_value: {}
                icon:
                  type: string
      responses:
        '201':
          $ref: '#/components/responses/Created'
      description: '**Required scope:** `tables:write`'
      x-codeSamples:
      - lang: bash
        label: cURL
        source: "curl -X POST \"https://api.wakato.io/functions/v1/space-api/tables/b7e4a1c2-9d3f-4e8a-b2c1-5f6d7e8a9b0c/columns\" \\\n  -H \"Authorization: Bearer wks_live_YOUR_TOKEN\" \\\n  -H \"Content-Type: application/json\" \\\n  -d '{\n  \"key\": \"example\",\n  \"label\": \"example\",\n  \"type\": \"example\"\n}'"
      operationId: postTablesByTableIdColumns
      x-operation-id-source: derived
  /tables/{tableId}/columns/{columnId}:
    parameters:
    - in: path
      name: tableId
      required: true
      schema:
        type: string
    - in: path
      name: columnId
      required: true
      schema:
        type: string
    patch:
      tags:
      - Tables
      summary: Update a column
      x-required-scope: tables:write
      requestBody:
        required: true
        content:
          application/json:
            schema:
              type: object
      responses:
        '200':
          $ref: '#/components/responses/Ok'
      description: '**Required scope:** `tables:write`'
      x-codeSamples:
      - lang: bash
        label: cURL
        source: "curl -X PATCH \"https://api.wakato.io/functions/v1/space-api/tables/b7e4a1c2-9d3f-4e8a-b2c1-5f6d7e8a9b0c/columns/b7e4a1c2-9d3f-4e8a-b2c1-5f6d7e8a9b0c\" \\\n  -H \"Authorization: Bearer wks_live_YOUR_TOKEN\" \\\n  -H \"Content-Type: application/json\" \\\n  -d '{}'"
      operationId: patchTablesByTableIdColumnsByColumnId
      x-operation-id-source: derived
    delete:
      tags:
      - Tables
      summary: Delete a column (drops its data from all rows)
      x-required-scope: tables:write
      responses:
        '200':
          $ref: '#/components/responses/Ok'
      description: '**Required scope:** `tables:write`'
      x-codeSamples:
      - lang: bash
        label: cURL
        source: "curl -X DELETE \"https://api.wakato.io/functions/v1/space-api/tables/b7e4a1c2-9d3f-4e8a-b2c1-5f6d7e8a9b0c/columns/b7e4a1c2-9d3f-4e8a-b2c1-5f6d7e8a9b0c\" \\\n  -H \"Authorization: Bearer wks_live_YOUR_TOKEN\""
      operationId: deleteTablesByTableIdColumnsByColumnId
      x-operation-id-source: derived
  /tables/{tableId}/views:
    parameters:
    - in: path
      name: tableId
      required: true
      schema:
        type: string
    get:
      tags:
      - Tables
      summary: List a table's views
      x-required-scope: tables:read
      responses:
        '200':
          $ref: '#/components/responses/Ok'
      description: '**Required scope:** `tables:read`'
      x-codeSamples:
      - lang: bash
        label: cURL
        source: "curl -X GET \"https://api.wakato.io/functions/v1/space-api/tables/b7e4a1c2-9d3f-4e8a-b2c1-5f6d7e8a9b0c/views\" \\\n  -H \"Authorization: Bearer wks_live_YOUR_TOKEN\""
      operationId: getTablesByTableIdViews
      x-operation-id-source: derived
    post:
      tags:
      - Tables
      summary: Create a view (grid|kanban|gallery|calendar|dashboard)
      x-required-scope: tables:write
      requestBody:
        required: true
        content:
          application/json:
            schema:
              type: object
              required:
              - name
              properties:
                name:
                  type: string
                type:
                  type: string
                  enum:
                  - grid
                  - kanban
                  - gallery
                  - calendar
                  - dashboard
                config:
                  type: object
                is_default:
                  type: boolean
      responses:
        '201':
          $ref: '#/components/responses/Created'
      description: '**Required scope:** `tables:write`'
      x-codeSamples:
      - lang: bash
        label: cURL
        source: "curl -X POST \"https://api.wakato.io/functions/v1/space-api/tables/b7e4a1c2-9d3f-4e8a-b2c1-5f6d7e8a9b0c/views\" \\\n  -H \"Authorization: Bearer wks_live_YOUR_TOKEN\" \\\n  -H \"Content-Type: application/json\" \\\n  -d '{\n  \"name\": \"Launch plan\"\n}'"
      operationId: postTablesByTableIdViews
      x-operation-id-source: derived
  /tables/{tableId}/views/{viewId}:
    parameters:
    - in: path
      name: tableId
      required: true
      schema:
        type: string
    - in: path
      name: viewId
      required: true
      schema:
        type: string
    get:
      tags:
      - Tables
      summary: Get one view (full config)
      x-required-scope: tables:read
      responses:
        '200':
          $ref: '#/components/responses/Ok'
      description: '**Required scope:** `tables:read`'
      x-codeSamples:
      - lang: bash
        label: cURL
        source: "curl -X GET \"https://api.wakato.io/functions/v1/space-api/tables/b7e4a1c2-9d3f-4e8a-b2c1-5f6d7e8a9b0c/views/b7e4a1c2-9d3f-4e8a-b2c1-5f6d7e8a9b0c\" \\\n  -H \"Authorization: Bearer wks_live_YOUR_TOKEN\""
      operationId: getTablesByTableIdViewsByViewId
      x-operation-id-source: derived
    patch:
      tags:
      - Tables
      summary: Update a view
      x-required-scope: tables:write
      requestBody:
        required: true
        content:
          application/json:
            schema:
              type: object
      responses:
        '200':
          $ref: '#/components/responses/Ok'
      description: '**Required scope:** `tables:write`'
      x-codeSamples:
      - lang: bash
        label: cURL
        source: "curl -X PATCH \"https://api.wakato.io/functions/v1/space-api/tables/b7e4a1c2-9d3f-4e8a-b2c1-5f6d7e8a9b0c/views/b7e4a1c2-9d3f-4e8a-b2c1-5f6d7e8a9b0c\" \\\n  -H \"Authorization: Bearer wks_live_YOUR_TOKEN\" \\\n  -H \"Content-Type: application/json\" \\\n  -d '{}'"
      operationId: patchTablesByTableIdViewsByViewId
      x-operation-id-source: derived
    delete:
      tags:
      - Tables
      summary: Delete a view
      x-required-scope: tables:write
      responses:
        '200':
          $ref: '#/components/responses/Ok'
      description: '**Required scope:** `tables:write`'
      x-codeSamples:
      - lang: bash
        label: cURL
        source: "curl -X DELETE \"https://api.wakato.io/functions/v1/space-api/tables/b7e4a1c2-9d3f-4e8a-b2c1-5f6d7e8a9b0c/views/b7e4a1c2-9d3f-4e8a-b2c1-5f6d7e8a9b0c\" \\\n  -H \"Authorization: Bearer wks_live_YOUR_TOKEN\""
      operationId: deleteTablesByTableIdViewsByViewId
      x-operation-id-source: derived
  /tables/{tableId}/share-links:
    parameters:
    - in: path
      name: tableId
      required: true
      schema:
        type: string
    get:
      tags:
      - Tables
      summary: List public view-only share links
      x-required-scope: tables:read
      responses:
        '200':
          $ref: '#/components/responses/Ok'
      description: '**Required scope:** `tables:read`'
      x-codeSamples:
      - lang: bash
        label: cURL
        source: "curl -X GET \"https://api.wakato.io/functions/v1/space-api/tables/b7e4a1c2-9d3f-4e8a-b2c1-5f6d7e8a9b0c/share-links\" \\\n  -H \"Authorization: Bearer wks_live_YOUR_TOKEN\""
      operationId: getTablesByTableIdShareLinks
      x-operation-id-source: derived
    post:
      tags:
      - Tables
      summary: Create a public view-only share link (returns the URL)
      x-required-scope: tables:write
      requestBody:
        content:
          application/json:
            schema:
              type: object
              properties:
                view_id:
                  type: string
                  description: Share this view; defaults to the table's default view
                name:
                  type: string
      responses:
        '201':
          $ref: '#/components/responses/Created'
      description: '**Required scope:** `tables:write`'
      x-codeSamples:
      - lang: bash
        label: cURL
        source: "curl -X POST \"https://api.wakato.io/functions/v1/space-api/tables/b7e4a1c2-9d3f-4e8a-b2c1-5f6d7e8a9b0c/share-links\" \\\n  -H \"Authorization: Bearer wks_live_YOUR_TOKEN\" \\\n  -H \"Content-Type: application/json\" \\\n  -d '{}'"
      operationId: postTablesByTableIdShareLinks
      x-operation-id-source: derived
  /tables/{tableId}/share-links/{linkId}:
    parameters:
    - in: path
      name: tableId
      required: true
      schema:
        type: string
    - in: path
      name: linkId
      required: true
      schema:
        type: string
    delete:
      tags:
      - Tables
      summary: Revoke a share link (URL stops working immediately)
      x-required-scope: tables:write
      responses:
        '200':
          $ref: '#/components/responses/Ok'
      description: '**Required scope:** `tables:write`'
      x-codeSamples:
      - lang: bash
        label: cURL
        source: "curl -X DELETE \"https://api.wakato.io/functions/v1/space-api/tables/b7e4a1c2-9d3f-4e8a-b2c1-5f6d7e8a9b0c/share-links/b7e4a1c2-9d3f-4e8a-b2c1-5f6d7e8a9b0c\" \\\n  -H \"Authorization: Bearer wks_live_YOUR_TOKEN\""
      operationId: deleteTablesByTableIdShareLinksByLinkId
      x-operation-id-source: derived
  /tables/{tableId}/rows/{rowId}/comments:
    parameters:
    - in: path
      name: tableId
      required: true
      schema:
        type: string
    - in: path
      name: rowId
      required: true
      schema:
        type: string
    get:
      tags:
      - Tables
      summary: List a row's comment thread (oldest first)
      x-required-scope: tables:read
      parameters:
      - in: query
        name: limit
        schema:
          type: integer
      responses:
        '200':
          $ref: '#/components/responses/Ok'
      description: '**Required scope:** `tables:read`'
      x-codeSamples:
      - lang: bash
        label: cURL
        source: "curl -X GET \"https://api.wakato.io/functions/v1/space-api/tables/b7e4a1c2-9d3f-4e8a-b2c1-5f6d7e8a9b0c/rows/b7e4a1c2-9d3f-4e8a-b2c1-5f6d7e8a9b0c/comments\" \\\n  -H \"Authorization: Bearer wks_live_YOUR_TOKEN\""
      operationId: getTablesByTableIdRowsByRowIdComments
      x-operation-id-source: derived
    post:
      tags:
      - Tables
      summary: Add a comment to a row (posted as the agent)
      x-required-scope: tables:write
      requestBody:
        required: true
        content:
          application/json:
            schema:
              type: object
              required:
              - body
              properties:
                body:
                  type: string
                  maxLength: 4000
      responses:
        '201':
          $ref: '#/components/responses/Created'
      description: '**Required scope:** `tables:write`'
      x-codeSamples:
      - lang: bash
        label: cURL
        source: "curl -X POST \"https://api.wakato.io/functions/v1/space-api/tables/b7e4a1c2-9d3f-4e8a-b2c1-5f6d7e8a9b0c/rows/b7e4a1c2-9d3f-4e8a-b2c1-5f6d7e8a9b0c/comments\" \\\n  -H \"Authorization: Bearer wks_live_YOUR_TOKEN\" \\\n  -H \"Content-Type: application/json\" \\\n  -d '{\n  \"body\": \"example\"\n}'"
      operationId: postTablesByTableIdRowsByRowIdComments
      x-operation-id-source: derived
  /tables/{tableId}/snapshots:
    parameters:
    - in: path
      name: tableId
      required: true
      schema:
        type: string
    get:
      tags:
      - Tables
      summary: List Time Machine snapshots
      x-required-scope: tables:read
      parameters:
      - in: query
        name: limit
        schema:
          type: integer
      responses:
        '200':
          $ref: '#/components/responses/Ok'
      description: '**Required scope:** `tables:read`'
      x-codeSamples:
      - lang: bash
        label: cURL
        source: "curl -X GET \"https://api.wakato.io/functions/v1/space-api/tables/b7e4a1c2-9d3f-4e8a-b2c1-5f6d7e8a9b0c/snapshots\" \\\n  -H \"Authorization: Bearer wks_live_YOUR_TOKEN\""
      operationId: getTablesByTableIdSnapshots
      x-operation-id-source: derived
    post:
      tags:
      - Tables
      summary: Capture a named save point (schema + rows + views)
      x-required-scope: tables:write
      requestBody:
        content:
          application/json:
            schema:
              type: object
              properties:
                label:
                  type: string
      responses:
        '201':
          $ref: '#/components/responses/Created'
      description: '**Required scope:** `tables:write`'
      x-codeSamples:
      - lang: bash
        label: cURL
        source: "curl -X POST \"https://api.wakato.io/functions/v1/space-api/tables/b7e4a1c2-9d3f-4e8a-b2c1-5f6d7e8a9b0c/snapshots\" \\\n  -H \"Authorization: Bearer wks_live_YOUR_TOKEN\" \\\n  -H \"Content-Type: application/json\" \\\n  -d '{}'"
      operationId: postTablesByTableIdSnapshots
      x-operation-id-source: derived
  /tables/{tableId}/snapshots/{snapshotId}/restore:
    parameters:
    - in: path
      name: tableId
      required: true
      schema:
        type: string
    - in: path
      name: snapshotId
      required: true
      schema:
        type: string
    post:
      tags:
      - Tables
      summary: Restore the table to a snapshot (atomic, reversible)
      x-required-scope: tables:write
      responses:
        '200':
          $ref: '#/components/responses/Ok'
      description: '**Required scope:** `tables:write`'
      x-codeSamples:
      - lang: bash
        label: cURL
        source: "curl -X POST \"https://api.wakato.io/functions/v1/space-api/tables/b7e4a1c2-9d3f-4e8a-b2c1-5f6d7e8a9b0c/snapshots/b7e4a1c2-9d3f-4e8a-b2c1-5f6d7e8a9b0c/restore\" \\\n  -H \"Authorization: Bearer wks_live_YOUR_TOKEN\""
      operationId: postTablesByTableIdSnapshotsBySnapshotIdRestore
      x-operation-id-source: derived
components:
  responses:
    Ok:
      description: Success
      content:
        application/json:
          schema:
            type: object
    Created:
      description: Created
      content:
        application/json:
          schema:
            type: object
  securitySchemes:
    bearerAuth:
      type: http
      scheme: bearer
      description: A Space API key, e.g. `wks_live_…`.