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

# Get Video Caption

> Retrieve the visual (scene-by-scene) caption auto-generated for a video in your Private Video Library.

<Info>
  **Product**: Visual Search
  **Use case**: Upload videos and images, auto-index them, then search by natural language, image, or transcript phrase
  **Host**: `https://api.memories.ai/serve/api/v1`
  **Auth**: `Authorization: sk-mavi-...` (no `Bearer` prefix)
</Info>

Retrieve the **visual caption** of a video — a chronological list of scene descriptions produced by the indexing pipeline. Each segment carries a time range and a natural-language description of what is happening on screen during that window. For the spoken-words transcription, use [Get Audio Transcription](/visual-search/audio-transcription).

## Prerequisites

* You have [created a memories.ai API key](/visual-search/create-your-key).
* The video has been uploaded via the [Upload API](/visual-search/upload-video-from-file) and finished parsing (`status: PARSE`).

## Endpoint

GET /serve/api/v1/get\_video\_caption

## Request Example

```python theme={null}
import requests

url = "https://api.memories.ai/serve/api/v1/get_video_caption"
headers = {"Authorization": "sk-mavi-..."}
params = {
    "video_no": "VI702915390254350336",
}
response = requests.get(url, headers=headers, params=params)
print(response.json())
```

## Query Parameters

<ParamField query="video_no" type="string" required>
  The video identifier returned by the upload API.
</ParamField>

## Response Example

```json theme={null}
{
  "code": "0000",
  "msg": "success",
  "data": {
    "videoNo": "VI702915390254350336",
    "transcriptions": [
      {
        "index": 0,
        "content": "A person's hand is seen holding a white object, possibly a phone, near a wooden door. The camera pans slightly to reveal a wall with coats hanging on a rack.",
        "startTime": "0",
        "endTime": "4"
      },
      {
        "index": 1,
        "content": "The camera moves past a wooden door, revealing a hallway with another door at the end. A laundry basket is visible on the right.",
        "startTime": "4",
        "endTime": "7"
      }
    ],
    "createTime": "1777047288621",
    "video_bucket": "mavi-resource",
    "video_blob": "VI702915390254350336.mp4"
  },
  "success": true,
  "failed": false
}
```

## Response Fields

<ResponseField name="code" type="string">
  Business status code. `0000` indicates success.
</ResponseField>

<ResponseField name="msg" type="string">
  Human-readable status message.
</ResponseField>

<ResponseField name="data.videoNo" type="string">
  Echo of the requested video identifier.
</ResponseField>

<ResponseField name="data.transcriptions" type="array">
  Ordered list of scene description segments covering the full video.
</ResponseField>

<ResponseField name="data.transcriptions[].index" type="integer">
  Zero-based index of the segment within the video.
</ResponseField>

<ResponseField name="data.transcriptions[].content" type="string">
  Natural-language description of what is visible on screen during this segment.
</ResponseField>

<ResponseField name="data.transcriptions[].startTime" type="string">
  Segment start time in seconds, returned as a string.
</ResponseField>

<ResponseField name="data.transcriptions[].endTime" type="string">
  Segment end time in seconds, returned as a string.
</ResponseField>

<ResponseField name="data.createTime" type="string">
  Upload-time timestamp of the underlying video, in milliseconds since epoch, returned as a string.
</ResponseField>

<ResponseField name="data.video_bucket" type="string">
  GCS bucket of the underlying video file. Omitted when the storage location cannot be resolved.
</ResponseField>

<ResponseField name="data.video_blob" type="string">
  GCS blob (object) path of the underlying video. Use it with `video_bucket` at `GET /serve/api/v2/download?bucket=&blob=` to fetch the file directly.
</ResponseField>

<ResponseField name="success" type="boolean">
  `true` when `code == "0000"`.
</ResponseField>

<ResponseField name="failed" type="boolean">
  Inverse of `success`.
</ResponseField>

## Notes & Limits

* **Availability**: `data.transcriptions` is populated by the indexing pipeline. If the video has not yet reached `status: PARSE`, the call may return `data: null` or an empty `transcriptions` array — poll [Get Metadata](/visual-search/get-metadata) until parsing completes before depending on the result.
* **Numeric strings**: `startTime`, `endTime`, and `createTime` are strings — cast with `int(...)` before arithmetic.
* **Rate limiting**: Subject to the standard Visual Search rate limits. See [Rate limits](/visual-search/rate-limits).


## OpenAPI

````yaml GET /serve/api/v1/get_video_caption
openapi: 3.1.0
info:
  title: Memories Platform API (Docs Mapping)
  version: v1
  description: OpenAPI mapping used by Mintlify Try it for the platform docs.
servers:
  - url: https://api.memories.ai
security:
  - ApiKeyAuth: []
paths:
  /serve/api/v1/get_video_caption:
    get:
      summary: Get Video Caption
      operationId: get_video_caption
      parameters:
        - name: video_no
          in: query
          required: true
          schema:
            type: string
          description: The unique video ID returned by the upload API.
      responses:
        '200':
          $ref: '#/components/responses/SuccessJson'
components:
  responses:
    SuccessJson:
      description: Successful response
      content:
        application/json:
          schema:
            $ref: '#/components/schemas/GenericJsonResponse'
  schemas:
    GenericJsonResponse:
      type: object
      properties:
        code:
          type:
            - string
            - integer
          example: '0000'
        msg:
          type: string
          example: success
        data:
          oneOf:
            - type: object
              additionalProperties: true
            - type: array
              items:
                type: object
                additionalProperties: true
            - type: string
            - type: 'null'
        success:
          type: boolean
          example: true
        failed:
          type: boolean
          example: false
      additionalProperties: true
  securitySchemes:
    ApiKeyAuth:
      type: apiKey
      in: header
      name: Authorization

````