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

# Search Semantic

> Perform a hybrid semantic + keyword search across uploaded files. This endpoint allows you to query text extracted from video transcripts, audio transcriptions, and documents. It blends semantic embeddings with BM25 keyword scoring to return results that are both contextually relevant and textually precise. You can optionally restrict results by case, file, or date range. Ideal for investigations, discovery, and compliance queries.



## OpenAPI

````yaml POST /search/semantic
openapi: 3.0.1
info:
  title: Indora Labs API
  description: >-
    Comprehensive API for search, ingestion, file ops, redaction, detections,
    audit trail, and case management. All endpoints return strongly-typed JSON
    with explicit field descriptions and examples.
  version: 1.0.0
  license:
    name: Proprietary
servers:
  - url: https://api.indoralabs.com
security:
  - apiKeyAuth: []
tags:
  - name: Search
  - name: Uploads
  - name: Files
  - name: Redactions
  - name: Detections
  - name: Cases
  - name: Audit
  - name: Auth
  - name: Embeddings
  - name: Policy
paths:
  /search/semantic:
    post:
      tags:
        - Search
      summary: Hybrid search across uploaded content
      description: >-
        Perform a hybrid semantic + keyword search across uploaded files. This
        endpoint allows you to query text extracted from video transcripts,
        audio transcriptions, and documents. It blends semantic embeddings with
        BM25 keyword scoring to return results that are both contextually
        relevant and textually precise. You can optionally restrict results by
        case, file, or date range. Ideal for investigations, discovery, and
        compliance queries.
      requestBody:
        required: true
        content:
          application/json:
            schema:
              $ref: '#/components/schemas/SearchRequest'
      responses:
        '200':
          description: Search results
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/SearchResponse'
        '400':
          description: Bad request
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/Error'
        '401':
          description: Unauthorized
components:
  schemas:
    SearchRequest:
      type: object
      required:
        - q
      properties:
        q:
          type: string
          description: Query string. Supports hybrid semantic + keyword search.
        caseId:
          type: string
          format: uuid
          description: Filter results to a specific case.
        fileId:
          type: string
          format: uuid
          description: Filter to a single file.
        limit:
          type: integer
          default: 20
          minimum: 1
          maximum: 100
          description: Number of results to return.
        dateFrom:
          type: string
          format: date-time
          description: Lower bound for file create/update timestamps.
        dateTo:
          type: string
          format: date-time
          description: Upper bound for file create/update timestamps.
      example:
        q: suspect red sedan
        caseId: c0a80101-0000-0000-0000-000000000001
        limit: 20
    SearchResponse:
      type: object
      properties:
        results:
          type: array
          items:
            $ref: '#/components/schemas/SearchResult'
          description: Ordered search results.
      example:
        results:
          - fileId: f2a1...
            snippet: ...
            score: 0.83
    Error:
      type: object
      required:
        - error
        - message
      properties:
        error:
          type: string
          description: Short error code or category.
        message:
          type: string
          description: Human-readable error explanation.
        details:
          type: object
          description: Optional structured error details for debugging.
      example:
        error: BadRequest
        message: Missing required parameter 'fileId'.
        details:
          param: fileId
    SearchResult:
      type: object
      properties:
        fileId:
          type: string
          format: uuid
          description: Matched file id.
        snippet:
          type: string
          description: Text snippet with highlights around the match.
        score:
          type: number
          description: Relevance score (higher is more relevant).
        metadata:
          type: object
          description: Arbitrary metadata for the hit (page, timestamp, etc.).
      example:
        fileId: f2a1d57e-9f7a-4d1b-8ef5-3b8f6d5a1a9c
        snippet: ...red sedan parked on 3rd...
        score: 0.83
        metadata:
          page: 12
  securitySchemes:
    apiKeyAuth:
      type: apiKey
      in: header
      name: x-api-key

````