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

# Find and replace content

> Performs find/replace operations on content using the specified model.

This endpoint allows you to replace views or fields across all documents associated with the model. This is useful when renaming model elements and need to update all references.




## OpenAPI

````yaml /api/openapi.yaml post /v1/models/{modelId}/content-validator
openapi: 3.1.0
info:
  title: Omni API
  description: >
    The Omni REST API provides programmatic access to your Omni instance for
    managing users, documents, queries, schedules, and more.  
  version: 1.0.0
  contact:
    name: Omni Support
    url: https://docs.omni.co
servers:
  - url: https://{instance}.omniapp.co/api
    description: Production
    variables:
      instance:
        default: blobsrus
        description: Your production Omni instance subdomain
  - url: https://{instance}.playground.exploreomni.dev/api
    description: Playground
    variables:
      instance:
        default: blobsrus
        description: Your playground Omni instance subdomain
security:
  - bearerAuth: []
  - orgApiKey: []
tags:
  - name: AI
    description: AI-powered query generation
  - name: API Tokens
    description: >-
      Manage API tokens (Organization keys, Personal Access Tokens, MCP OAuth
      grants)
  - name: Connections
    description: Manage database connections
  - name: Connection environments
    description: Manage connection environments database connections
  - name: Content
    description: Unified content retrieval (documents and folders)
  - name: Content migration
    description: Export and import dashboards
  - name: Content validator
    description: Validate content against models and perform find/replace operations
  - name: Dashboard downloads
    description: Download dashboards and tiles as PDF, PNG, XLSX, CSV, or JSON files
  - name: Dashboard filters and controls
    description: Read and update dashboard filter and control default values
  - name: dbt
    description: Manage dbt configuration for connections
  - name: Documents
    description: Create, retrieve, and manage documents
  - name: Document favorites
    description: Favorite and unfavorite documents
  - name: Document labels
    description: Apply and manage labels on documents
  - name: Document permissions
    description: Manage document-level access
  - name: Labels
    description: >
      Manage labels in an organization. Labels can be applied to documents and
      folders to help organize and categorize content.


      **Label types:**

      - **Basic labels**: Can be created and managed by any user

      - **Verified labels**: Indicate curated or officially sanctioned content.
      Admin-only.

      - **Homepage labels**: Appear on the organization homepage. Admin-only.
  - name: Folders
    description: Create and organize content folders
  - name: Folder permissions
    description: Manage folder-level access
  - name: Jobs
    description: Check status of asynchronous jobs
  - name: Models
    description: Create and manage data models
  - name: Model branches
    description: Manage model branches and merge changes
  - name: Model git configuration
    description: Manage git configuration for shared models
  - name: Queries
    description: Execute workbook queries
  - name: Schedules
    description: Create and manage scheduled tasks
  - name: Schedule recipients
    description: Manage schedule recipients
  - name: Schema refresh schedules
    description: Manage automated schema refresh schedules for connections
  - name: Topics
    description: Retrieve topic information from models
  - name: Uploads
    description: Manage file uploads
  - name: Users
    description: Manage users
  - name: User attributes
    description: Manage user attribute definitions
  - name: User groups
    description: Manage user groups
  - name: User model roles
    description: Manage model and connection role assignments for users
  - name: User group model roles
    description: Manage model and connection role assignments for user groups
  - name: Uploads
    description: Manage CSV and spreadsheet uploads
paths:
  /v1/models/{modelId}/content-validator:
    post:
      tags:
        - Content validator
      summary: Find and replace content
      description: >
        Performs find/replace operations on content using the specified model.


        This endpoint allows you to replace views or fields across all documents
        associated with the model. This is useful when renaming model elements
        and need to update all references.
      operationId: findReplaceContent
      parameters:
        - name: modelId
          in: path
          required: true
          schema:
            type: string
            format: uuid
          description: The ID of the model to perform find/replace against.
        - name: userId
          in: query
          schema:
            type: string
            format: uuid
          description: >
            The user ID to act on behalf of. Only valid when using an
            organization API key.


            User-scoped API keys cannot use this parameter and will receive a
            403 error if provided.
      requestBody:
        required: true
        content:
          application/json:
            schema:
              type: object
              required:
                - find
                - replacement
                - find_or_replace_type
              properties:
                find:
                  type: string
                  description: >
                    The value to find. Used with `find_or_replace_type` to scope
                    the search:


                    - `VIEW` - The name of the view to find

                    - `FIELD` - The fully qualified name of the field to find,
                    specified as `view_name.field_name`

                    - `TOPIC` - The name of the topic to find
                replacement:
                  type: string
                  description: >
                    The replacement value.


                    - `VIEW` - The name of the replacement view

                    - `FIELD` - The fully qualified name of the replacement
                    field, specified as `view_name.field_name`

                    - `TOPIC` - The name of the replacement topic
                find_or_replace_type:
                  type: string
                  enum:
                    - VIEW
                    - FIELD
                    - TOPIC
                  description: >
                    The type of find/replace operation.


                    - `VIEW` - Replace view references

                    - `FIELD` - Replace field references. `find` and
                    `replacement` values must be the fully qualified name of the
                    field, e.g. `view_name.field_name`.

                    - `TOPIC` - Replace topic references
                branch_id:
                  type: string
                  format: uuid
                  description: >-
                    The branch ID to perform the operation on. If not provided,
                    operates on the main model.
                include_personal_folders:
                  type: boolean
                  description: When enabled, include personal folders.
                only_in_workbook_id:
                  type: string
                  format: uuid
                  description: >
                    When provided, scopes the find/replace action to the
                    specified workbook.


                    Must be the workbook model's internal **UUID** — visible in
                    the model IDE URL as `/model/{uuid}`. This is **not** the
                    same as the document's URL identifier (slug) that appears in
                    the dashboard or workbook URL (for example,
                    `/dashboards/abc123`). **Passing a document identifier /
                    slug will silently return 0 replacements instead of raising
                    an error.**
                  example: 550e8400-e29b-41d4-a716-446655440000
            examples:
              replaceView:
                summary: Replace a view
                value:
                  find: old_view
                  replacement: new_view
                  find_or_replace_type: VIEW
              replaceField:
                summary: Replace a field
                value:
                  find: orders.old_field
                  replacement: orders.new_field
                  find_or_replace_type: FIELD
              replaceViewInBranch:
                summary: Replace a view in a branch
                value:
                  find: old_view
                  replacement: new_view
                  find_or_replace_type: VIEW
                  branch_id: 550e8400-e29b-41d4-a716-446655440001
      responses:
        '200':
          description: Find/replace operation completed successfully
          content:
            application/json:
              schema:
                type: object
                properties:
                  replaced_queries_count:
                    type: integer
                    description: The number of queries that had replacements made.
                  replaced_documents_count:
                    type: integer
                    description: The number of documents that had replacements made.
                  replaced_workbook_models_count:
                    type: integer
                    description: The number of workbook models that had replacements made.
                  replaced_dashboard_filters_count:
                    type: integer
                    description: >-
                      The number of dashboard filters that had replacements
                      made.
                  skipped_pr_required_count:
                    type: integer
                    description: >-
                      The number of documents skipped because they require a
                      pull request to publish.
              example:
                replaced_queries_count: 15
                replaced_documents_count: 5
                replaced_workbook_models_count: 3
                replaced_dashboard_filters_count: 2
                skipped_pr_required_count: 0
        '400':
          description: |
            Bad Request

            Possible error messages:

            - `modelId: Invalid UUID`
            - `Find field must be scoped by view name.`
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/Error'
              examples:
                invalidModelId:
                  summary: Invalid model ID
                  value:
                    detail: 'Bad Request: modelId: Invalid UUID'
                    status: 400
                fieldNotScoped:
                  summary: Field not scoped by view name
                  value:
                    detail: Find field must be scoped by view name.
                    status: 400
        '403':
          description: |
            Forbidden

            Possible error messages:

            - `User-scoped API keys cannot act on behalf of other users`
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/Error'
              example:
                detail: User-scoped API keys cannot act on behalf of other users
                status: 403
        '404':
          description: |
            Not Found

            Possible error messages:

            - `Shared model with id <modelId> does not exist`
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/Error'
              example:
                detail: >-
                  Shared model with id 550e8400-e29b-41d4-a716-446655440000 does
                  not exist
                status: 404
        '405':
          $ref: '#/components/responses/MethodNotAllowed'
        '429':
          $ref: '#/components/responses/TooManyRequests'
      security:
        - bearerAuth: []
components:
  schemas:
    Error:
      type: object
      properties:
        error:
          type: string
          description: HTTP response code for the error
          example: <response_code>
        message:
          type: string
          description: Detailed error description
          example: <error_reason>
  responses:
    MethodNotAllowed:
      description: Method Not Allowed - Invalid HTTP method for this endpoint
      content:
        application/json:
          schema:
            $ref: '#/components/schemas/Error'
    TooManyRequests:
      description: Too Many Requests - Rate limit exceeded (60 requests/minute)
      content:
        application/json:
          schema:
            $ref: '#/components/schemas/Error'
  securitySchemes:
    bearerAuth:
      type: http
      scheme: bearer
      bearerFormat: JWT
      description: >
        Can be either an [Organization API
        Key](/api/authentication#organization-api-keys) or [Personal Access
        Token (PAT)](/api/authentication#personal-access-tokens-pat).


        Include in the `Authorization` header as: `Bearer YOUR_TOKEN`
    orgApiKey:
      type: http
      scheme: bearer
      bearerFormat: JWT
      description: >
        Requires an [Organization API
        Key](/api/authentication#organization-api-keys). Personal Access Tokens
        (PATs) are not supported for this endpoint.


        Include in the `Authorization` header as: `Bearer ORGANIZATION_API_KEY`

````