Skip to main content
POST
/
v1
/
uploads
/
{id}
/
complete
Complete an upload
curl --request POST \
  --url https://app.loops.so/api/v1/uploads/{id}/complete \
  --header 'Authorization: Bearer <token>'
{
  "success": true,
  "emailAssetId": "cmp2cz4mn0oru0izztre5fgob",
  "finalUrl": "https://images.vialoops.com/cmp2cnlf600yz0f042m792otk/cmp2cz4mn0oru0izztre5fgob.jpg"
}

Documentation Index

Fetch the complete documentation index at: https://loops.so/docs/llms.txt

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

Content API endpoints are currently in an open alpha and are subject to change.

Request

Call this endpoint after uploading the file to the presignedUrl returned by Create an upload.

Path parameters

id
string
required
The emailAssetId returned when the upload was created.

Response

Success

success
boolean
required
emailAssetId
string
required
The ID of the uploaded asset.
finalUrl
string
required
The public URL of the uploaded asset. Use this URL in LMX image elements when updating an email message.

Error

A 400 Bad Request is returned if the upload id is missing or the uploaded file has an unsupported content type. A 404 Not Found is returned if the upload does not exist. If the API key is invalid (or content API is not enabled for your team), a 401 Unauthorized is returned.
success
boolean
required
message
string
required
An error message describing what went wrong.
{
  "success": true,
  "emailAssetId": "cmp2cz4mn0oru0izztre5fgob",
  "finalUrl": "https://images.vialoops.com/cmp2cnlf600yz0f042m792otk/cmp2cz4mn0oru0izztre5fgob.jpg"
}
Last modified on May 27, 2026