Memories Serve API

The Serve API from Memories — 30 operation(s) for serve.

Operations 30

POST /serve/api/v1/memories/add Add Memory #
GET /serve/api/v1/get_audio_transcription Get Audio Transcription #
POST /serve/api/v1/delete_videos Delete Videos #
POST /serve/api/v1/download Download Video #
GET /serve/api/v1/get_video_ids_by_task_id Get Task Status #
POST /serve/api/v1/memories List Memories #
GET /serve/api/v1/get_metadata Get Video Metadata #
POST /serve/api/v1/list_videos List Videos #
POST /serve/api/v1/chat_personal_stream Chat with Personal Media Entities #
POST /serve/api/v1/search_clips_by_image Search Clips by Image #
GET /serve/api/v1/search_audio_transcripts Search from Audio #
POST /serve/api/v1/memories/search Search Memories #
POST /serve/api/v1/search Search from Private Library #
POST /serve/api/v1/search_public Search from Public Video Sources #
POST /serve/api/v1/search_public_similar_images Search Public Videos by Image #
POST /serve/api/v1/upload_img Upload Image from File #
POST /serve/api/v1/scraper Upload Video from Platform Creator URL #
POST /serve/api/v1/upload Upload Video from File #
POST /serve/api/v1/scraper_tag Upload Video from Hashtag #
POST /serve/api/v1/scraper_url Upload Video from Platform URL #
POST /serve/api/v1/upload_url Upload Video from URL #
POST /serve/api/v1/chat Video Chat #
POST /serve/api/v1/marketer_chat Video Marketer #
GET /serve/api/v1/get_video_caption Get Video Caption #
GET /serve/api/v1/folders List Folders #
POST /serve/api/v1/folders/create Create Folder #
POST /serve/api/v1/folders/rename Rename Folder #
POST /serve/api/v1/folders/delete Delete Folder #
GET /serve/api/v1/folders/videos List Videos in Folder #
POST /serve/api/v1/folders/move Move Videos to Folder #

Work with this as data

Every API here is available over the APIs.io API and to AI agents over MCP.

MCP server

One button, every client — Claude, Cursor, VS Code and the rest.

https://apis.io/mcp

Tools for apis

7 MCP tools reach this
  • find_apisBrowse and filter every API in the catalog.
  • get_api_artifactsOne API's artifacts, grouped by type.
  • get_openapiThe primary OpenAPI for this API.
  • find_similar_apisAPIs that look like this one.
  • apis_io_searchSTART HERE — APIs, providers and tags for one query, each with its total.
  • resolveTurn a domain, URL or GitHub org into the provider it belongs to.
  • find_cohortsEvery scored population of providers in the catalog.
All 92 tools →

Call it yourself

curl for this page
This API
curl "https://apis.io/api/v1/apis/memories-serve-api"
All apis
curl "https://apis.io/api/v1/apis?limit=25"

Discovery needs no key. Ratings and market analysis are Pro.

Get an API key

Free tier, no email required.

A second provider on the same verified email joins the account you already have.

OpenAPI Specification

memories-serve-api-openapi.yml Raw ↑
openapi: 3.2.0
info:
  title: Memories Platform API (Docs Mapping) Serve API
  version: v1
  description: OpenAPI mapping used by Mintlify Try it for the platform docs.
servers:
- url: https://api.memories.ai
security:
- ApiKeyAuth: []
tags:
- name: Serve
paths:
  /serve/api/v1/memories/add:
    post:
      summary: Add Memory
      operationId: add_memory
      requestBody:
        required: true
        content:
          application/json:
            schema:
              $ref: '#/components/schemas/AddMemoryRequest'
      responses:
        '200':
          $ref: '#/components/responses/SuccessJson'
      tags:
      - Serve
  /serve/api/v1/get_audio_transcription:
    get:
      summary: Get Audio Transcription
      operationId: get_audio_transcription
      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'
      tags:
      - Serve
  /serve/api/v1/delete_videos:
    post:
      summary: Delete Videos
      operationId: delete_videos
      requestBody:
        required: true
        content:
          application/json:
            schema:
              $ref: '#/components/schemas/DeleteVideosRequest'
            example:
            - VI1234567890
            - VI0987654321
      responses:
        '200':
          $ref: '#/components/responses/SuccessJson'
      tags:
      - Serve
  /serve/api/v1/download:
    post:
      summary: Download Video
      operationId: download_video
      requestBody:
        required: true
        content:
          application/json:
            schema:
              $ref: '#/components/schemas/DownloadVideoRequest'
      responses:
        '200':
          $ref: '#/components/responses/BinaryDownloadResponse'
      tags:
      - Serve
  /serve/api/v1/get_video_ids_by_task_id:
    get:
      summary: Get Task Status
      operationId: get_task_status
      parameters:
      - name: task_id
        in: query
        required: true
        schema:
          type: string
        description: The task ID returned by an upload or scraping request.
      responses:
        '200':
          $ref: '#/components/responses/SuccessJson'
      tags:
      - Serve
  /serve/api/v1/memories:
    post:
      summary: List Memories
      operationId: list_memories
      requestBody:
        required: true
        content:
          application/json:
            schema:
              $ref: '#/components/schemas/ListMemoriesRequest'
      responses:
        '200':
          $ref: '#/components/responses/SuccessJson'
      tags:
      - Serve
  /serve/api/v1/get_metadata:
    get:
      summary: Get Video Metadata
      operationId: get_video_metadata
      parameters:
      - name: video_no
        in: query
        required: true
        schema:
          type: string
        example: VI606404158946574336
        description: Video identifier. Must be non-empty.
      responses:
        '200':
          description: Successful response
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/GetMetadataResponse'
      tags:
      - Serve
  /serve/api/v1/list_videos:
    post:
      summary: List Videos
      operationId: list_videos
      requestBody:
        required: true
        content:
          application/json:
            schema:
              $ref: '#/components/schemas/ListVideosRequest'
      responses:
        '200':
          description: Successful response
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/ListVideosResponse'
      tags:
      - Serve
  /serve/api/v1/chat_personal_stream:
    post:
      summary: Chat with Personal Media Entities
      operationId: chat_personal_stream
      requestBody:
        required: true
        content:
          application/json:
            schema:
              $ref: '#/components/schemas/PersonalMediaChatRequest'
      responses:
        '200':
          $ref: '#/components/responses/SseOrJsonResponse'
      tags:
      - Serve
  /serve/api/v1/search_clips_by_image:
    post:
      summary: Search Clips by Image
      operationId: search_clips_by_image
      requestBody:
        required: true
        content:
          multipart/form-data:
            schema:
              $ref: '#/components/schemas/SearchClipsByImageRequest'
      responses:
        '200':
          description: Successful response
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/SearchClipsByImageResponse'
      tags:
      - Serve
  /serve/api/v1/search_audio_transcripts:
    get:
      summary: Search from Audio
      operationId: search_audio_transcripts
      parameters:
      - name: query
        in: query
        required: true
        schema:
          type: string
        description: Audio transcript search text (LIKE match). Must be non-empty.
      - name: page
        in: query
        schema:
          type: integer
          default: 1
          minimum: 1
        description: One-based page number. Must be > 0.
      - name: page_size
        in: query
        schema:
          type: integer
          default: 100
          minimum: 1
          maximum: 500
        description: Results per page. Range 1-500.
      responses:
        '200':
          description: Successful response
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/SearchAudioTranscriptsResponse'
      tags:
      - Serve
  /serve/api/v1/memories/search:
    post:
      summary: Search Memories
      operationId: search_memories
      requestBody:
        required: true
        content:
          application/json:
            schema:
              $ref: '#/components/schemas/SearchMemoriesRequest'
      responses:
        '200':
          $ref: '#/components/responses/SuccessJson'
      tags:
      - Serve
  /serve/api/v1/search:
    post:
      summary: Search from Private Library
      operationId: search_private_library
      requestBody:
        required: true
        content:
          application/json:
            schema:
              $ref: '#/components/schemas/SearchPrivateRequest'
      responses:
        '200':
          description: Successful response
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/SearchPrivateResponse'
      tags:
      - Serve
  /serve/api/v1/search_public:
    post:
      summary: Search from Public Video Sources
      operationId: search_public_library
      requestBody:
        required: true
        content:
          application/json:
            schema:
              $ref: '#/components/schemas/SearchPublicRequest'
      responses:
        '200':
          description: Successful response
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/SearchPublicResponse'
      tags:
      - Serve
  /serve/api/v1/search_public_similar_images:
    post:
      summary: Search Public Videos by Image
      operationId: search_public_similar_images
      requestBody:
        required: true
        content:
          multipart/form-data:
            schema:
              $ref: '#/components/schemas/SearchSimilarImagesRequest'
      responses:
        '200':
          description: Successful response
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/SearchSimilarImagesResponse'
      tags:
      - Serve
  /serve/api/v1/upload_img:
    post:
      summary: Upload Image from File
      operationId: upload_image_from_file
      requestBody:
        required: true
        content:
          multipart/form-data:
            schema:
              $ref: '#/components/schemas/UploadImageRequest'
      responses:
        '200':
          description: Successful response
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/UploadImageResponse'
      tags:
      - Serve
  /serve/api/v1/scraper:
    post:
      summary: Upload Video from Platform Creator URL
      operationId: upload_video_from_creator_url
      requestBody:
        required: true
        content:
          application/json:
            schema:
              $ref: '#/components/schemas/UploadVideoFromCreatorRequest'
      responses:
        '200':
          $ref: '#/components/responses/SuccessJson'
      tags:
      - Serve
  /serve/api/v1/upload:
    post:
      summary: Upload Video from File
      operationId: upload_video_from_file
      requestBody:
        required: true
        content:
          multipart/form-data:
            schema:
              $ref: '#/components/schemas/UploadVideoRequest'
      responses:
        '200':
          description: Successful response
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/UploadVideoResponse'
      tags:
      - Serve
  /serve/api/v1/scraper_tag:
    post:
      summary: Upload Video from Hashtag
      operationId: upload_video_from_hashtag
      requestBody:
        required: true
        content:
          application/json:
            schema:
              $ref: '#/components/schemas/UploadVideoFromHashtagRequest'
      responses:
        '200':
          $ref: '#/components/responses/SuccessJson'
      tags:
      - Serve
  /serve/api/v1/scraper_url:
    post:
      summary: Upload Video from Platform URL
      operationId: upload_video_from_platform_url
      requestBody:
        required: true
        content:
          application/json:
            schema:
              $ref: '#/components/schemas/UploadVideoFromPlatformUrlRequest'
      responses:
        '200':
          description: Successful response
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/ScraperTaskResponse'
      tags:
      - Serve
  /serve/api/v1/upload_url:
    post:
      summary: Upload Video from URL
      operationId: upload_video_from_url
      requestBody:
        required: true
        content:
          application/x-www-form-urlencoded:
            schema:
              $ref: '#/components/schemas/UploadVideoFromUrlRequest'
      responses:
        '200':
          description: Successful response
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/UploadVideoResponse'
      tags:
      - Serve
  /serve/api/v1/chat:
    post:
      summary: Video Chat
      operationId: video_chat
      requestBody:
        required: true
        content:
          application/json:
            schema:
              $ref: '#/components/schemas/VideoChatRequest'
      responses:
        '200':
          $ref: '#/components/responses/SuccessJson'
      tags:
      - Serve
  /serve/api/v1/marketer_chat:
    post:
      summary: Video Marketer
      operationId: video_marketer
      requestBody:
        required: true
        content:
          application/json:
            schema:
              $ref: '#/components/schemas/VideoMarketerRequest'
      responses:
        '200':
          $ref: '#/components/responses/SuccessJson'
      tags:
      - Serve
  /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'
      tags:
      - Serve
  /serve/api/v1/folders:
    get:
      summary: List Folders
      operationId: list_folders
      description: List all folders in your account.
      responses:
        '200':
          description: Successful response
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/FolderListResponse'
      tags:
      - Serve
  /serve/api/v1/folders/create:
    post:
      summary: Create Folder
      operationId: create_folder
      requestBody:
        required: true
        content:
          application/x-www-form-urlencoded:
            schema:
              type: object
              required:
              - name
              properties:
                name:
                  type: string
                  maxLength: 100
                  example: my-project
                  description: Folder name. Max 100 chars, unique within your account.
      responses:
        '200':
          description: Successful response
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/FolderItemResponse'
      tags:
      - Serve
  /serve/api/v1/folders/rename:
    post:
      summary: Rename Folder
      operationId: rename_folder
      requestBody:
        required: true
        content:
          application/x-www-form-urlencoded:
            schema:
              type: object
              required:
              - folder_id
              - new_name
              properties:
                folder_id:
                  type: integer
                  example: 671631448308117500
                  description: Folder id to rename. Must be > 0 and belong to your account.
                new_name:
                  type: string
                  maxLength: 100
                  example: renamed-project
      responses:
        '200':
          description: Successful response
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/FolderItemResponse'
      tags:
      - Serve
  /serve/api/v1/folders/delete:
    post:
      summary: Delete Folder
      operationId: delete_folder
      requestBody:
        required: true
        content:
          application/x-www-form-urlencoded:
            schema:
              type: object
              required:
              - folder_id
              properties:
                folder_id:
                  type: integer
                  example: 671631448308117500
                  description: Folder id to delete. Must be > 0 and belong to your account. Fails if it contains parsed videos.
      responses:
        '200':
          description: Successful response
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/GenericJsonResponse'
      tags:
      - Serve
  /serve/api/v1/folders/videos:
    get:
      summary: List Videos in Folder
      operationId: list_folder_videos
      parameters:
      - name: folder_id
        in: query
        required: true
        schema:
          type: integer
        example: 671631448308117500
        description: Folder to list. -1 Default folder, -2 legacy API folder, or a folder that belongs to your account.
      - name: page
        in: query
        schema:
          type: integer
          default: 1
        description: One-based page number.
      - name: page_size
        in: query
        schema:
          type: integer
          default: 20
        description: Items per page.
      responses:
        '200':
          description: Successful response
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/ListVideosResponse'
      tags:
      - Serve
  /serve/api/v1/folders/move:
    post:
      summary: Move Videos to Folder
      operationId: move_videos_to_folder
      requestBody:
        required: true
        content:
          application/json:
            schema:
              type: object
              required:
              - folder_id
              - video_nos
              properties:
                folder_id:
                  type: integer
                  example: 671631448308117500
                  description: Target folder id. -1 = Default folder. Must already exist and belong to your account (not auto-created).
                video_nos:
                  type: array
                  items:
                    type: string
                  maxItems: 500
                  example:
                  - VI671631448308117504
                  description: Video identifiers to move. Max 500 per request.
      responses:
        '200':
          description: Successful response
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/GenericJsonResponse'
      tags:
      - Serve
components:
  schemas:
    FolderItem:
      type: object
      properties:
        folder_id:
          type: integer
          example: 671631448308117500
          description: Folder identifier. -1 = Default folder; -2 = legacy API folder (read-only).
        folder_name:
          type: string
          example: my-project
    SearchClipsByImageResponse:
      type: object
      properties:
        code:
          type: string
          example: '0000'
        msg:
          type: string
          example: success
        data:
          type: array
          items:
            type: object
            properties:
              start_time:
                type: number
                format: double
                example: 12.5
                description: Clip start time in seconds.
              end_time:
                type: number
                format: double
                example: 18.2
                description: Clip end time in seconds.
              score:
                type: number
                format: double
                example: 0.8631
                description: Similarity score.
              video_bucket:
                type: string
                description: GCS bucket of the target video file. Omitted when the storage location cannot be resolved.
              video_blob:
                type: string
                description: GCS blob path of the target video. Use with video_bucket at GET /serve/api/v2/download to fetch the file directly.
        success:
          type: boolean
          example: true
        failed:
          type: boolean
          example: false
      example:
        code: '0000'
        msg: success
        data:
        - start_time: 12.5
          end_time: 18.2
          score: 0.8631
          video_bucket: mavi-resource
          video_blob: VI576925607808602112.mp4
        - start_time: 42
          end_time: 47.8
          score: 0.8124
          video_bucket: mavi-resource
          video_blob: VI576925607808602112.mp4
        success: true
        failed: false
    UploadVideoResponse:
      type: object
      properties:
        code:
          type: string
          example: '0000'
          description: Business status code. 0000 indicates success.
        msg:
          type: string
          example: success
        data:
          type: object
          properties:
            videoNo:
              type: string
              example: VI568102998803353600
              description: Unique identifier of the uploaded video. Use this for all subsequent operations.
            videoName:
              type: string
              example: 1be6a69f3c6e49bf986235d68807ab1f
              description: Internal stored name of the video.
            videoStatus:
              type: string
              example: UNPARSE
              description: Initial processing status. UNPARSE immediately after upload; transitions to parsing asynchronously.
            uploadTime:
              type: string
              example: '1744905509814'
              description: Upload timestamp in milliseconds since epoch (as string).
          example:
            videoNo: VI568102998803353600
            videoName: 1be6a69f3c6e49bf986235d68807ab1f
            videoStatus: UNPARSE
            uploadTime: '1744905509814'
        success:
          type: boolean
          example: true
        failed:
          type: boolean
          example: false
      example:
        code: '0000'
        msg: success
        data:
          videoNo: VI568102998803353600
          videoName: 1be6a69f3c6e49bf986235d68807ab1f
          videoStatus: UNPARSE
          uploadTime: '1744905509814'
        success: true
        failed: false
    SearchSimilarImagesRequest:
      type: object
      properties:
        file:
          type: string
          format: binary
          description: 'Query image. Allowed extensions: .jpg/.jpeg/.png/.gif/.bmp/.webp. Content-Type must start with image/. Max 20 MB.'
        type:
          type: string
          enum:
          - TIKTOK
          - YOUTUBE
          - INSTAGRAM
          default: TIKTOK
          description: Source platform to search within.
        similarity:
          type: number
          format: double
          minimum: 0
          maximum: 1
          default: 0.85
          description: Minimum similarity threshold (0-1). Results below this score are filtered out.
      required:
      - file
    UploadVideoFromUrlRequest:
      type: object
      properties:
        url:
          type: string
          format: uri
          example: https://example.com/test_video.mp4
          description: Direct URL of the video. Must be reachable via unauthenticated HTTP GET.
        callback:
          type: string
          format: uri
          maxLength: 299
          example: https://your.app/callback
          description: Callback URL invoked when the video moves to the parsing stage. Max 299 characters.
        datetime_taken:
          type: string
          example: '2025-10-20 11:00:00'
          description: Capture time in format yyyy-MM-dd HH:mm:ss.
        camera_model:
          type: string
          maxLength: 200
          example: Canon EOS 5D
          description: Camera/device model. Max 200 characters.
        latitude:
          type: number
          format: double
          example: 66.66
        longitude:
          type: number
          format: double
          example: 66.66
        tags:
          type: array
          items:
            type: string
          maxItems: 20
          example:
          - test1
          - test2
          description: User-defined tags. Max 20. The server automatically appends an 'api' tag.
        retain_original_video:
          type: boolean
          default: true
          description: Whether to retain the original source video. Defaults to true.
        video_transcription_prompt:
          type: string
          example: Focus on the speaker and major scene changes.
        folder_id:
          type: integer
          description: Optional target folder for the upload. Omit or pass -1 for the account's Default folder (auto-created on first use). A positive id must belong to your account.
          example: 671631448308117500
      required:
      - url
    UploadVideoFromCreatorRequest:
      type: object
      properties:
        username:
          type: string
          example: https://www.tiktok.com/@cutshall73
        scraper_cnt:
          type: integer
          default: 4
        callback_url:
          type: string
          format: uri
          example: https://your.app/callback
        folder_id:
          type: integer
          description: Optional target folder for the upload. Omit or pass -1 for the account's Default folder (auto-created on first use). A positive id must belong to your account.
          example: 671631448308117500
      required:
      - username
    SearchPublicRequest:
      type: object
      properties:
        search_param:
          type: string
          example: Find sprint race with Usain Bolt
          description: Natural-language search query. Must be non-empty.
        search_type:
          type: string
          enum:
          - BY_VIDEO
          - BY_AUDIO
          default: BY_CLIP
          example: BY_VIDEO
          description: Search modality. Only BY_VIDEO and BY_AUDIO are accepted here; BY_CLIP and BY_IMAGE are explicitly rejected. BY_VIDEO is treated as BY_CLIP internally.
        type:
          type: string
          enum:
          - TIKTOK
          - YOUTUBE
          - INSTAGRAM
          default: TIKTOK
          description: Source platform to search within.
        top_k:
          type: integer
          default: 100
          minimum: 1
          maximum: 1000
          description: Maximum number of results to return. Range 1-1000.
        filtering_level:
          type: string
          enum:
          - low
          - medium
          - high
          example: medium
          description: Similarity-score filter. low=0.15, medium=0.225, high=0.4.
      required:
      - search_param
    ListVideosRequest:
      type: object
      properties:
        page:
          type: integer
          default: 1
          minimum: 1
          description: One-based page number. Must be > 0.
        size:
          type: integer
          default: 200
          minimum: 1
          description: Items per page. Must be > 0.
        video_name:
          type: string
          description: Exact-match filter on the stored video name.
        video_no:
          type: string
          description: Exact-match filter on a single video identifier.
        video_nos:
          type: array
          items:
            type: string
          description: Restrict results to a specific set of video identifiers. Combined via AND with other filters; intersected with the metadata-filter result when both are used.
          example:
          - VI606404158946574336
          - VI606402870447996928
        status:
          type: string
          enum:
          - PARSE
          - UNPARSE
          - FAILED
          description: Filter by processing status.
        camera_model:
          type: string
          example: Canon EOS 5D
          description: 'Metadata filter: exact-match on the camera_model supplied at upload time.'
        tag:
          type: string
          example: holiday
          description: 'Metadata filter: single tag that must be present on the video.'
        datetime_taken:
          type: integer
          format: int64
          example: 1729388400000
          description: 'Metadata filter: minimum capture timestamp in milliseconds since epoch. Matches videos whose capture_timestamp >= this value.'
        latitude:
          type: number
          format: double
          example: 39.9042
          description: 'Metadata filter: decimal latitude. Must be supplied together with longitude.'
        longitude:
          type: number
          format: double
          example: 116.4074
          description: 'Metadata filter: decimal longitude. Must be supplied together with latitude. ~20 km geo-within radius.'
        folder_id:
          type: integer
          description: Optional. Restrict results to a single folder. Omit to query across your entire account. -1 is the Default folder; a positive id must belong to your account.
          example: 671631448308117500
    SearchSimilarImagesResponse:
      type: object
      properties:
        code:
          type: string
          example: '0000'
        msg:
          type: string
          example: success
        data:
          type: array
          items:
            type: object
            properties:
              videoNo:
                type: string
                example: PI-600947902470296459
              videoName:
                type: string
                example: Sample public video title
              startTime:
                type: string
                example: '79'
              endTime:
                type: string
                example: '82'
              score:
                type: number
                format: double
                example: 0.8631
              video_bucket:
                type: string
                description: GCS bucket of our cached copy of the public video. Omitted when the storage location cannot be resolved.
              video_blob:
                type: string
                description: GCS blob path of the cached video. Use with video_bucket at GET /serve/api/v2/download to fetch the file directly.
              keyframe_bucket:
                type: string
                description: GCS bucket of the matched keyframe image.
              keyframe_blob:
                type: string
                description: GCS blob path of the matched keyframe image.
        success:
          type: boolean
          example: true
        failed:
          type: boolean
          example: false
      example:
        code: '0000'
        msg: success
        data:
        - videoNo: PI-600947902470296459
          videoName: Sample public video title
          startTime: '79'
          endTime: '82'
          score: 0.8631
          video_bucket: mavi-public-video
          video_blob: <scraper-id>.mp4
          keyframe_bucket: mavi-public-keyframe
          keyframe_blob: <uuid>/keyframe-000079.jpg
        - videoNo: PI-600947902470296460
          videoName: Another public video
          startTime: '32'
          endTime: '35'
          score: 0.8712
          video_bucket: mavi-public-video
          video_blob: <scraper-id2>.mp4
          keyframe_bucket: mavi-public-keyframe
          keyframe_blob: <uuid2>/keyframe-000032.jpg
        success: true
        failed: false
    SearchAudioTranscriptsResponse:
      type: object
      properties:
        code:
          type: string
          example: '0000'
        msg:
          type: string
          example: success
        data:
          type: object
          properties:
            current_page:
              type: integer
              example: 1
            page_size:
              type: integer
              example: 100
            total_count:
              type: integer
              format: int64
              example: 2
            videos:
              type: array
              items:
                type: object
                properties:
                  videoNo:
                    type: string
                    example: VI576925607808602112
                  videoName:
                    type: string
                    example: '1920447021987282945'
                  startTime:
                    type: string
                    example: '13'
                    description: Matched segment start time in seconds.
                  audio_ts:
                    type: string
                    example: '... where is the love ...'
                    description: Matched transcript text.
                  video_bucket:
                    type: string
                    description: GCS bucket of the original video file. Omitted when the storage location cannot be resolved.
                  video_blob:
                    type: string
                    description: GCS blob (object) path of the original video. Use it with video_bucket at GET /serve/api/v2/download to fetch the file directly.
        success:
          type: boolean
          example: true
        failed:
          type: boolean
          example: false
      example:
        code: '0000'
        msg: success
        data:
          current_page: 1
          page_size: 100
          total_count: 2
          videos:
          - videoNo: VI576925607808602112
            videoName: '1920447021987282945'
            startTime: '13'
            audio_ts: '... where is the love ...'
            video_bucket: mavi-resource
            video_blob: VI576925607808602112.mp4
        success: true
        failed: false
    SearchPrivateRequest:
      type: object
      properties:
        search_param:
          type: string
          example: boat in the ocean
          description: Natural-language search query. Must be non-empty.
        search_type:
          type: string
          enum:
          - BY_VIDEO
          - BY_CLIP
          - BY_AUDIO
          - BY_IMAGE
          - BY_CAPTION
          default: BY_CLIP
          example: BY_CLIP
          description: Search modality. BY_VIDEO is treated as BY_CLIP internally. BY_CAPTION performs vector search over the video_transcript table and returns a different item shape (see response).
        top_k:
          type: integer
          default: 100
          minimum: 1
          maximum: 1000
          description: Maximum number of results to return. Range 1-1000 for BY_CLIP/BY_AUDIO/BY_I

# --- truncated at 32 KB (62 KB total) ---
# Full source: https://raw.githubusercontent.com/api-evangelist/memories/refs/heads/main/openapi/memories-serve-api-openapi.yml