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

# Find visual moments

> Search project footage for visual moments. Searches cached visual understanding, tags, transcript text, and embeddings and returns timestamped matches. The API forwards the authenticated request to the cockpit capability, which owns project tenancy and billing.



## OpenAPI

````yaml /openapi.json post /v1/video/visual-search
openapi: 3.1.0
info:
  title: Sigmora API
  version: 1.0.0
  description: >-
    The priced, versioned public API. Every call authenticates with a workspace
    API key (`Authorization: Bearer sk_live_…`), names the project it files its
    output under, and reports what it cost. `GET /v1/capabilities` answers what
    this deployment can serve right now and at what price; anything it reports
    as unavailable answers 503 `capability_unavailable` rather than 404.
servers:
  - url: https://api.sigmora.org
security:
  - bearerAuth: []
tags:
  - name: Meta
    description: What this deployment serves, what it costs, and what you have spent.
  - name: Projects
    description: The container every capability files its output under.
  - name: Sessions
    description: Durable bindings between an external harness session and one project.
  - name: Assets
    description: 'Project media: direct-to-storage uploads, imports, ingest and transcripts.'
  - name: Jobs
    description: Where every asynchronous capability is collected, whatever produced it.
  - name: Text
    description: Scripts, research, articles, translation and question sets.
  - name: Video
    description: Narrated renders, footage edits, shorts and moment selection.
  - name: UGC
    description: >-
      Creator-led vertical videos: AI creators, their faces and voices, frames
      and clips.
  - name: Editing
    description: >-
      Sigma, the editor: conversational turns, granular transcript edits,
      approvals.
  - name: 3D
    description: Animated 3D renders from a description or a photograph.
  - name: Image
    description: Thumbnails, sized for the platform they are posted to.
  - name: Audio
    description: Generated music and audio engineering in Audiotool projects.
  - name: Publishing
    description: Connected destinations and queued posts.
  - name: Webhooks
    description: Signed, at-least-once delivery of job and publishing events.
  - name: Workflows
    description: Context snapshots, versioned recipes, costed proposals and their runs.
  - name: Agents
    description: Describe an outcome and let a bounded plan of capabilities run.
  - name: Research
    description: >-
      Observed hooks, creator outliers and production briefs from saved
      analyses.
  - name: Themes
    description: The canonical content taxonomy, and the niche profiles built on it.
  - name: Signals
    description: Evidence-backed trends and scored viral content.
  - name: Discovery
    description: Compiled watch plans, their runs, and source freshness.
  - name: Watchlist
    description: 'Accounts you watch: their usual reach and the posts that beat it.'
  - name: Performance
    description: Your own channels' videos against their usual, and fixes to live videos.
  - name: Autopilot
    description: The durable trend-to-distribution workflow and its checkpoints.
  - name: Campaigns
    description: Distribution records shared by the API, the dashboard and autopilot.
  - name: Brands
    description: >-
      Cross-platform identities with their own voice, rules and publishing
      commitments.
  - name: Products
    description: What a campaign promotes.
paths:
  /v1/video/visual-search:
    post:
      tags:
        - Video
      summary: Find visual moments
      description: >-
        Search project footage for visual moments. Searches cached visual
        understanding, tags, transcript text, and embeddings and returns
        timestamped matches. The API forwards the authenticated request to the
        cockpit capability, which owns project tenancy and billing.
      operationId: postVideoVisualSearch
      parameters:
        - name: idempotency-key
          in: header
          required: false
          description: >-
            Optional durable retry key. Reuse only for the identical logical
            request; a different payload returns conflict.
          schema:
            description: >-
              Optional durable retry key. Reuse only for the identical logical
              request; a different payload returns conflict.
            type: string
            minLength: 1
            maxLength: 255
        - name: x-sigmora-quote-only
          in: header
          required: false
          description: Send 1 to get the price and balance without running anything.
          schema:
            description: Send 1 to get the price and balance without running anything.
            type: string
            const: '1'
        - name: x-sigmora-max-credits
          in: header
          required: false
          description: >-
            The approved price; a call that would cost more is refused and
            nothing is charged.
          schema:
            description: >-
              The approved price; a call that would cost more is refused and
              nothing is charged.
            type: string
            pattern: ^\d+$
      requestBody:
        required: true
        content:
          application/json:
            schema:
              type: object
              properties:
                projectId:
                  type: string
                  minLength: 1
                  maxLength: 200
                  description: Project containing the footage to search.
                query:
                  type: string
                  minLength: 1
                  maxLength: 400
                  description: Visual moment to find in the footage.
                assetIds:
                  description: >-
                    Project asset ids to restrict the search to; omit to search
                    all video assets.
                  minItems: 1
                  maxItems: 50
                  type: array
                  items:
                    type: string
                    minLength: 1
                    maxLength: 200
                topK:
                  default: 10
                  description: >-
                    Maximum number of timestamped visual matches to return;
                    defaults to 10.
                  type: integer
                  minimum: 1
                  maximum: 100
              required:
                - projectId
                - query
              additionalProperties: {}
            example:
              projectId: prj_9x2a4c
              query: the presenter holds the phone up to the camera
              topK: 5
      responses:
        '200':
          description: Success.
          content:
            application/json:
              schema:
                type: object
                properties:
                  success:
                    type: boolean
                    const: true
                  hits:
                    type: array
                    items:
                      type: object
                      properties:
                        sourceId:
                          type: string
                        contentHash:
                          type: string
                        startSecond:
                          type: number
                        endSecond:
                          type: number
                        description:
                          type: string
                        tags:
                          type: array
                          items:
                            type: string
                        hasMeaningfulSpeech:
                          type:
                            - boolean
                            - 'null'
                        significance:
                          type: object
                          properties:
                            score:
                              type: number
                            reason:
                              type: string
                          required:
                            - score
                            - reason
                        transcript:
                          type: string
                        score:
                          type: number
                        assetId:
                          type: string
                        assetTitle:
                          type: string
                      required:
                        - sourceId
                        - contentHash
                        - startSecond
                        - endSecond
                        - description
                        - tags
                        - hasMeaningfulSpeech
                        - significance
                        - score
                      additionalProperties: {}
                  sourceCount:
                    type: integer
                    minimum: -9007199254740991
                    maximum: 9007199254740991
                  segmentCount:
                    type: integer
                    minimum: -9007199254740991
                    maximum: 9007199254740991
                  cachedIndex:
                    type: boolean
                  projectId:
                    type: string
                  credits:
                    type: number
                  creditBalance:
                    type: number
                required:
                  - success
                  - hits
                  - sourceCount
                  - segmentCount
                  - cachedIndex
                  - projectId
                additionalProperties: {}
        '400':
          description: 'Failure. `code` is one of: invalid_request.'
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/Error'
        '401':
          description: 'Failure. `code` is one of: unauthorized.'
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/Error'
        '402':
          description: 'Failure. `code` is one of: insufficient_credits, budget_capped.'
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/Error'
        '403':
          description: 'Failure. `code` is one of: forbidden, origin_not_allowed.'
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/Error'
        '404':
          description: 'Failure. `code` is one of: not_found.'
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/Error'
        '409':
          description: 'Failure. `code` is one of: conflict.'
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/Error'
        '413':
          description: 'Failure. `code` is one of: payload_too_large.'
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/Error'
        '429':
          description: 'Failure. `code` is one of: rate_limited.'
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/Error'
        '500':
          description: 'Failure. `code` is one of: upstream_error, internal_error.'
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/Error'
        '503':
          description: >-
            Failure. `code` is one of: capability_unavailable,
            upstream_unavailable.
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/Error'
components:
  schemas:
    Error:
      type: object
      required:
        - success
        - error
        - code
      properties:
        success:
          const: false
        error:
          type: string
          description: >-
            Human-readable. Copy may change between releases — do not match on
            it.
        code:
          type: string
          enum:
            - invalid_request
            - unauthorized
            - forbidden
            - origin_not_allowed
            - not_found
            - conflict
            - payload_too_large
            - insufficient_credits
            - budget_capped
            - content_not_cleared
            - rate_limited
            - capability_unavailable
            - upstream_unavailable
            - upstream_error
            - internal_error
          description: Stable machine-readable cause. Branch on this.
        details:
          description: Optional structured context, e.g. the credits shortfall.
        requestId:
          type: string
          description: >-
            Identifies this request in our logs. Include it when you contact
            support.
        timestamp:
          type: string
          format: date-time
          description: When the failure was produced.
  securitySchemes:
    bearerAuth:
      type: http
      scheme: bearer
      description: A workspace API key.

````

This documentation is built and hosted on [Mintlify](https://mintlify.com), a developer documentation platform.