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)
Uploaded images go into your Private Image Library — this is a separate library from your Private Video Library. Use Upload Video if you want to add videos.
Once uploaded, images are indexed automatically and become searchable via Search Private Image Library.
Prerequisites
- You have created a memories.ai API key.
- Supported formats:
.jpg, .jpeg, .png, .gif, .bmp, .webp (case-insensitive). The Content-Type of each file part must start with image/.
- Max file size: 20 MB per image.
Endpoint
POST https://api.memories.ai/serve/api/v1/upload_img
This endpoint uses multipart/form-data. Repeat the files field once per image. All other parameters are sent as form fields.
Authentication
Authorization: sk-mavi-...
Request Example
import requests
headers = {"Authorization": "sk-mavi-..."}
files = [
("files", ("photo1.jpg", open("photo1.jpg", "rb"), "image/jpeg")),
("files", ("photo2.png", open("photo2.png", "rb"), "image/png")),
]
data = {
"unique_id": "my-project",
"datetime_taken": "2025-09-07 22:52:00",
"camera_model": "Canon EOS 5D",
"latitude": "39.9042",
"longitude": "116.4074",
"tags": ["outdoor", "2025"]
}
response = requests.post(
"https://api.memories.ai/serve/api/v1/upload_img",
headers=headers,
files=files,
data=data
)
print(response.json())
Request Parameters
One or more image files. Each must have a supported extension and a Content-Type starting with image/. Maximum 20 MB per file. If any file in the batch fails validation, the entire request is rejected.
Namespace to group images in your account. Created automatically on first use.
Capture time in yyyy-MM-dd HH:mm:ss format. Invalid formats are rejected.
Camera or device model name. Maximum 200 characters.
GPS latitude where the images were captured (decimal).
GPS longitude where the images were captured (decimal).
User-defined tags. Maximum 50 tags per request. An api tag is appended automatically.
Notes & Limits
- Rate limiting: Exceeding the per-account upload rate limit returns an error. See Rate limits.
- Billing: Each upload deducts credits from your account. Insufficient balance causes the request to fail.
- Batch validation: If any file in the batch fails validation, the entire request is rejected — no files are uploaded.
Response Example
{
"code": "0000",
"msg": "success",
"data": [
{ "id": 568102998803353601 },
{ "id": 568102998803353602 }
],
"success": true,
"failed": false
}
Response Fields
Business status code. 0000 indicates success.
Human-readable status message.
Array of uploaded image entries, in the same order as the files parts in the request.
Unique numeric identifier for the uploaded image. Use this in subsequent search and retrieval operations.
One or more image files. Allowed extensions: .jpg, .jpeg, .png, .gif, .bmp, .webp. Content-Type must start with image/. Max 20 MB per file. Batch size capped by server configuration.
Scope identifier 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 50. The server automatically appends an 'api' tag.
Maximum array length: 50
Business status code. 0000 indicates success.
Example:[
{ "id": 568102998803353600 },
{ "id": 568102998803353600 }
]