---
title: "List table views"
method: GET
path: "/tables/{table_id}/views/"
tags: ["table-views"]
---

# List table views

`GET /tables/{table_id}/views/`

## Request

- Base URL: `https://api.getoneprofile.ai` (the document declares no server; this is the origin it was published from)
- URL: `https://api.getoneprofile.ai/tables/{table_id}/views/`
- Auth: one of:
  - API key in header `X-API-Key`
  - HTTP bearer

List all saved views of a table in position-then-name order (non-paginated by design: the view switcher renders them all at once).

## Path parameters

- `table_id` string, uuid, required

## Response `200`

Successful Response

- TableViewListResponseSchema: All saved views of one table, in position-then-name order.
  - `total_count` integer, required
  - `views` TableViewReadSchema[], required
    - `created_at` string, date-time, required
    - `description` string, nullable, required
    - `hidden_column_ids` string[], required: Columns the view hides.
    - `id` string, uuid, required
    - `is_default` boolean, required: Whether opening the table with no view named applies this one, for a person with no last view of the table. At most one view per table carries it.
    - `name` string, required
    - `position` integer, required: Display position in the view switcher; ties break by name.
    - `sorts` TableRowSortSchema[], required: The view's sort keys, in priority order.
      - `column_id` union, required: A column ID, or `__created_at__` / `__updated_at__` to order by when the row was added or last edited.
        - string, uuid
        - '__created_at__' | '__updated_at__': 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.
      - `direction` 'asc' | 'desc': Which way a sorted row listing runs.
    - `updated_at` string, date-time, required
    - `where` TableRowsWhereSchemaOutput, required: 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.
      - `items` TableRowWhereItemSchemaOutput[], required: Conditions and groups.
        - union
          - TableRowFilterSchemaOutput: 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.
            - `column_id` union, required: 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`.
              - …
            - `operator` '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', required: 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.
            - `type` 'condition'
            - `value` union
              - …
          - TableRowFilterGroupSchemaOutput: 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.
            - `conditions` TableRowFilterSchemaOutput[], required: The conditions inside the parentheses.
              - …
            - `joiner` 'and' | 'or': How the members of one filter level combine.
            - `type` 'group'
      - `joiner` 'and' | 'or': How the members of one filter level combine.

## Other responses

- `401`: Unauthorized
- `403`: Forbidden
- `404`: Table not found
- `422`: Invalid request made to the API.
- `500`: Internal server error.
- `502`: Bad gateway error.
- `503`: Service unavailable.

---

[API](https://skmtc.dev/getoneprofile/apis/api-reference-oneprofile.md) · [All operations](https://skmtc.dev/getoneprofile/apis/api-reference-oneprofile/llms.txt) · [OpenAPI document](https://skmtc.dev/getoneprofile/apis/api-reference-oneprofile/revisions/4a6bd71e3f02?raw)
