For the complete documentation index, see llms.txt. This page is also available as Markdown.

Assets

Asset upload and management

Get Signed Upload URL

get
/getUploadUrl

Generates a signed PUT URL for uploading a file directly to storage. The key is {project}/{type}/{name}. Manager is required for assets, instructions, exports and segmentationModels; any project role is enough for brushes, medicalBrushes, upload-box and conversation. Organization admins pass either way. Fails with 403 once the organization asset quota is exhausted.

Authorizations
apikeystringRequired

API key for authentication. Format - apikey YOUR_API_KEY

Query parameters
namestringRequired

File name with extension

projectstringRequired

Project ID

typestringOptional

Storage folder for the file: assets, instructions, exports, segmentationModels, brushes, medicalBrushes, upload-box or conversation. The legacy custom Upload Box form {projectId}/upload-box works only together with a custom bucket and a storageId; there the real project is the first segment of type and the project parameter is a storage subfolder. Not enforced by the server: omitting it signs a key containing the literal undefined and requires the Manager role.

storageIdstringOptional

Custom storage ID

bucketstringOptional

Custom bucket name

Responses
200

Upload URL generated successfully

application/json
statusstringOptionalExample: success
get/getUploadUrl
curl -X GET "https://imeritapi.ango.ai/v2/getUploadUrl?name=image.jpg&project=YOUR_PROJECT_ID&type=assets" \
  -H "apikey: YOUR_API_KEY" \
  -H "Content-Type: application/json"
{
  "status": "success",
  "data": {
    "uploadUrl": "https://bucket.s3.amazonaws.com/project/assets/file.jpg?X-Amz-Signature=..."
  }
}

Get Signed Download URL

get
/getSignedUrl

Generates a signed GET URL for an asset URL. When storageId is given, access to that storage integration is checked. Fails with 403 once the organization asset quota is exhausted.

Authorizations
apikeystringRequired

API key for authentication. Format - apikey YOUR_API_KEY

Query parameters
namestringRequired

Full asset URL to sign

storageIdstringOptional

Storage integration ID. Omit it for objects in the platform bucket.

Responses
200

Signed URL generated successfully

application/json
statusstringOptionalExample: success
get/getSignedUrl
curl -X GET "https://imeritapi.ango.ai/v2/getSignedUrl?name=https://bucket.s3.amazonaws.com/project/assets/image.jpg" \
  -H "apikey: YOUR_API_KEY" \
  -H "Content-Type: application/json"
{
  "status": "success",
  "data": {
    "signedUrl": "text"
  }
}

Import Assets from Cloud

post
/project/{projectId}/cloud

Imports assets from cloud storage (S3, GCS, Azure) and creates their tasks. The upload status is derived by the server, so PCT assets, videos without width, height and frameTotal, and NRRD series get their task only after preprocessing; for those tasksCreated is lower than assetsCreated. A storage at request level is ignored, put it on each asset.

Authorizations
apikeystringRequired

API key for authentication. Format - apikey YOUR_API_KEY

Path parameters
projectIdstringRequired

Project ID

Query parameters
batchesstringOptional

JSON stringified array of batch IDs, applied to every asset in the request that does not carry its own batches.

Body
uploadLocalstring · enumOptional

"true" marks the created assets private. Nothing is downloaded, the files stay where they are. Read endpoints return pre-signed URLs when an asset is private, carries a storage, or is NRRD, so an asset with a storage gets signed URLs either way.

Default: falsePossible values:
prioritynumber · min: -1000 · max: 1000Optional

Task priority for queue ordering (higher values first). Applies to every asset in the request and wins over a per-asset priority, including when it is 0.

Default: 0
Responses
200

Assets imported successfully

application/json
statusstringOptionalExample: success
post/project/{projectId}/cloud
curl -X POST "https://imeritapi.ango.ai/v2/project/YOUR_PROJECT_ID/cloud" \
  -H "apikey: YOUR_API_KEY" \
  -H "Content-Type: application/json" \
  -d '{
    "assets": [
      {
        "data": "https://my-bucket.s3.amazonaws.com/images/img001.jpg",
        "externalId": "IMG-001"
      },
      {
        "data": "https://my-bucket.s3.amazonaws.com/images/img002.jpg",
        "externalId": "IMG-002"
      }
    ]
  }'
{
  "status": "success",
  "data": {
    "assets": {
      "assetsCreated": 1,
      "tasksCreated": 1,
      "preLabelsCount": 1,
      "validPreLabelsCount": 1
    }
  }
}

Upload Chat Assets

post
/project/{projectId}/chat

Creates conversation assets for chat annotation projects. Conversations come from the uploaded file; without a file, numberOfConversations empty conversations are created. At most 10000 conversations per request. The created assets are always private.

Authorizations
apikeystringRequired

API key for authentication. Format - apikey YOUR_API_KEY

Path parameters
projectIdstringRequired

Project ID

Body
filestring · binaryOptional

JSON file holding the conversations to import

storageIdstringOptional

Storage integration ID. Send an empty value to use the platform bucket.

bucketstringOptional
batchesstringOptional

JSON stringified array of batch IDs, applied to every conversation asset created by this request.

llmConfigstringOptional

LLM configuration JSON

numberOfConversationsnumberOptional

How many conversations to create when no file is uploaded

namingStrategystringOptional

Accepted for backward compatibility, has no effect

prioritynumberOptional
Responses
200

Chat assets uploaded successfully

application/json
statusstringOptionalExample: success
post/project/{projectId}/chat
POST /v2/project/{projectId}/chat HTTP/1.1
Host: imeritapi.ango.ai
apikey: YOUR_API_KEY
Content-Type: multipart/form-data
Accept: */*
Content-Length: 151

{
  "file": "binary",
  "storageId": "text",
  "bucket": "text",
  "batches": "text",
  "llmConfig": "text",
  "numberOfConversations": 1,
  "namingStrategy": "text",
  "priority": 1
}
200

Chat assets uploaded successfully

{
  "status": "success",
  "data": {
    "assets": {
      "assetsCreated": 1,
      "tasksCreated": 1,
      "preLabelsCount": 1,
      "validPreLabelsCount": 1
    }
  }
}

Get Project Assets

get
/project/{projectId}/assets

Retrieves assets for a specific project with optional filtering. Results are always ordered newest first. Without page and limit every asset in the project is returned.

Authorizations
apikeystringRequired

API key for authentication. Format - apikey YOUR_API_KEY

Path parameters
projectIdstringRequired

Project ID

Query parameters
pageinteger · min: 1Optional

Page number (1-indexed). Sets the page size to 10 when limit is absent.

limitinteger · min: 1Optional

Items per page. Not capped; without it and without page no limit is applied.

filtersstringOptional

JSON stringified filter object, merged into the query

externalIdstringOptional

Filter by external ID

batchesstringOptional

Filter by batch ID

populatestringOptional

Relation to populate, repeatable. labelTasks is always populated. Use project to get the project object instead of its ID.

fieldsstringOptional

Comma separated field list. Prefix a field with - to exclude it. Inclusion lists have no effect because the server always requests all fields.

Responses
200

Assets retrieved successfully

application/json
statusstringOptionalExample: success
get/project/{projectId}/assets
curl -X GET "https://imeritapi.ango.ai/v2/project/YOUR_PROJECT_ID/assets?page=1&limit=10&externalId=image-001" \
  -H "apikey: YOUR_API_KEY" \
  -H "Content-Type: application/json"
200

Assets retrieved successfully

{
  "status": "success",
  "data": {
    "assets": [
      {
        "_id": "text",
        "id": "text",
        "data": "text",
        "dataset": [
          "text"
        ],
        "overlay": [
          "text"
        ],
        "head": "text",
        "project": "text",
        "organization": "text",
        "storage": "text",
        "externalId": "text",
        "editorType": "ango",
        "uploadStatus": "READY",
        "isPrivate": true,
        "isPreLabeled": true,
        "batches": [
          "text"
        ],
        "metadata": {
          "width": 1,
          "height": 1,
          "size": 1,
          "frameStep": 1,
          "frameTotal": 1,
          "frameRate": 1,
          "numOfPages": 1,
          "numOfWords": 1,
          "duration": 1,
          "hasVariableFrameRate": true
        },
        "attachments": [
          {
            "type": "text",
            "value": "text",
            "label": {}
          }
        ],
        "contextData": {},
        "labelTasks": [
          {
            "_id": "text",
            "id": "text",
            "stage": "text",
            "assignee": "text"
          }
        ],
        "deleted": true,
        "preprocessEnqueuedAt": "2026-01-01T00:00:00.000Z",
        "createdAt": "2026-01-01T00:00:00.000Z",
        "createdBy": "text"
      }
    ],
    "total": 1
  }
}

Delete Assets

delete
/project/{projectId}/assets

Soft deletes assets. The assets and their tasks, task history and issues are marked deleted, the project asset count is decremented by the number of IDs sent, and the tasks are removed from the work queues.

Authorizations
apikeystringRequired

API key for authentication. Format - apikey YOUR_API_KEY

Path parameters
projectIdstringRequired

Project ID

Body
assetsstring[]Required
Responses
200

Assets deleted successfully

application/json
statusstringOptionalExample: success
delete/project/{projectId}/assets
DELETE /v2/project/{projectId}/assets HTTP/1.1
Host: imeritapi.ango.ai
apikey: YOUR_API_KEY
Content-Type: application/json
Accept: */*
Content-Length: 19

{
  "assets": [
    "text"
  ]
}
200

Assets deleted successfully

{
  "status": "success",
  "data": {
    "assets": [
      "text"
    ]
  }
}

Update Asset

post
/assets/{assetId}

Updates asset metadata or properties

Authorizations
apikeystringRequired

API key for authentication. Format - apikey YOUR_API_KEY

Path parameters
assetIdstringRequired

Asset ID

Body

The fields below are the supported ones. The endpoint applies the request body to the asset without validation, so any other Asset field is writable as well. The response carries the updated asset with its URLs re-signed.

contextDataobjectOptional
datastringOptional
externalIdstringOptional
Responses
200

Asset updated successfully

application/json
statusstringOptionalExample: success
post/assets/{assetId}
POST /v2/assets/{assetId} HTTP/1.1
Host: imeritapi.ango.ai
apikey: YOUR_API_KEY
Content-Type: application/json
Accept: */*
Content-Length: 228

{
  "metadata": {
    "width": 1,
    "height": 1,
    "size": 1,
    "frameStep": 1,
    "frameTotal": 1,
    "frameRate": 1,
    "numOfPages": 1,
    "numOfWords": 1,
    "duration": 1,
    "hasVariableFrameRate": true
  },
  "contextData": {},
  "data": "text",
  "overlay": [
    "text"
  ],
  "externalId": "text"
}
200

Asset updated successfully

{
  "status": "success",
  "data": {
    "asset": {
      "_id": "text",
      "id": "text",
      "data": "text",
      "dataset": [
        "text"
      ],
      "overlay": [
        "text"
      ],
      "head": "text",
      "project": "text",
      "organization": "text",
      "storage": "text",
      "externalId": "text",
      "editorType": "ango",
      "uploadStatus": "READY",
      "isPrivate": true,
      "isPreLabeled": true,
      "batches": [
        "text"
      ],
      "metadata": {
        "width": 1,
        "height": 1,
        "size": 1,
        "frameStep": 1,
        "frameTotal": 1,
        "frameRate": 1,
        "numOfPages": 1,
        "numOfWords": 1,
        "duration": 1,
        "hasVariableFrameRate": true
      },
      "attachments": [
        {
          "type": "text",
          "value": "text",
          "label": {}
        }
      ],
      "contextData": {},
      "labelTasks": [
        {
          "_id": "text",
          "id": "text",
          "stage": "text",
          "assignee": "text"
        }
      ],
      "deleted": true,
      "preprocessEnqueuedAt": "2026-01-01T00:00:00.000Z",
      "createdAt": "2026-01-01T00:00:00.000Z",
      "createdBy": "text"
    }
  }
}

Assign Batches to Assets

post
/assignBatches

Replaces the batches of existing assets with the given batch IDs. The new batches are also written to the tasks and task history of those assets.

Authorizations
apikeystringRequired

API key for authentication. Format - apikey YOUR_API_KEY

Body
assetsstring[]Required

Asset IDs to update

batchesstring[]Required

Batch IDs to set on the assets. Use the _id values from the project's batches array, not batch names; an unknown ID fails the whole request with 400.

projectIdstringRequired

Project the batches belong to

Responses
200

Batches assigned successfully

application/json
statusstringOptionalExample: success
post/assignBatches
curl -X POST "https://imeritapi.ango.ai/v2/assignBatches" \
  -H "apikey: YOUR_API_KEY" \
  -H "Content-Type: application/json" \
  -d '{
    "projectId": "YOUR_PROJECT_ID",
    "assets": ["asset123", "asset456"],
    "batches": ["507f1f77bcf86cd799439011", "507f1f77bcf86cd799439012"]
  }'
200

Batches assigned successfully

{
  "status": "success",
  "data": {
    "assets": {
      "count": 1,
      "message": "text"
    }
  }
}

Last updated