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.
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)
Fetch the full metadata record for a single video in your Private Video Library — status, duration, resolution, GPS, camera model, and tags.
This is also the canonical way to poll indexing status after Upload Video or Upload Image — read data.status and wait for it to become PARSE.
Prerequisites
- You have created a memories.ai API key.
- You have uploaded the target video using the Upload API (metadata fields only become available after the video finishes parsing and its summary row is populated).
Endpoint
GET /serve/api/v1/get_metadata
Authentication
Pass your API key in the Authorization request header. Requests without a valid API key are rejected.
Authorization: sk-mavi-...
Request Example
import requests
url = "https://api.memories.ai/serve/api/v1/get_metadata"
params = {
"video_no": "VI606404158946574336",
"unique_id": "default"
}
headers = {"Authorization": "sk-mavi-..."}
response = requests.get(url, headers=headers, params=params)
print(response.json())
Query Parameters
The video identifier returned by the upload API (e.g. VI606404158946574336). Must be non-empty.
Scope identifier for the authenticated account (corresponds to the upload-time unique_id). Must be non-empty when explicitly provided.
Notes & Limits
- Rate limiting: The endpoint is protected by a per-account rate limit. Exceeding the limit returns an error indicating the request has exceeded the limit.
- Metadata availability: The capture-time metadata fields (
datetime_taken / camera_model / latitude / longitude) are only present when the corresponding value was supplied at upload and the video’s summary row has been written (i.e. after parsing completes). Videos not yet parsed return the basic fields only.
- Not found is not an error: If the video does not exist (or does not belong to this account), the response is
code: "0000", success: true, data: null — check data for None explicitly rather than relying on the status code.
- Numeric field types are inconsistent:
duration, size, and create_time are returned as strings; fps, width, height are returned as actual integers. Cast duration/size/create_time with int(...) before arithmetic.
Response Example
{
"code": "0000",
"msg": "success",
"data": {
"video_no": "VI702915390254350336",
"video_name": "NkdWNOrQByo",
"duration": "105",
"size": "7798243",
"status": "PARSE",
"create_time": "1777047288621",
"resolution_label": "720p",
"fps": 30,
"width": 640,
"height": 360,
"tags": ["living_room", "couch", "cat", "kitchen", "pov_laundry", "api"],
"bucket": "mavi-resource",
"blob": "VI702915390254350336.mp4"
},
"success": true,
"failed": false
}
Response Fields
Business status code. 0000 indicates success.
Human-readable status message.
The video item. null when the video is not found.
Basic fields
Internal stored name of the video.
Video duration in seconds, returned as a string (int(duration) to use it).
File size in bytes, returned as a string.
Upload time in milliseconds since epoch, returned as a string.
Processing status. One of PARSE, UNPARSE, FAIL.
Failure reason — only present when status=FAIL.
Human-readable resolution label (e.g. 720p, 1080p). Lower-case p.
These are only present when the corresponding value was supplied at upload time and the video’s summary row has been written.
Capture timestamp in milliseconds since epoch, returned as a string.
Camera/device model recorded at upload.
Combined tag set: user-supplied tags from upload plus scene/object tags auto-generated by the indexing pipeline (e.g. living_room, couch, cat), plus the auto-appended api tag. Unlike list_videos, this endpoint always returns tags once the video has finished parsing, even if no user tags were supplied at upload — the auto tags alone are enough to populate it.
Storage fields
GCS bucket of the video file. Omitted when the storage location cannot be resolved.
GCS blob (object) path of the video file. Use it with bucket at GET /serve/api/v2/download?bucket=&blob= to fetch the file directly. Note: video_url and cover_url are deliberately not returned by this endpoint — use bucket/blob instead.
Video identifier. Must be non-empty.
Scope identifier for the authenticated account.