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

# Preview a table run

> What a run would cover and cost, without running it. Takes the same body as starting the run, so the price quoted is the price of the run asked for. Free runs cost nothing and are always covered. A view too wide to run answers `scope_too_large` with its row count rather than an error. A `failed_cells` run is priced column by column: preview each column with kind `column` and scope `errored`.



## OpenAPI

````yaml /openapi.json post /tables/{table_id}/runs/preview/
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/preview/:
    post:
      tags:
        - table-runs
      summary: Preview a table run
      description: >-
        What a run would cover and cost, without running it. Takes the same body
        as starting the run, so the price quoted is the price of the run asked
        for. Free runs cost nothing and are always covered. A view too wide to
        run answers `scope_too_large` with its row count rather than an error. A
        `failed_cells` run is priced column by column: preview each column with
        kind `column` and scope `errored`.
      operationId: preview_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:
        '200':
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/TableRunPreviewSchema'
          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
    TableRunPreviewSchema:
      description: >-
        What a run would cover and cost, before it is asked for.


        Priced by the same plan the run is minted from. Free runs
        (formula/manual

        columns) cost nothing and are always sufficient, even at a zero balance.

        Row counts and cell freshness can still shift between the preview and
        the run.
      properties:
        balance_sufficient:
          description: Whether the organization's available credits cover the estimate.
          title: Balance Sufficient
          type: boolean
        cells_total:
          description: >-
            All cells the run would compute over the rows that run, charged or
            not.
          title: Cells Total
          type: integer
        columns:
          description: >-
            Every enrichment or export column the run would work on, in the
            order it runs: the column asked for first, then the columns that
            read it. Each with the most its part can cost and what it usually
            costs.
          items:
            $ref: '#/components/schemas/ColumnRunEstimateSchema'
          title: Columns
          type: array
        estimated_credits:
          description: >-
            The most the run can cost, in credits: every row of every paid
            column charged its full per-row price. What the credit hold and the
            confirmation gate reason about.
          title: Estimated Credits
          type: number
        expected_credits:
          default: 0
          description: >-
            What a run like this usually costs, in credits: a column charged by
            use (an AI column) at the share of its per-row maximum the same kind
            of cell has actually been charged (a typical share while there is no
            history yet), every other column at its price. Quote both: up to
            estimated_credits, usually about expected_credits. Equal to
            estimated_credits for a flat price (no column charged by use, as in
            a run of enrichments): then quote that one figure, without up to.
          title: Expected Credits
          type: number
        export_writes:
          description: >-
            Export columns this run would fire. Present so the confirmation can
            name the destination, the object and the action instead of only a
            row count. Empty for a run that writes nothing outside this table.
          items:
            $ref: '#/components/schemas/ExportWriteEstimateSchema'
          title: Export Writes
          type: array
        is_estimate:
          description: 'Always true: freshness and row counts can shift by run time.'
          title: Is Estimate
          type: boolean
        requires_confirmation:
          default: false
          description: >-
            True when the estimate crosses the confirmation threshold: ask
            before spending instead of running on first click.
          title: Requires Confirmation
          type: boolean
        rows_held_back:
          default: 0
          description: >-
            Rows in scope the column's run condition would hold back. The run
            skips them and charges nothing for them, so they are already
            subtracted from rows_in_scope and from the price.
          title: Rows Held Back
          type: integer
        rows_in_scope:
          default: 0
          description: >-
            Rows the run would compute. This is what a scope choice is about,
            and what the credit estimate is derived from; `cells_total` also
            counts the dependent columns the run would recompute.
          title: Rows In Scope
          type: integer
        scope_too_large:
          default: false
          description: >-
            True when the filtered view names more rows than a run may be scoped
            to (`view_scope_max_rows`). `rows_in_scope` still carries the
            matching count; the run itself would be refused with
            `scope_too_large`. Narrow the filter, or run the whole table.
          title: Scope Too Large
          type: boolean
        unit_price:
          description: >-
            Blended credits per charged cell (total estimate / units); 0 for
            free runs.
          title: Unit Price
          type: number
        units:
          description: Cells that would incur a charge (0 for free runs).
          title: Units
          type: integer
      required:
        - units
        - unit_price
        - estimated_credits
        - cells_total
        - is_estimate
        - balance_sufficient
      title: TableRunPreviewSchema
      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
    ColumnRunEstimateSchema:
      description: >-
        One column a run would work on, in the order it runs, and what its part
        costs.
      properties:
        column_id:
          format: uuid
          title: Column Id
          type: string
        credits_at_most:
          description: The most this column's part of the run can cost, in credits.
          title: Credits At Most
          type: number
        credits_usually:
          description: >-
            What this column's part usually costs, in credits, from what the
            same kind of cell has been charged before, or a typical share of
            credits_at_most while there is no history yet. Equal to
            credits_at_most for a flat price.
          title: Credits Usually
          type: number
        display_name:
          description: The column's name, as the table shows it.
          title: Display Name
          type: string
      required:
        - column_id
        - display_name
        - credits_at_most
        - credits_usually
      title: ColumnRunEstimateSchema
      type: object
    ExportWriteEstimateSchema:
      description: One export column the run would fire, and how much it would write.
      properties:
        action:
          description: >-
            create, update or upsert: what happens to records that already exist
            at the destination.
          title: Action
          type: string
        column_id:
          format: uuid
          title: Column Id
          type: string
        display_name:
          description: The export column's name, for the confirmation copy.
          title: Display Name
          type: string
        integration_type:
          description: Destination provider slug, e.g. 'hubspot'.
          title: Integration Type
          type: string
        record_type:
          description: Destination object written, e.g. 'contacts'.
          title: Record Type
          type: string
        rows:
          description: Rows this column would attempt to write.
          title: Rows
          type: integer
      required:
        - column_id
        - display_name
        - integration_type
        - record_type
        - action
        - rows
      title: ExportWriteEstimateSchema
      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
    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
    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.