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.
- Video and audio codecs: h264, h265, vp9, hevc, or m3u8.
- Audio track: Required if you intend to use the audio transcription feature.
- Direct link: The URL must be a direct download link (or stream) reachable via an unauthenticated HTTP GET.
Note !!
Only m3u8 files that use fully linked internal absolute paths are supported. Please contact us for permission if the file linked to m3u8 has size > 1GB.
Host URL
Endpoint
POST /serve/api/v1/upload_url
Authentication
Pass your API key in the Authorization request header. Requests without a valid API key are rejected.
Content Type
The endpoint expects form-encoded parameters (application/x-www-form-urlencoded). All parameters are sent as form fields, not as a JSON body.
Request Example
import requests
headers = {"Authorization": "<API_KEY>"}
data = {
"url": "<URL>",
"callback": "<CallBack URL>",
"unique_id": "test1020",
"datetime_taken": "2025-10-20 11:00:00",
"camera_model": "Canon EOS 5D",
"latitude": "66.66",
"longitude": "66.66",
"tags": ["test1", "test2", "test3", "test4", "test5"],
"retain_original_video": True,
"video_transcription_prompt": "<YOUR_CUSTOMIZED_PROMPT_FOR_VIDEO_FOCUS>"
}
response = requests.post(
"https://api.memories.ai/serve/api/v1/upload_url",
data=data,
headers=headers
)
print(response.json())
Callback Notification Payload
If you provide a callback, memories.ai will send a POST request to it once the video has been uploaded or parsed.
{
"videoNo": "VI554046065381212160",
"status": "PARSE"
}
Request Parameters
Direct URL to the video file. Must be non-empty and reachable via unauthenticated HTTP GET (direct download link or stream).
Scope identifier used to group videos under a logical folder for the authenticated account. If the folder for this unique_id does not exist yet, it is created automatically on the first upload. Must be non-empty when explicitly provided.
Callback URL that will receive a POST notification when the video moves to the parsing stage. Maximum length 299 characters.
Capture time of the video in the exact format yyyy-MM-dd HH:mm:ss (e.g. 2025-10-20 11:00:00). Invalid formats are rejected.
Camera/device model name. Maximum length 200 characters.
Latitude where the video was captured. Must be a valid decimal number (e.g. 66.66).
Longitude where the video was captured. Must be a valid decimal number (e.g. 66.66).
List of user-defined tags (e.g. ["test1", "test2"]). Maximum 20 tags per request. The server automatically appends an api tag to every upload.
Whether to retain the original source video. Defaults to true.
video_transcription_prompt
Custom prompt that steers the video transcription/understanding focus.
Notes & Limits
- Rate limiting: The endpoint is protected by a per-account upload rate limit. Exceeding the limit returns an error indicating the request has exceeded the limit.
- Billing: This endpoint is metered — the cost of the request is checked and deducted from your account balance at request time. Insufficient balance will cause the request to fail.
- Source fetch: The server will fetch the video from the provided
url; make sure the link is publicly reachable and remains available until parsing starts.
Response Example
{
"code": "0000",
"msg": "success",
"data": {
"videoNo": "VI568102998803353600",
"videoName": "1be6a69f3c6e49bf986235d68807ab1f",
"videoStatus": "UNPARSE",
"uploadTime": "1744905509814"
}
}
Response Fields
Business status code. 0000 indicates success; any other value indicates an error and msg will describe it.
Human-readable status message.
Unique identifier assigned to the uploaded video. Use this value for all subsequent operations (status queries, transcription, summary, chat, delete, etc.).
Internal name assigned to the stored video.
Initial processing status. Typically UNPARSE immediately after upload; the video will transition to parsing asynchronously.
Upload timestamp in milliseconds since epoch (as a string).
Body
application/x-www-form-urlencoded
Direct URL of the video. Must be reachable via unauthenticated HTTP GET.
Example:"https://example.com/test_video.mp4"
Callback URL invoked when the video moves to the parsing stage. Max 299 characters.
Maximum string length: 299
Example:"https://your.app/callback"
Scope identifier. A folder is auto-created on first use for the authenticated account.
Capture time in format yyyy-MM-dd HH:mm:ss.
Camera/device model. Max 200 characters.
Maximum string length: 200
User-defined tags. Max 20. The server automatically appends an 'api' tag.
Maximum array length: 20
Whether to retain the original source video. Defaults to true.
video_transcription_prompt
Example:"Focus on the speaker and major scene changes."
Business status code. 0000 indicates success.
Example:{
"videoNo": "VI568102998803353600",
"videoName": "1be6a69f3c6e49bf986235d68807ab1f",
"videoStatus": "UNPARSE",
"uploadTime": "1744905509814"
}