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

# Search source files

> Finds text across every source file and returns one entry per matching line with its file name, line, and column. Call this first to locate code, then read only the files it names with websiteSourceCode.files.read. `pattern` is literal text unless `isRegex` is set, and matching is line by line, so a pattern cannot span a newline. Narrow with `nameGlob` and `type`, ask for surrounding lines with `contextLines`, or set `filesOnly` for the cheapest orientation. Results are cursor-paginated over matches.



## OpenAPI

````yaml /api-reference/openapi.json post /websiteSourceCode/files/search
openapi: 3.1.0
info:
  title: Cactal API
  version: 1.0.0
  description: >-
    The Cactal public API. Create, edit, publish, and operate websites
    programmatically. Authenticate every request with an API key sent as
    `Authorization: Bearer <key>`.
servers:
  - url: https://api.cactal.ai/v1
security:
  - apiKey: []
tags:
  - name: Documentation
    description: >-
      Search and read the Cactal product documentation for concepts, guides,
      agent workflows, platform behavior, and API operations.
  - name: Feedback
    description: >-
      Submit free-form product feedback from users and agents to the Cactal
      feedback inbox.
  - name: Websites
    description: >-
      Create and manage websites — the top-level resource that owns source code,
      content, assets, domains, and analytics.
  - name: Website editors
    description: >-
      Grant, list, and revoke website-scoped editor access, and invite
      collaborators to a single website by email.
  - name: API keys
    description: >-
      Create, scope, rotate, and revoke the API keys that authenticate
      programmatic and agent access.
  - name: Source code
    description: >-
      Read and edit the framework source files of a website draft. Mutations
      require an edit lease.
  - name: Publishing
    description: Validate, build, publish, and roll back website versions.
  - name: CMS collections
    description: >-
      Define the content model: collections of structured content owned by a
      website.
  - name: CMS fields
    description: Manage the typed fields that make up a collection schema.
  - name: CMS items
    description: >-
      Create, query, publish, and organize the content entries inside a
      collection.
  - name: Domains
    description: >-
      Manage platform subdomains and custom domains, including DNS verification
      and the primary domain.
  - name: Assets
    description: Upload and manage website files and images served from the Cactal CDN.
  - name: Media generation
    description: >-
      Generate reference-guided website images that are stored as ordinary
      Cactal CDN assets.
  - name: Project Context
    description: >-
      Upload private durable reference material that the website agent can
      search, read, and inspect.
  - name: Analytics
    description: >-
      Read first-party traffic analytics for a website and export datasets as
      CSV.
  - name: Organizations
    description: Manage organizations, members, and organization-wide invitations.
  - name: Audit log
    description: >-
      Read the immutable record of actions performed in an organization by users
      and API keys.
  - name: Billing
    description: >-
      Read billing state and manage plans, site capacity, and prepaid usage
      balance. Every billing operation requires the organization owner role,
      which API keys cannot hold — today these operations are performed from the
      dashboard, return 403 for API-key callers, and are hidden from MCP tool
      lists.
paths:
  /websiteSourceCode/files/search:
    post:
      tags:
        - Source code
      summary: Search source files
      description: >-
        Finds text across every source file and returns one entry per matching
        line with its file name, line, and column. Call this first to locate
        code, then read only the files it names with
        websiteSourceCode.files.read. `pattern` is literal text unless `isRegex`
        is set, and matching is line by line, so a pattern cannot span a
        newline. Narrow with `nameGlob` and `type`, ask for surrounding lines
        with `contextLines`, or set `filesOnly` for the cheapest orientation.
        Results are cursor-paginated over matches.
      operationId: websiteSourceCode.files.search
      requestBody:
        required: true
        content:
          application/json:
            schema:
              type: object
              properties:
                websiteId:
                  type: string
                  minLength: 1
                target:
                  description: 'Version alias to read: `head` (default) or `published`.'
                  type: string
                  enum:
                    - head
                    - published
                version:
                  description: Explicit source version. Takes precedence over `target`.
                  type: integer
                  exclusiveMinimum: 0
                  maximum: 9007199254740991
                pattern:
                  type: string
                  minLength: 1
                  maxLength: 500
                  description: >-
                    Text to find. Literal unless `isRegex` is set. Matched line
                    by line, so `^` and `$` anchor to line boundaries and a
                    pattern cannot span a newline.
                isRegex:
                  description: >-
                    Read `pattern` as a regular expression. JavaScript syntax
                    works, including `\b`, `\d`, lookahead, and lazy
                    quantifiers; named capture groups are not supported.
                  type: boolean
                caseSensitive:
                  description: Match case exactly. Defaults to `true`.
                  type: boolean
                nameGlob:
                  description: >-
                    Only search names matching this glob. `*` and `?` stop at a
                    `/`; `**` crosses them, for example `blog/**`.
                  type: string
                  minLength: 1
                  maxLength: 255
                type:
                  description: Only search files of this type.
                  type: string
                  enum:
                    - page
                    - component
                    - module
                    - global_css
                    - not_found
                    - website_config
                    - custom_head_start
                    - custom_head_end
                    - custom_body_start
                    - custom_body_end
                filesOnly:
                  description: Return one entry per matching file, with no line detail.
                  type: boolean
                contextLines:
                  description: >-
                    Surrounding lines to return on each side of a match (0 to
                    3). Defaults to 0.
                  type: integer
                  minimum: 0
                  maximum: 3
                maxMatchesPerFile:
                  description: >-
                    Maximum matches from any one file (up to 50). Defaults to
                    10.
                  type: integer
                  minimum: 1
                  maximum: 50
                cursor:
                  description: >-
                    Opaque cursor from the previous page. Pass the returned
                    `version` too to keep the search pinned.
                  type: string
                limit:
                  default: 20
                  description: >-
                    Maximum matches to return per page. Defaults to 20, maximum
                    100.
                  type: integer
                  minimum: 1
                  maximum: 100
              required:
                - websiteId
                - pattern
      responses:
        '200':
          description: A page of matches for the requested source version.
          content:
            application/json:
              schema:
                type: object
                properties:
                  items:
                    type: array
                    items:
                      type: object
                      properties:
                        type:
                          type: string
                          enum:
                            - page
                            - component
                            - module
                            - global_css
                            - not_found
                            - website_config
                            - custom_head_start
                            - custom_head_end
                            - custom_body_start
                            - custom_body_end
                          description: File type.
                        name:
                          type: string
                          description: File name to pass to websiteSourceCode.files.read.
                        line:
                          description: >-
                            1-based number of the matching line. Omitted when
                            `filesOnly` is `true`.
                          type: integer
                        column:
                          description: >-
                            1-based character offset of the first match on the
                            line. Omitted when `filesOnly` is `true`.
                          type: integer
                        match:
                          description: >-
                            The matching line, cut at 300 characters. Omitted
                            when `filesOnly` is `true`.
                          type: string
                        before:
                          description: >-
                            Lines immediately before the match. Present only
                            when `contextLines` is set.
                          type: array
                          items:
                            type: string
                        after:
                          description: >-
                            Lines immediately after the match. Present only when
                            `contextLines` is set.
                          type: array
                          items:
                            type: string
                      required:
                        - type
                        - name
                      additionalProperties: false
                  nextCursor:
                    anyOf:
                      - type: string
                      - type: 'null'
                    description: >-
                      Opaque cursor for the next page. Pass it as the `cursor`
                      parameter on the next request. `null` when this is the
                      last page.
                  websiteId:
                    type: string
                    description: Id of the website.
                  version:
                    type: integer
                    description: >-
                      Source version that was searched. Pass it as `version`
                      when continuing.
                  truncated:
                    description: >-
                      `true` when a file on this page had more matches than
                      `maxMatchesPerFile`. Raise it, or narrow the pattern, to
                      see the rest.
                    type: boolean
                required:
                  - items
                  - nextCursor
                  - websiteId
                  - version
                additionalProperties: false
        '400':
          description: >-
            Validation failed. The response `message` names the first invalid
            field.
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/ServiceError'
        '401':
          description: Missing, invalid, expired, or revoked API key.
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/ServiceError'
        '403':
          description: The authenticated principal lacks the required capability.
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/ServiceError'
        '404':
          description: >-
            The resource does not exist or is outside the principal’s access
            scope.
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/ServiceError'
        '429':
          description: >-
            Rate limit exceeded. Retry after the number of seconds in the
            `Retry-After` header.
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/ServiceError'
components:
  schemas:
    ServiceError:
      type: object
      required:
        - kind
        - message
      description: >-
        Canonical error body returned by every non-2xx response. Extra fields
        carry error-specific details.
      properties:
        kind:
          type: string
          enum:
            - validation
            - unauthorized
            - forbidden
            - not_found
            - conflict
            - rate_limited
            - internal
          description: Stable, machine-readable error category.
        message:
          type: string
          description: Human-readable explanation of the failure.
        suggestion:
          type: string
          description: >-
            What to do next when the failure has a known fix; may name the exact
            operation to call.
        validValues:
          type: array
          items:
            type: string
          description: The acceptable values for the failing field, when the set is closed.
      additionalProperties: true
  securitySchemes:
    apiKey:
      type: http
      scheme: bearer
      description: >-
        Cactal API key. Create one in the dashboard or via `POST /apiKeys`. The
        plaintext key is shown once at creation.

````