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

# Create a Saved View

> Create a saved view in a vault. The view is shared with the whole vault the moment it exists: anyone who can read the vault can open it, and anyone with the Manage Views permission can change or delete it.

Column visibility is stored as a hide list. `hidden_field_keys` names the columns a view hides, so an empty list means the view shows every column the vault has. A column added to the vault later appears in the view until you hide it.

Every field key has to exist in the vault. Keys in `hidden_field_keys` and `field_order` can also name a system column (`actions`, `fileName`, `relationships`, `extractedAt`, `sourceName`). `sort.field` takes a vault column or one of `fileName`, `extractedAt`, `sourceName`, because those are the only system columns the table can sort by. A filter `field_key` takes a vault column or `__notes__`, the any-column notes filter. Anything else returns `400` naming the keys it could not place, rather than being dropped on the way in and leaving you with a view that ignores half of what you sent.

View names are unique within a vault once trimmed, and the comparison is case sensitive, so `Renewals` and `renewals` can both exist. A name already taken returns `409`.

Requires the `editor` or `owner` role in the vault, the organization-level permission to manage vaults, and the organization-level Manage Views permission. A caller who holds the vault role but not both permissions gets `403`.

Requires a user-scoped API key (`u:gcai_...`). A vault is shared with named people, so an organization-scoped key has no identity to resolve vault access with.



## OpenAPI

````yaml POST /vaults/{id}/views
openapi: 3.0.3
info:
  title: GC AI External API
  version: 1.0.0
  description: >-
    The GC AI External API allows programmatic access to GC AI's chat
    capabilities. It's designed for integration with workflow automation tools
    like Zapier, Make, n8n, or custom applications.


    ## Authentication


    All API requests must include an API key in the `Authorization` header:


    ```

    Authorization: gcai_xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx

    ```


    API keys can be created in the GC AI app under **Settings → API**.


    ## Multi-turn Conversations


    Conversations can span multiple turns: pass the `chat_id` returned by a
    completion back on your next request to continue the same chat. See
    [Multi-turn Conversations](/api-reference/concepts/multi-turn).


    ## Current Limitations


    The following is not yet available via API:


    - **Interactive clarification**: the model cannot pause to ask the caller a
    follow-up question; the `askUserQuestions` tool is disabled on the API
    surface


    ## Usage


    Usage is tracked and viewable in the GC AI app under **Settings → API → View
    Usage**.


    ## Support


    For API support, contact [support@gc.ai](mailto:support@gc.ai) or reach out
    to your account representative.
  contact:
    email: support@gc.ai
servers:
  - url: https://app.gc.ai/api/external/v1
    description: Production server
security: []
tags:
  - name: Async Jobs
    description: Poll the status and result of asynchronous API jobs
  - name: Chat
    description: AI chat completion endpoints
  - name: Chats
    description: Chat management, message history, and sharing endpoints
  - name: Contract Intelligence
    description: Vault discovery and document ingestion endpoints for Contract Intelligence
  - name: Files
    description: File upload and management endpoints
  - name: Folders
    description: Folder management endpoints
  - name: Playbooks
    description: Playbook review endpoints
  - name: Profiles
    description: Personal and company profile endpoints
  - name: Projects
    description: Project management endpoints
  - name: Skills
    description: Skill library management endpoints
  - name: Utility
    description: Health check and connectivity endpoints
  - name: Usage
    description: Usage and credit/billing reporting endpoints
paths:
  /vaults/{id}/views:
    post:
      tags:
        - Contract Intelligence
      summary: Create a saved view
      description: >-
        Create a saved view in a vault. The view is shared with the whole vault
        the moment it exists: anyone who can read the vault can open it, and
        anyone with the Manage Views permission can change or delete it.


        Column visibility is stored as a hide list. `hidden_field_keys` names
        the columns a view hides, so an empty list means the view shows every
        column the vault has. A column added to the vault later appears in the
        view until you hide it.


        Every field key has to exist in the vault. Keys in `hidden_field_keys`
        and `field_order` can also name a system column (`actions`, `fileName`,
        `relationships`, `extractedAt`, `sourceName`). `sort.field` takes a
        vault column or one of `fileName`, `extractedAt`, `sourceName`, because
        those are the only system columns the table can sort by. A filter
        `field_key` takes a vault column or `__notes__`, the any-column notes
        filter. Anything else returns `400` naming the keys it could not place,
        rather than being dropped on the way in and leaving you with a view that
        ignores half of what you sent.


        View names are unique within a vault once trimmed, and the comparison is
        case sensitive, so `Renewals` and `renewals` can both exist. A name
        already taken returns `409`.


        Requires the `editor` or `owner` role in the vault, the
        organization-level permission to manage vaults, and the
        organization-level Manage Views permission. A caller who holds the vault
        role but not both permissions gets `403`.


        Requires a user-scoped API key (`u:gcai_...`). A vault is shared with
        named people, so an organization-scoped key has no identity to resolve
        vault access with.
      operationId: createVaultView
      parameters:
        - schema:
            type: string
            format: uuid
            description: The vault ID
          required: true
          description: The vault ID
          name: id
          in: path
      requestBody:
        required: true
        content:
          application/json:
            schema:
              $ref: '#/components/schemas/VaultViewCreateRequest'
      responses:
        '201':
          description: The created view
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/VaultViewResponse'
        '400':
          description: Invalid request body, or a field key the vault does not have
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/Error'
        '401':
          description: Missing or malformed API key
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/Error'
        '403':
          description: >-
            Contract Intelligence is not enabled for this account. Contact
            support to request access., or the caller cannot manage views in
            this vault
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/Error'
        '404':
          description: Vault not found or access denied
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/Error'
        '409':
          description: The vault is archived, or another view in it already has that name
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/Error'
        '422':
          description: >-
            Vault access is per-user and requires a user-scoped API key
            (u:gcai_...).
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/Error'
        '429':
          description: >-
            Rate limit exceeded. See [Rate
            Limits](/api-reference/concepts/rate-limits) for the tiers, limits,
            and how to back off.
          headers:
            Retry-After:
              schema:
                type: string
                description: Seconds to wait before retrying after a rate-limit block.
                example: '60'
              required: true
              description: Seconds to wait before retrying after a rate-limit block.
            RateLimit-Limit:
              schema:
                type: string
                description: Request quota for the applicable window.
                example: '3'
              required: true
              description: Request quota for the applicable window.
            RateLimit-Remaining:
              schema:
                type: string
                description: Requests remaining in the current window.
                example: '0'
              required: true
              description: Requests remaining in the current window.
            RateLimit-Reset:
              schema:
                type: string
                description: Seconds until the quota resets.
                example: '60'
              required: true
              description: Seconds until the quota resets.
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/Error'
        '500':
          description: Internal server error
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/Error'
        '503':
          description: Service temporarily unavailable
          headers:
            Retry-After:
              schema:
                type: string
                description: >-
                  Seconds to wait before retrying after a transient service
                  outage.
                example: '5'
              required: true
              description: >-
                Seconds to wait before retrying after a transient service
                outage.
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/Error'
      security:
        - ApiKeyAuth: []
components:
  schemas:
    VaultViewCreateRequest:
      type: object
      properties:
        name:
          type: string
          minLength: 1
          maxLength: 120
          description: View name. Trimmed before it is stored, and unique within the vault.
          example: Renewals this quarter
        view_state:
          $ref: '#/components/schemas/VaultViewStateInput'
      required:
        - name
    VaultViewResponse:
      type: object
      properties:
        id:
          type: string
          format: uuid
          description: Unique view identifier
        vault_id:
          type: string
          format: uuid
          description: Vault this view belongs to
        name:
          type: string
          description: View name, as shown on its tab in the app
          example: Renewals this quarter
        position:
          type: integer
          description: >-
            Zero-based slot this view occupies in the vault view order.
            Read-only over the API: reordering views is not available here yet.
        created_by_user_id:
          type: integer
          nullable: true
          description: >-
            GC AI user ID of whoever created the view, or null when that person
            has since been removed. Provenance only: a view is shared with the
            whole vault and is not owned by its creator.
        view_state:
          $ref: '#/components/schemas/VaultViewState'
        created_at:
          type: string
          description: ISO 8601 creation timestamp
        updated_at:
          type: string
          description: ISO 8601 last-update timestamp
      required:
        - id
        - vault_id
        - name
        - position
        - created_by_user_id
        - view_state
        - created_at
        - updated_at
    Error:
      type: object
      properties:
        error:
          type: string
          description: Error message
        code:
          type: string
          description: >-
            Machine-readable error code present on some errors (e.g.
            `RATE_LIMITED`, `INSUFFICIENT_CREDITS`, `TRIAL_NOT_STARTED`,
            `BILLING_NOT_CONFIGURED`). Branch on this rather than the
            human-readable `error` string.
        message:
          type: string
          description: Additional error details
        details:
          type: object
          additionalProperties:
            nullable: true
          description: Validation error details (for 400 errors)
      required:
        - error
    VaultViewStateInput:
      type: object
      properties:
        hidden_field_keys:
          type: array
          items:
            type: string
            minLength: 1
            maxLength: 100
          maxItems: 500
          description: >-
            Column keys this view hides. This is a hide list, not a show list,
            so an empty array means the view shows every column in the vault. A
            column added to the vault after the view was saved is visible in the
            view until you add its key here.
        field_order:
          type: array
          items:
            type: string
            minLength: 1
            maxLength: 100
          maxItems: 500
          description: >-
            Column keys in the order this view shows them, left to right. An
            empty array means the view uses the vault default order. Keys you
            leave out keep their default position relative to one another.
        sort:
          $ref: '#/components/schemas/VaultViewSort'
        filters:
          type: array
          items:
            $ref: '#/components/schemas/VaultViewFilter'
          maxItems: 200
          description: >-
            Filter rules this view applies. Rules combine with AND. An empty
            array means the view shows every document in the vault.
      required:
        - hidden_field_keys
        - field_order
        - sort
        - filters
      description: >-
        Layout, sort, and filters for the view. Omit it for a view that shows
        every column in the vault default order, unsorted and unfiltered.
    VaultViewState:
      type: object
      properties:
        hidden_field_keys:
          type: array
          items:
            type: string
          description: >-
            Column keys this view hides. This is a hide list, not a show list,
            so an empty array means the view shows every column in the vault. A
            column added to the vault after the view was saved is visible in the
            view until you add its key here.
        field_order:
          type: array
          items:
            type: string
          description: >-
            Column keys in the order this view shows them, left to right. An
            empty array means the view uses the vault default order. Keys you
            leave out keep their default position relative to one another.
        sort:
          $ref: '#/components/schemas/VaultViewSort'
        filters:
          type: array
          items:
            $ref: '#/components/schemas/VaultViewFilter'
          description: >-
            Filter rules this view applies. Rules combine with AND. An empty
            array means the view shows every document in the vault.
      required:
        - hidden_field_keys
        - field_order
        - sort
        - filters
    VaultViewSort:
      type: object
      nullable: true
      properties:
        field:
          type: string
          minLength: 1
          maxLength: 100
          description: >-
            Column to sort by: a vault column key, or one of `fileName`,
            `extractedAt`, `sourceName`.
          example: effectiveDate
        direction:
          type: string
          enum:
            - asc
            - desc
          description: Sort direction.
      required:
        - field
        - direction
      description: Sort this view applies, or `null` for the vault default order.
    VaultViewFilter:
      type: object
      properties:
        field_key:
          type: string
          minLength: 1
          maxLength: 100
          description: >-
            Column the rule applies to. Use a vault column key, or `__notes__`
            for the any-column notes filter.
          example: governingLaw
        operator:
          type: string
          enum:
            - contains
            - equals
            - date_range
            - in
            - boolean
            - number_range
            - party_contains
            - list_length
            - equals_only
            - not_contains
            - not_equals
            - is_empty
            - is_not_empty
            - is_before
            - is_after
            - has_notes
            - has_no_notes
          description: >-
            Comparison to apply. Operators are typed to column kinds, so an
            operator the column cannot carry has no effect on the rows the view
            returns.
        value:
          nullable: true
          description: >-
            Operand for the operator, in the shape that operator takes. Omit it
            for `is_empty`, `is_not_empty`, `has_notes`, and `has_no_notes`.
      required:
        - field_key
        - operator
  securitySchemes:
    ApiKeyAuth:
      type: apiKey
      in: header
      name: Authorization
      description: |-
        API key for authentication. Format: `gcai_xxxxxxxxx`

        Create API keys in the GC AI app under Settings → API.

````