> ## Documentation Index
> Fetch the complete documentation index at: https://docs.getoneprofile.ai/llms.txt
> Use this file to discover all available pages before exploring further.

# Start a table run

> Start a run, priced first by the preview with the same body. `kind` says what it covers: `column` runs one computed column over a scope (all, errored, unfilled, first N, or chosen cells); `columns` runs several columns over chosen rows as one run in dependency order, which is what a swept selection becomes; `rows` runs chosen rows, or every row the view matches, across every computed column; `failed_cells` runs only the cells that failed, column by column. The run is refused before any work starts when the balance cannot cover its price. A run row is created after the request commits, so `runs` is often empty at first; the active runs feed picks each run up.



## OpenAPI

````yaml /openapi.json post /tables/{table_id}/runs/
openapi: 3.1.0
info:
  contact:
    email: support@getoneprofile.ai
    name: Oneprofile Support
  description: >-
    REST API reference for Oneprofile, the GTM data layer for your CRM. Manage
    tables, enrichments, and integrations. Authenticate with an API key to get
    started.
  termsOfService: https://www.getoneprofile.ai/terms
  title: API Reference | Oneprofile
  version: '0.0'
servers:
  - url: https://api.getoneprofile.ai
security: []
tags:
  - description: >-
      The docked AI Assistant: its general chat about the workspace and the
      product, streamed as Server-Sent Events, and the one list of a person's
      threads across every assistant, with pin, rename, delete and the
      search-to-table link.
    name: assistant
  - description: >-
      The messages a person keeps to send the assistant again: the ones the
      workspace saved and the ones that ship with the product, with save,
      rename, edit and delete.
    name: assistant-prompt
  - description: >-
      Granted workspace actions: what the AI Assistant proposed or applied in a
      conversation, the approve and dismiss decisions on each card, the
      workspace's spend threshold and default grants, and the eight verbs.
    name: workspace-actions
  - description: >-
      The Getting started checklist: a workspace's progress through the six
      steps from its first people search to its first launched sequence.
    name: onboarding
  - description: Senders, connected mailboxes, tags, and the Google connect flow.
    name: senders
  - description: The workspace do-not-contact list, enforced before every send.
    name: suppression
  - description: >-
      The workspace's recontact rule: how long before anyone hears from us
      again.
    name: contact_cooldown
  - description: 'Sequence authoring: the graph, the table-backed audience, previews.'
    name: sequences
  - description: >-
      The outbound agent behind a sequence: the voice it writes in, its
      per-message prompts, what it wrote and what people told it.
    name: outbound-agents
  - description: >-
      The LinkedIn channel: connecting an account to a sender, its safety limits
      and history, and the protocol the browser extension speaks.
    name: linkedin
  - description: >-
      The approval queue: everything waiting on a person across every sender and
      channel, and the workspace's manual or automatic modes per channel.
    name: outreach
  - description: 'The unified outreach inbox: threads, replies, labels, events.'
    name: inbox
  - description: 'The AI reply layer: workspace settings, drafts, and approval.'
    name: inbox-ai
  - description: Notification rules, per-user preferences, and the Slack connection.
    name: notifications
  - description: Endpoints for seeing all available integration types.
    name: integration-types
  - description: Endpoints for creating and managing integrations.
    name: integrations
  - description: Endpoints for the generic OAuth install/claim app-listings engine.
    name: app-listings
  - description: Endpoints for creating and managing API keys.
    name: apikey
  - description: >-
      AI apps connected to the workspace: Claude, ChatGPT, Claude Code or any
      other MCP client a person signed in to Oneprofile's MCP server with.
    name: ai_apps
  - description: Endpoints for managing billing and subscription information.
    name: billing
  - description: Endpoints for creating and managing tables.
    name: tables
  - description: Endpoints for table columns, formula previews, and on-demand column runs.
    name: table-columns
  - description: Endpoints for table rows and manual cell edits.
    name: table-rows
  - description: Endpoints for observing and cancelling table recompute runs.
    name: table-runs
  - description: >-
      Endpoints for org-shared per-column display preferences: hidden, pinned,
      width, and colour tint.
    name: table-ui-prefs
  - description: >-
      Endpoints for the org-shared names given to the column tint palette: what
      this organisation calls each colour. Org-level, not per-table.
    name: table-column-color-labels
  - description: >-
      Endpoints for the enrichment action catalog, model list, presets, draft
      generation, and saved agents.
    name: table-enrichments
  - description: >-
      Endpoints for an agent's Preview: example rows run one at a time, and a
      Looks good on each. Needs work lives under agent-learnings.
    name: agent-training
  - description: >-
      An agent's learnings, the one-line rules it follows on every output, and
      the thumbs down that teaches them: give one with what was wrong, list the
      ones on a subject, Undo one, and price the redo it would run.
    name: agent-learnings
  - description: >-
      The durable audit trail of a table's enrichment actions: configured,
      edited, run, cancelled, and settled cost.
    name: table-enrichment-audit-logs
  - description: Endpoints for saving and applying column templates.
    name: table-templates
  - description: Server-sent change feed for a table's grid.
    name: table-events
  - description: 'Endpoints for org-shared saved table views: sort, filters, hidden columns.'
    name: table-views
  - description: >-
      Endpoints for PER-USER table preferences: favourites and recently opened.
      Unlike the rest of the table surface these are personal, so two members of
      one organisation legitimately see different answers.
    name: table-user-prefs
  - description: >-
      Endpoints for building a table from an uploaded CSV: upload and preview
      the inferred columns, commit the reviewed mapping, then poll the row load.
    name: table-imports
  - description: Endpoint for downloading a table's rows as CSV.
    name: table-export
  - description: >-
      Endpoints for the integration a table imports from: attach and preview it,
      promote imported fields into columns, and run the import on demand.
    name: table-sources
  - description: >-
      Endpoints for a table's recurring import cadence: set it, pause it, and
      read the next fire times.
    name: table-schedules
  - description: >-
      Endpoints for pushing a table's rows out to a connected integration: list
      writable destinations, derive their write capabilities, and map export
      columns.
    name: table-writeback
  - description: >-
      Endpoints backing a lookup column's setup: the connections whose records a
      column could read, and the identity fields one record type can be looked
      up by.
    name: table-integration-lookup
  - description: >-
      Endpoints for sourcing leads from the lead database: count and preview
      matches, land them in a table, and keep saved searches. Alongside people
      and company searches, leads can be sourced from buying signals (what a
      company or person just did), with a catalogue endpoint behind the picker
      that builds them.
    name: find-leads
  - description: >-
      Endpoints for discovering a domain's subdomains from public certificate
      logs and landing the results in a table.
    name: find-subdomains
  - description: Endpoints for the credit balance meter and usage reporting.
    name: credits
  - description: >-
      Endpoints for the workspace referral program: the shareable link, the
      friends who joined through it, and claiming a code after signup.
    name: referral
  - description: >-
      Endpoints for the affiliate program's own dashboard: enrolling and
      claiming a code, the summary, stats and activity feed, the commission
      ledger, and identity verification and payouts.
    name: affiliate
  - description: >-
      Endpoints for recording where a new workspace came from: the marketing
      page or campaign its signup link carried, sent once after signup.
    name: attribution
  - description: >-
      Endpoints for the design partner program's customer surface: whether this
      workspace is a design partner, the badges its feedback has earned, and
      sending and reading that feedback.
    name: design-partner
  - description: >-
      Endpoints for the org-level AI business context (company description,
      ideal customer profile, buyer personas, interest signals and social
      proof), plus domain-based generation and the reference documents whose
      summaries ride alongside those fields.
    name: ai-context
  - description: >-
      Endpoints for the signed-in user's Google Drive connection: starting and
      finishing the OAuth grant, checking or dropping it, and minting the
      short-lived token the Google Picker needs.
    name: google-drive
paths:
  /tables/{table_id}/runs/:
    post:
      tags:
        - table-runs
      summary: Start a table run
      description: >-
        Start a run, priced first by the preview with the same body. `kind` says
        what it covers: `column` runs one computed column over a scope (all,
        errored, unfilled, first N, or chosen cells); `columns` runs several
        columns over chosen rows as one run in dependency order, which is what a
        swept selection becomes; `rows` runs chosen rows, or every row the view
        matches, across every computed column; `failed_cells` runs only the
        cells that failed, column by column. The run is refused before any work
        starts when the balance cannot cover its price. A run row is created
        after the request commits, so `runs` is often empty at first; the active
        runs feed picks each run up.
      operationId: create_table_run
      parameters:
        - in: path
          name: table_id
          required: true
          schema:
            format: uuid
            title: Table Id
            type: string
      requestBody:
        content:
          application/json:
            schema:
              $ref: '#/components/schemas/TableRunCreateSchema'
        required: true
      responses:
        '201':
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/TableRunsCreatedSchema'
          description: Successful Response
        '401':
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/UnauthorizedResponse'
          description: Unauthorized
        '403':
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/ForbiddenResponse'
          description: Forbidden
        '404':
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/NotFoundResponse'
          description: Table or column not found
        '422':
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/UnprocessableEntityResponse'
          description: Invalid request made to the API.
        '500':
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/ServerErrorResponse'
          description: Internal server error.
        '502':
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/ServerErrorResponse'
          description: Bad gateway error.
        '503':
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/ServerErrorResponse'
          description: Service unavailable.
      security:
        - APIKeyHeader: []
        - HTTPBearer: []
components:
  schemas:
    TableRunCreateSchema:
      description: >-
        What to run: a column, several columns over rows, rows, or every failed
        cell.


        One body for the run and its preview, so the price quoted is the price
        of

        the run asked for. ``kind`` says which of the fields apply.
      properties:
        all:
          default: false
          description: >-
            kind=rows: run every row the view matches (`where`, `row_status`)
            instead of `record_ids`. At most `view_scope_max_rows` rows may
            match; a wider view is refused with `scope_too_large`.
          title: All
          type: boolean
        column_id:
          anyOf:
            - format: uuid
              type: string
            - type: 'null'
          description: 'kind=column: the column to run.'
          title: Column Id
        column_ids:
          anyOf:
            - items:
                format: uuid
                type: string
              maxItems: 100
              minItems: 1
              type: array
            - type: 'null'
          description: >-
            kind=columns: the computed columns to run, in any order. A column
            another one here feeds is planned once, after its input, so no
            column reads a value a sibling is still computing.
          title: Column Ids
        kind:
          $ref: '#/components/schemas/TableRunKind'
          description: >-
            What the run covers. `column`: one computed column (`column_id`)
            over a `scope`. `columns`: several columns (`column_ids`) over
            chosen rows (`record_ids`), as one run in dependency order, which is
            what a swept selection in the grid becomes. `rows`: chosen rows
            (`record_ids`), or every row the view matches (`all`), across every
            computed column. `failed_cells`: only the cells that failed, in
            every computed column; it takes no other field.
        limit:
          anyOf:
            - maximum: 10000
              minimum: 1
              type: integer
            - type: 'null'
          description: 'kind=column, scope=first_n: how many rows (default 10).'
          title: Limit
        offset:
          anyOf:
            - maximum: 1000000
              minimum: 0
              type: integer
            - type: 'null'
          description: >-
            kind=column, scope=first_n: the row to start from, in display order;
            omit to start at the first row.
          title: Offset
        record_id:
          anyOf:
            - format: uuid
              type: string
            - type: 'null'
          description: 'kind=column, scope=cell: the target row; see also record_ids.'
          title: Record Id
        record_ids:
          anyOf:
            - items:
                format: uuid
                type: string
              maxItems: 1000
              type: array
            - type: 'null'
          description: >-
            The target rows. kind=column with scope=cell (wins over record_id);
            kind=columns, shared by every column named; kind=rows, the rows to
            run instead of `all`. Duplicates are dropped and the order is kept.
          title: Record Ids
        row_status:
          anyOf:
            - $ref: '#/components/schemas/TableRowStatus'
            - type: 'null'
          description: >-
            The grid's active smart view (errored or fully computed rows), ANDed
            with `where`. kind=column, or kind=rows with `all`.
        scope:
          $ref: '#/components/schemas/TableRunScope'
          default: all
          description: >-
            kind=column: all | errored | unfilled | first_n | cell. all, errored
            and first_n share the column's own run: a broader run replaces a
            narrower one still going, and cells already computed under the same
            definition are skipped. cell runs are independent of each other.
        sorts:
          anyOf:
            - items:
                $ref: '#/components/schemas/TableRowSortSchema'
              maxItems: 8
              type: array
            - type: 'null'
          description: >-
            kind=column: the grid's active sort, so `first_n` means the first N
            rows the person can SEE rather than the first N in stored order.
            Ignored by every other scope.
          title: Sorts
        where:
          anyOf:
            - $ref: '#/components/schemas/TableRowsWhereSchema-Input'
            - type: 'null'
          description: >-
            The grid's active filter, in the rows query's own vocabulary.
            kind=column: narrows every scope but `cell` to the matching rows
            (`all` runs every matching row, `errored` / `unfilled` keep only
            matching rows, `first_n` counts within them). kind=rows with `all`:
            the rows to run.
      required:
        - kind
      title: TableRunCreateSchema
      type: object
    TableRunsCreatedSchema:
      description: >-
        The runs a run request asked for.


        A run row is minted after the request commits, so ``runs`` is usually

        empty at the moment of asking; ``request_ids`` is known at once, and
        each

        run carries its request's id as its origin.
      properties:
        request_ids:
          description: >-
            One id per run asked for: one for a column, columns or rows run, and
            one per computed column for a failed_cells run.
          items:
            format: uuid
            type: string
          title: Request Ids
          type: array
        runs:
          description: >-
            The runs already minted, in the order asked. A run whose start is
            still queued is absent; the active-runs feed picks it up.
          items:
            $ref: '#/components/schemas/TableRunReadSchema'
          title: Runs
          type: array
      required:
        - request_ids
        - runs
      title: TableRunsCreatedSchema
      type: object
    UnauthorizedResponse:
      properties:
        detail:
          description: The detail of why the request is unauthorized.
          title: Detail
          type: string
      required:
        - detail
      title: UnauthorizedResponse
      type: object
    ForbiddenResponse:
      properties:
        detail:
          description: The detail of why the request is forbidden.
          title: Detail
          type: string
      required:
        - detail
      title: ForbiddenResponse
      type: object
    NotFoundResponse:
      properties:
        detail:
          description: The detail of why the resource was not found.
          title: Detail
          type: string
      required:
        - detail
      title: NotFoundResponse
      type: object
    UnprocessableEntityResponse:
      properties:
        detail:
          description: >-
            The detail of the error. This is the error message to show to the
            user. You should also use the issues field to show more detailed
            error messages per field. Use this field for a single liner error
            message.
          title: Detail
          type: string
        issues:
          description: >-
            The issues that caused the error. There can be multiple issues. Each
            issue is a user-facing error message.
          items:
            $ref: '#/components/schemas/UnprocessableEntityIssue'
          title: Issues
          type: array
      required:
        - detail
        - issues
      title: UnprocessableEntityResponse
      type: object
    ServerErrorResponse:
      properties:
        detail:
          description: The detail of why the server returned an error.
          title: Detail
          type: string
      required:
        - detail
      title: ServerErrorResponse
      type: object
    TableRunKind:
      description: What a run request covers.
      enum:
        - column
        - columns
        - rows
        - failed_cells
      title: TableRunKind
      type: string
    TableRowStatus:
      description: >-
        A row-level state, derived from its cells rather than stored.


        ``ERRORED`` is "any cell of this row failed to compute";
        ``FULLY_COMPUTED``

        is its exact complement, so the two partition the table. Serves the
        built-in

        smart views, which are questions about computation rather than about
        values.

        The ordinary filter vocabulary cannot express either.
      enum:
        - errored
        - fully_computed
      title: TableRowStatus
      type: string
    TableRunScope:
      description: |-
        Row scope for an on-demand ``COLUMN_MANUAL`` run.

        ``CELL`` (a single row, origin-keyed so independent cell re-runs never
        terminate each other) rides the same enum as the column-lineage scopes.
        ``UNFILLED`` is "empty or out-of-date": errored, stale, valueless and
        never-computed cells, minus fresh deliberate skips, which would only
        skip again.
      enum:
        - all
        - errored
        - unfilled
        - first_n
        - cell
      title: TableRunScope
      type: string
    TableRowSortSchema:
      description: The column a rows query is ordered by, and which way.
      properties:
        column_id:
          anyOf:
            - format: uuid
              type: string
            - $ref: '#/components/schemas/TableRowSystemSortKey'
          description: >-
            A column ID, or `__created_at__` / `__updated_at__` to order by when
            the row was added or last edited.
          title: Column Id
        direction:
          $ref: '#/components/schemas/TableSortDirection'
          default: asc
          description: Ascending or descending.
      required:
        - column_id
      title: TableRowSortSchema
      type: object
    TableRowsWhereSchema-Input:
      description: >-
        The whole predicate for a rows query.


        ``items`` mixes conditions with groups under one joiner, so ``A and (B
        or C)``

        is an AND over ``[A, group(OR, [B, C])]``. Send no ``where`` at all
        rather

        than an empty one, so "no filter" stays a single state.


        The cap is on LEAVES, not on items: eight conditions cost eight
        correlated

        EXISTS clauses whether they are grouped or not, and it is the clause
        count

        that the query planner pays for.
      properties:
        items:
          description: Conditions and groups.
          items:
            $ref: '#/components/schemas/TableRowWhereItemSchema-Input'
          maxItems: 8
          minItems: 1
          title: Items
          type: array
        joiner:
          $ref: '#/components/schemas/TableFilterJoiner'
          default: and
          description: How the top-level items combine.
      required:
        - items
      title: TableRowsWhereSchema
      type: object
    TableRunReadSchema:
      description: A table recompute run with its static denominator and monotone counters.
      properties:
        cells_awaiting:
          description: >-
            Cells the run held because an input they read has not been computed
            yet. Not a final state: a later run fills them. Counted within
            cells_done.
          title: Cells Awaiting
          type: integer
        cells_done:
          description: >-
            Cells processed so far; clamped to cells_total so the banner can
            never overshoot.
          title: Cells Done
          type: integer
        cells_failed:
          description: Cells whose formula evaluation failed.
          title: Cells Failed
          type: integer
        cells_no_data:
          description: >-
            Cells that ran clean but found nothing. Never retried, and excluded
            from errored views. Free for a lookup; an AI column's cell is
            charged what it used. Counted within cells_done.
          title: Cells No Data
          type: integer
        cells_skipped:
          description: >-
            Cells the run deliberately skipped: a missing required input or a
            false run condition. Counted within cells_done.
          title: Cells Skipped
          type: integer
        cells_total:
          description: Exact static denominator, fixed when the run plan is minted.
          title: Cells Total
          type: integer
        column_id:
          anyOf:
            - format: uuid
              type: string
            - type: 'null'
          description: >-
            The column a column-lineage run recomputes, parsed from its workflow
            identity; null for whole-table runs. Narrows the grid's busy paint
            to one column; `row_scope` is what narrows it to the rows within
            that column.
          title: Column Id
        column_ids:
          anyOf:
            - items:
                format: uuid
                type: string
              type: array
            - type: 'null'
          description: >-
            Every column this run's plan covers, in dependency (layer) order,
            not the order they were requested in. Null on runs minted before the
            plan was published, where column_id is all there is. This is what
            narrows the grid's busy paint when one run covers several columns,
            which column_id cannot express.
          title: Column Ids
        completed_at:
          anyOf:
            - format: date-time
              type: string
            - type: 'null'
          title: Completed At
        created_at:
          format: date-time
          title: Created At
          type: string
        credits_charged:
          default: 0
          description: >-
            Credits charged so far. Grows while the run works, as its finished
            cells are settled every few seconds; final once the run ends.
          title: Credits Charged
          type: number
        error:
          anyOf:
            - type: string
            - type: 'null'
          description: Failure description when the run status is failed.
          title: Error
        export_retry_attempt:
          default: 0
          description: >-
            How many automatic export retries preceded this run. 0 is a run a
            person or a schedule asked for; higher values mark the follow-ups
            queued for rows whose push failed for a retryable reason, so a run
            history can tell 'we tried again' from 'you ran it again'.
          title: Export Retry Attempt
          type: integer
        id:
          format: uuid
          title: Id
          type: string
        row_scope:
          $ref: '#/components/schemas/TableRunRowScopeReadSchema'
          description: >-
            The rows this run resolved to at mint. Present on every read so a
            resync cannot lose it and silently fall back to painting the whole
            column busy.
        started_at:
          anyOf:
            - format: date-time
              type: string
            - type: 'null'
          title: Started At
        status:
          $ref: '#/components/schemas/TableRunStatus'
          description: The run's lifecycle status.
        table_id:
          format: uuid
          title: Table Id
          type: string
        trigger:
          $ref: '#/components/schemas/TableRunTrigger'
          description: What kind of mutation requested the run.
      required:
        - id
        - table_id
        - trigger
        - status
        - cells_total
        - cells_done
        - cells_failed
        - cells_skipped
        - cells_no_data
        - cells_awaiting
        - error
        - created_at
        - started_at
        - completed_at
        - row_scope
      title: TableRunReadSchema
      type: object
    UnprocessableEntityIssue:
      properties:
        input:
          anyOf:
            - type: string
            - type: integer
            - type: number
            - type: boolean
            - items: {}
              type: array
            - additionalProperties: true
              type: object
          description: The user's input that caused the error.
          title: Input
        loc:
          description: >-
            The location of the error. Always contains 1 or 2 elements. The
            first element is the type of location (e.g. 'body', 'query', 'path',
            'header'). The second element is the name of the field that caused
            the error. If the error is not related to a specific field, the
            second element is not present.
          items:
            type: string
          title: Loc
          type: array
        msg:
          description: The message of the error. The error message to show to the user.
          title: Msg
          type: string
        type:
          description: >-
            The type of the error. Useful for frontend code to handle different
            types of errors.
          title: Type
          type: string
      required:
        - loc
        - msg
        - type
        - input
      title: UnprocessableEntityIssue
      type: object
    TableRowSystemSortKey:
      description: >-
        The sort keys that order by the ROW rather than by one column's cells.


        ``CREATED_AT`` is when the row was added; ``UPDATED_AT`` is when any of
        its

        cells last changed (the row was added, for one with no cells). They
        share

        the sort slot with column IDs, so a query or a saved view names either
        the

        same way; the dunder spelling keeps them apart from any UUID.
      enum:
        - __created_at__
        - __updated_at__
      title: TableRowSystemSortKey
      type: string
    TableSortDirection:
      description: Which way a sorted row listing runs.
      enum:
        - asc
        - desc
      title: TableSortDirection
      type: string
    TableRowWhereItemSchema-Input:
      oneOf:
        - $ref: '#/components/schemas/TableRowFilterSchema-Input'
        - $ref: '#/components/schemas/TableRowFilterGroupSchema-Input'
    TableFilterJoiner:
      description: How the members of one filter level combine.
      enum:
        - and
        - or
      title: TableFilterJoiner
      type: string
    TableRunRowScopeReadSchema:
      description: >-
        The rows a run resolved to: what lets a client mark exactly those busy.


        ``record_ids`` is populated for the ``record_ids`` kind alone.
        ``all_rows``

        and ``unlisted`` both mean "assume every row": the first because it is

        true, the second because the set was too large to carry on every frame.

        Collapsing them keeps a client's fallback one branch rather than two.
      properties:
        kind:
          $ref: '#/components/schemas/TableRunScopeKind'
          description: How the resolved row set is published.
        record_ids:
          anyOf:
            - items:
                format: uuid
                type: string
              type: array
            - type: 'null'
          description: The exact rows the run will touch; null unless kind is record_ids.
          title: Record Ids
        rows:
          anyOf:
            - type: integer
            - type: 'null'
          description: Rows the resolved scope covers; null for all rows.
          title: Rows
      required:
        - kind
        - rows
        - record_ids
      title: TableRunRowScopeReadSchema
      type: object
    TableRunStatus:
      description: |-
        Lifecycle status of a table run.

        ``PENDING`` exists for API compatibility but is never observed: runs are
        born ``RUNNING`` at mint. ``CANCELLING`` is the requested-stop state the
        page activities observe; the workflow finalizes it to ``CANCELLED``.
      enum:
        - pending
        - running
        - cancelling
        - cancelled
        - paused_for_credits
        - completed
        - completed_with_errors
        - failed
      title: TableRunStatus
      type: string
    TableRunTrigger:
      description: What kind of mutation requested a recompute run.
      enum:
        - cell_edited
        - row_added
        - row_manual
        - column_added
        - column_edited
        - column_manual
      title: TableRunTrigger
      type: string
    TableRowFilterSchema-Input:
      description: >-
        One predicate a row must satisfy.


        Which operators apply depends on the column's type: a range comparison
        on

        a checkbox is rejected rather than silently matching nothing. The
        valueless

        operators (``is_empty``, ``is_not_empty``, ``is_true``, ``is_false``)
        must

        not carry a value.
      properties:
        column_id:
          anyOf:
            - format: uuid
              type: string
            - $ref: '#/components/schemas/TableRowFilterScope'
          description: >-
            A column ID, or `__any_column__` to ask about every cell in the row
            at once. `__any_column__` takes only `has_error` and `has_no_error`.
          title: Column Id
        operator:
          $ref: '#/components/schemas/TableFilterOperator'
        type:
          const: condition
          default: condition
          title: Type
          type: string
        value:
          anyOf:
            - $ref: '#/components/schemas/CellValue-Input'
            - type: 'null'
          description: The operand; omitted for the valueless operators.
      required:
        - column_id
        - operator
      title: TableRowFilterSchema
      type: object
    TableRowFilterGroupSchema-Input:
      description: >-
        A parenthesised run of conditions, joined among themselves.


        Holds conditions and never groups: one level of nesting is expressible
        and a

        second is not, structurally. That covers ``A and (B or C)`` (what a
        filter

        panel offers) while keeping the SQL a flat walk.
      properties:
        conditions:
          description: The conditions inside the parentheses.
          items:
            $ref: '#/components/schemas/TableRowFilterSchema-Input'
          maxItems: 8
          minItems: 1
          title: Conditions
          type: array
        joiner:
          $ref: '#/components/schemas/TableFilterJoiner'
          default: and
          description: How this group's conditions combine.
        type:
          const: group
          default: group
          title: Type
          type: string
      required:
        - conditions
      title: TableRowFilterGroupSchema
      type: object
    TableRunScopeKind:
      description: >-
        How a minted run's RESOLVED row set is published to readers.


        Distinct from :class:`TableRunScope`, which is what the caller ASKED
        for.

        The two disagree routinely (``ALL`` on a ``keep_existing_results`` table
        is

        silently narrowed to the unfilled rows at mint) and only the resolved
        set

        can be painted, so only the resolved set is stored.


        ``UNLISTED`` is a real row subset whose ids were too many to carry on
        every

        changefeed frame (see ``max_persisted_scope_rows``). It reads exactly
        like

        ``ALL_ROWS`` to a client: assume every row. That keeps the fallback one

        branch rather than two, at the cost of over-painting the rare huge
        partial.
      enum:
        - all_rows
        - record_ids
        - unlisted
      title: TableRunScopeKind
      type: string
    TableRowFilterScope:
      description: >-
        The filter targets that name the whole ROW rather than one column.


        ``ANY_COLUMN`` asks a question of every cell in the row at once: "does
        any

        column have an error?" is the table-wide half of the per-column
        ``has_error``.

        It stands in the ``column_id`` slot of an ordinary condition (the same
        trick

        the system sort keys use), so a row-wide question travels through every

        surface that already carries a predicate tree (a saved view, a run's
        scope,

        an export, a count) with nothing to add to any of them. The dunder
        spelling

        keeps it apart from any UUID.
      enum:
        - __any_column__
        - __record_id__
      title: TableRowFilterScope
      type: string
    TableFilterOperator:
      description: >-
        A row filter predicate.


        Which operators are legal depends on the column's data type; the service

        validates the pairing and rejects a mismatch, so an operator here is a

        vocabulary entry rather than a promise it applies everywhere.


        Two families live here. The VALUE operators ask about what a cell holds
        and

        are keyed off the column's storage slot. The STATE operators ask about
        what

        the last run DID to the cell (errored, skipped, never ran, went stale)
        and

        are keyed off the column's kind instead: they read the compute metadata
        that

        only a computed column ever writes, and mean nothing on a hand-typed
        one.
      enum:
        - eq
        - neq
        - gt
        - gte
        - lt
        - lte
        - contains
        - not_contains
        - contains_any_of
        - not_contains_any_of
        - starts_with
        - is_true
        - is_false
        - is_empty
        - is_not_empty
        - has_error
        - has_no_error
        - has_results
        - has_no_results
        - has_not_run
        - is_stale
        - is_not_stale
        - run_condition_not_met
        - run_stopped
      title: TableFilterOperator
      type: string
    CellValue-Input:
      anyOf:
        - type: string
        - type: integer
        - type: number
        - type: boolean
        - format: date-time
          type: string
        - format: date
          type: string
        - items:
            anyOf:
              - $ref: '#/components/schemas/CellValue-Input'
              - type: 'null'
          type: array
        - additionalProperties:
            anyOf:
              - $ref: '#/components/schemas/CellValue-Input'
              - type: 'null'
          type: object
  securitySchemes:
    APIKeyHeader:
      in: header
      name: X-API-Key
      type: apiKey
    HTTPBearer:
      scheme: bearer
      type: http

````

This documentation is built and hosted on [Mintlify](https://mintlify.com), a developer documentation platform.