Skip to main content
POST
List Videos
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)
Browse and filter your Private Video Library. Returns a paginated list of uploaded videos with status, duration, file size, and any capture metadata.

Prerequisites

  • You have created a memories.ai API key.
  • You have uploaded at least one video using the Upload API (metadata-based filters require the video to have finished parsing so that its summary/metadata row is populated).

Endpoint

POST /serve/api/v1/list_videos

Authentication

Pass your API key in the Authorization request header. Requests without a valid API key are rejected.

Request Example

Uses application/json — send the request body as JSON, not form data.
Basic listing:
Listing filtered by capture metadata (GPS radius + camera + tag + minimum capture time):

Request Parameters

Basic filters

integer
default:"1"
One-based page number. Must be > 0.
integer
default:"200"
Number of items per page. Must be > 0.
integer
Optional. Restrict results to a single folder. Omit to query across your entire account. -1 is the Default folder. Must be a folder that belongs to your account.
string
Exact-match filter on the stored video name.
string
Exact-match filter on a single video identifier.
array
Restrict results to a specific set of video identifiers. Combined via AND with any other filter. When used alongside metadata filters, the final result is the intersection of the two sets.
string
Filter by processing status. One of PARSE, UNPARSE, FAIL. Note that the server rejects the legacy FAILED spelling with a JSON parse error referencing the live enum ([UNPARSE, PARSE, FAIL]).

Metadata filters

All metadata filters are resolved against the summary table that the upload pipeline populates after a video finishes parsing. A video whose summary is not yet available will not appear in the result when any metadata filter is applied.
string
Exact-match filter on the camera_model supplied at upload time.
string
Single tag filter — the video’s tag array must contain this value. To filter by multiple tags, issue separate requests and intersect client-side (server applies AND-with-other-filters semantics).
integer
Minimum capture timestamp in milliseconds since epoch. Videos whose capture_timestamp >= datetime_taken are returned.
number
Decimal latitude. Must be supplied together with longitude; supplying only one returns “The latitude and longitude parameters must be provided together.”
number
Decimal longitude. Must be supplied together with latitude. The server applies a ~20 km radius geo-within filter around the point.

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-filter resolution: When any of camera_model, tag, datetime_taken, latitude+longitude is supplied, the server first queries the summary table, then restricts the listing to matching videos. If nothing matches, an empty page is returned (the request still succeeds).
  • Legacy compatibility: Requests that only use the basic filters (page / size / video_name / video_no / status) behave exactly as before; response adds the new metadata fields only for videos that have them.

Response Example

Numeric fields (duration, size, create_time, total_count, datetime_taken) are returned as strings, even though they represent integers — convert with int(...) before doing arithmetic.

Response Fields

string
Business status code. 0000 indicates success.
string
Human-readable status message.
integer
Echo of the requested page number (one-based).
integer
Echo of the requested page size.
string
Total number of matching videos across all pages, returned as a string.
array
Page of matching videos. Each item carries the basic video fields plus — when available — the capture-time metadata supplied at upload.

Video item fields

string
Unique video identifier.
string
Internal stored name of the video.
string
Video duration in seconds, returned as a string (int(duration) to use it).
string
Video file size in bytes, returned as a string.
string
Upload time in milliseconds since epoch, returned as a string.
string
Processing status. One of:
  • PARSE — ready for chat/search.
  • UNPARSE — uploaded but not yet fully processed.
  • FAIL — processing failed (see cause).
string
Failure reason. Always present; carries the literal string "null" when there is no failure.
string
Hosted CDN URL of the original video on mavi-resource.openinterx.com. Suitable as a file_uri for Gemini VLM without re-uploading.
string
Hosted CDN URL of the auto-extracted cover frame (typically frame 32). Useful as a thumbnail in listing UIs.
number
Frame rate of the source video. May be null for older uploads.
integer
Pixel width of the source video. May be null for older uploads.
integer
Pixel height of the source video. May be null for older uploads.
string
Human-readable resolution label (e.g. 720p). May be null for older uploads.

Metadata fields

These fields are only present when the corresponding value was supplied at upload time and the video’s summary row has been written.
string
Capture timestamp in milliseconds since epoch, returned as a string.
string
Camera/device model recorded at upload.
number
Decimal latitude.
number
Decimal longitude.
array
Combined tag set: the user-supplied tags from upload time plus scene/object tags auto-generated by the indexing pipeline (e.g. living_room, couch, cat). The server also appends an api tag on every API upload. There is no way to distinguish user vs auto tags in the response.

Storage fields

string
GCS bucket of the original video file. Omitted when the storage location cannot be resolved.
string
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.

Authorizations

Authorization
string
header
required

Body

application/json
page
integer
default:1

One-based page number. Must be > 0.

Required range: x >= 1
size
integer
default:200

Items per page. Must be > 0.

Required range: x >= 1
video_name
string

Exact-match filter on the stored video name.

video_no
string

Exact-match filter on a single video identifier.

video_nos
string[]

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:
status
enum<string>

Filter by processing status.

Available options:
PARSE,
UNPARSE,
FAILED
camera_model
string

Metadata filter: exact-match on the camera_model supplied at upload time.

Example:

"Canon EOS 5D"

tag
string

Metadata filter: single tag that must be present on the video.

Example:

"holiday"

datetime_taken
integer<int64>

Metadata filter: minimum capture timestamp in milliseconds since epoch. Matches videos whose capture_timestamp >= this value.

Example:

1729388400000

latitude
number<double>

Metadata filter: decimal latitude. Must be supplied together with longitude.

Example:

39.9042

longitude
number<double>

Metadata filter: decimal longitude. Must be supplied together with latitude. ~20 km geo-within radius.

Example:

116.4074

folder_id
integer

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

Response

200 - application/json

Successful response

code
string
Example:

"0000"

msg
string
Example:

"success"

data
object
success
boolean
Example:

true

failed
boolean
Example:

false