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.
Prerequisites
- You’re familiar with the concepts described on the Platform overview.
- 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).
Host URL
Endpoint
POST /serve/api/v1/list_videos
/serve/api/v1/list_videos
Authentication
Pass your API key in the Authorization request header. Requests without a valid API key are rejected.
Content Type
The endpoint expects a JSON body (application/json).
Request Example
Basic listing:
import requests
headers = {"Authorization": "<API_KEY>"}
json_body = {
"page": 1,
"size": 200,
"unique_id": "default"
}
response = requests.post(
"https://api.memories.ai/serve/api/v1/list_videos",
headers=headers,
json=json_body
)
print(response.json())
Listing filtered by capture metadata (GPS radius + camera + tag + minimum capture time):
json_body = {
"page": 1,
"size": 50,
"unique_id": "default",
# --- metadata filters ---
"camera_model": "Canon EOS 5D",
"tag": "holiday",
"datetime_taken": 1729388400000, # ms since epoch; only videos captured at/after this time
"latitude": 39.9042,
"longitude": 116.4074, # latitude + longitude must be supplied together (≈20 km radius)
# --- optional: restrict to a specific set of video_nos ---
"video_nos": ["VI606404158946574336", "VI606402870447996928"]
}
Request Parameters
Basic filters
One-based page number. Must be > 0.
Number of items per page. Must be > 0.
Scope identifier for the authenticated account (corresponds to the upload-time unique_id). Must be non-empty. If the folder for this unique_id does not exist yet, it is created automatically.
Exact-match filter on the stored video name.
Exact-match filter on a single video identifier.
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.
Filter by processing status. One of PARSE, UNPARSE, FAILED.
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.
Exact-match filter on the camera_model supplied at upload time.
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).
Minimum capture timestamp in milliseconds since epoch. Videos whose capture_timestamp >= datetime_taken are returned.
Decimal latitude. Must be supplied together with longitude; supplying only one returns “The latitude and longitude parameters must be provided together.”
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 / unique_id / video_name / video_no / status) behave exactly as before; response adds the new metadata fields only for videos that have them.
Response Example
{
"code": "0000",
"msg": "success",
"data": {
"current_page": 1,
"page_size": 20,
"total_count": 2,
"videos": [
{
"video_no": "VI606404158946574336",
"video_name": "182082-867762198_tiny",
"duration": 12,
"size": 3284512,
"status": "PARSE",
"create_time": 1754037217992,
"datetime_taken": 1729388400000,
"camera_model": "Canon EOS 5D",
"latitude": 39.9042,
"longitude": 116.4074,
"tags": ["holiday", "beijing", "api"]
},
{
"video_no": "VI606402870447996928",
"video_name": "test_video_gz_visual_understanding_s36",
"duration": 61,
"size": 5324808,
"status": "PARSE",
"create_time": 1754036910783
}
]
},
"success": true,
"failed": false
}
Response Fields
Business status code. 0000 indicates success.
Human-readable status message.
Echo of the requested page number (one-based).
Echo of the requested page size.
Total number of matching videos across all pages.
Page of matching videos. Each item carries the basic video fields plus — when available — the capture-time metadata supplied at upload.
Video item fields
Internal stored name of the video.
Video duration in seconds.
Video file size in bytes.
Upload time in milliseconds since epoch.
Processing status. One of:
PARSE — ready for chat/search.
UNPARSE — uploaded but not yet fully processed.
FAILED — processing failed (see cause).
Failure reason — only present when status=FAILED.
Download URL — only present when available.
These fields 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.
Camera/device model recorded at upload.
User-defined tags. The server automatically appends an api tag on every API upload.
One-based page number. Must be > 0.
Required range: x >= 1
Items per page. Must be > 0.
Required range: x >= 1
Scope identifier for the authenticated account. Folder is auto-created on first use.
Exact-match filter on the stored video name.
Exact-match filter on a single video identifier.
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"
]
Filter by processing status.
Available options:
PARSE,
UNPARSE,
FAILED
Metadata filter: exact-match on the camera_model supplied at upload time.
Metadata filter: single tag that must be present on the video.
Metadata filter: minimum capture timestamp in milliseconds since epoch. Matches videos whose capture_timestamp >= this value.
Metadata filter: decimal latitude. Must be supplied together with longitude.
Metadata filter: decimal longitude. Must be supplied together with latitude. ~20 km geo-within radius.