Skip to main content
POST
/
serve
/
api
/
v1
/
upload_img
Upload Image from File
curl --request POST \
  --url https://api.memories.ai/serve/api/v1/upload_img \
  --header 'Authorization: <api-key>' \
  --header 'Content-Type: multipart/form-data' \
  --form 'files=<string>' \
  --form unique_id=default \
  --form 'datetime_taken=2025-09-07 22:52:00' \
  --form 'camera_model=Canon EOS 5D' \
  --form latitude=39.9042 \
  --form longitude=116.4074 \
  --form 'tags[0]=test1' \
  --form 'tags[1]=test2' \
  --form files.items='@example-file'
{
  "code": "0000",
  "msg": "success",
  "data": [
    {
      "id": 568102998803353600
    },
    {
      "id": 568102998803353600
    }
  ],
  "success": true,
  "failed": false
}

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

files
file[]
required
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.
unique_id
string
default:"default"
Namespace to group images in your account. Created automatically on first use.
datetime_taken
string
Capture time in yyyy-MM-dd HH:mm:ss format. Invalid formats are rejected.
camera_model
string
Camera or device model name. Maximum 200 characters.
latitude
number
GPS latitude where the images were captured (decimal).
longitude
number
GPS longitude where the images were captured (decimal).
tags
array
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

code
string
Business status code. 0000 indicates success.
msg
string
Human-readable status message.
data
array
Array of uploaded image entries, in the same order as the files parts in the request.
data[].id
integer
Unique numeric identifier for the uploaded image. Use this in subsequent search and retrieval operations.

Authorizations

Authorization
string
header
required

Body

multipart/form-data
files
file[]
required

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.

unique_id
string
default:default

Scope identifier for the authenticated account.

datetime_taken
string

Capture time in format yyyy-MM-dd HH:mm:ss.

Example:

"2025-09-07 22:52:00"

camera_model
string

Camera/device model. Max 200 characters.

Maximum string length: 200
Example:

"Canon EOS 5D"

latitude
number<double>
Example:

39.9042

longitude
number<double>
Example:

116.4074

tags
string[]

User-defined tags. Max 50. The server automatically appends an 'api' tag.

Maximum array length: 50
Example:
["test1", "test2"]

Response

200 - application/json

Successful response

code
string

Business status code. 0000 indicates success.

Example:

"0000"

msg
string
Example:

"success"

data
object[]
Example:
[
{ "id": 568102998803353600 },
{ "id": 568102998803353600 }
]
success
boolean
Example:

true

failed
boolean
Example:

false