Skip to main content
POST
/
v1
/
upload
/
presign
Create Presigned Upload URL
curl --request POST \
  --url https://api.eachlabs.ai/v1/upload/presign \
  --header 'Content-Type: application/json' \
  --header 'X-API-Key: <api-key>' \
  --data '
{
  "content_type": "image/png",
  "file_type": "image"
}
'
{
  "id": "0dce0f44-b8a5-4f30-91d4-5f6b0c221bf0",
  "presigned_url": "https://eachlabs-storage.s3.amazonaws.com/uploads/...?X-Amz-Signature=...",
  "public_url": "https://cdn-us.eachlabs.ai/uploads/0dce0f44-b8a5-4f30-91d4-5f6b0c221bf0.png",
  "expires_at": "2026-04-27T18:15:00Z",
  "required_headers": {
    "x-amz-meta-file-id": "0dce0f44-b8a5-4f30-91d4-5f6b0c221bf0"
  }
}

Documentation Index

Fetch the complete documentation index at: https://docs.eachlabs.ai/llms.txt

Use this file to discover all available pages before exploring further.

Authorizations

X-API-Key
string
header
required

API key for authentication

Body

application/json
content_type
string
required

MIME type of the file to upload

Example:

"image/png"

file_type
enum<string>

High-level file category

Available options:
image,
video,
audio,
other
Example:

"image"

ttl_days
integer | null

Optional file TTL tier in days, when enabled for the caller

Example:

30

Response

Presigned upload URL created

id
string

Upload identifier

Example:

"0dce0f44-b8a5-4f30-91d4-5f6b0c221bf0"

presigned_url
string<uri>

Short-lived URL for uploading raw file bytes

Example:

"https://eachlabs-storage.s3.amazonaws.com/uploads/...?X-Amz-Signature=..."

public_url
string<uri>

Public URL to pass as a model input after upload succeeds

Example:

"https://cdn-us.eachlabs.ai/uploads/0dce0f44-b8a5-4f30-91d4-5f6b0c221bf0.png"

expires_at
string<date-time>

Presigned URL expiration time

Example:

"2026-04-27T18:15:00Z"

required_headers
object

Headers that must be sent verbatim with the upload PUT request

Example:
{
"x-amz-meta-file-id": "0dce0f44-b8a5-4f30-91d4-5f6b0c221bf0"
}
Last modified on May 28, 2026