Superb AI Image Assets API
The image_assets API from Superb AI — 10 operation(s) for image_assets.
The image_assets API from Superb AI — 10 operation(s) for image_assets.
Every API here is available over the APIs.io API and to AI agents over MCP.
One button, every client — Claude, Cursor, VS Code and the rest.
https://apis.io/mcp
find_apisBrowse and filter every API in the catalog.get_api_artifactsOne API's artifacts, grouped by type.get_openapiThe primary OpenAPI for this API.find_similar_apisAPIs that look like this one.apis_io_searchSTART HERE — APIs, providers and tags for one query, each with its total.resolveTurn a domain, URL or GitHub org into the provider it belongs to.find_cohortsEvery scored population of providers in the catalog.curl "https://apis.io/api/v1/apis/superb-ai-image-assets-api"
curl "https://apis.io/api/v1/apis?limit=25"
Discovery needs no key. Ratings and market analysis are Pro.
Free tier, no form to fill in. Signing in shares your email address with us — we store it to create your key and to recognise you if you sign in with another provider. See our Privacy Policy and Terms.
A second provider on the same verified email joins the account you already have.
openapi: 3.2.0
info:
title: MLOps Platform Image Assets API
description: Multi-tenant labeling-platform backend.
version: 0.1.0
tags:
- name: image_assets
paths:
/tenants/{slug}/datasets/images/{dataset_id}/assets/upload-init:
post:
tags:
- image_assets
summary: Upload Init
operationId: image_assets-upload_init
security:
- HTTPBearer: []
parameters:
- name: slug
in: path
required: true
schema:
type: string
title: Slug
- name: dataset_id
in: path
required: true
schema:
type: string
format: uuid
title: Dataset Id
requestBody:
required: true
content:
application/json:
schema:
$ref: '#/components/schemas/AssetUploadInitRequest'
responses:
'201':
description: Successful Response
content:
application/json:
schema:
oneOf:
- $ref: '#/components/schemas/AssetUploadInitSinglePartResponse'
- $ref: '#/components/schemas/AssetUploadInitMultipartResponse'
discriminator:
propertyName: upload_type
mapping:
single: '#/components/schemas/AssetUploadInitSinglePartResponse'
multipart: '#/components/schemas/AssetUploadInitMultipartResponse'
title: Response Image Assets-Upload Init
'422':
description: Validation Error
content:
application/json:
schema:
$ref: '#/components/schemas/HTTPValidationError'
'401':
description: Unauthenticated — missing, malformed, or expired Bearer token
content:
application/json:
schema:
$ref: '#/components/schemas/ErrorResponse'
'403':
description: Authenticated but not authorized for this resource
content:
application/json:
schema:
$ref: '#/components/schemas/ErrorResponse'
'404':
description: Resource not found in this tenant
content:
application/json:
schema:
$ref: '#/components/schemas/ErrorResponse'
'409':
description: Conflict — resource state prevents this action
content:
application/json:
schema:
$ref: '#/components/schemas/ErrorResponse'
'429':
description: Rate-limited (per-tenant token bucket)
content:
application/json:
schema:
$ref: '#/components/schemas/ErrorResponse'
/tenants/{slug}/datasets/images/{dataset_id}/assets/upload-init/batch:
post:
tags:
- image_assets
summary: Upload Init Batch
description: 'Fan-out of `/upload-init` for SDK / CLI ingest workflows: the caller passes up to 100 files, the server returns one presigned URL per file. Slashes the per-file RPC count by ~100×, which is the dominant cost when ingesting a folder of small images.
Per-file failures (wrong MIME, oversized, etc.) are returned with `upload_type=''error''` instead of failing the whole batch — the client maps responses back to inputs via `client_ref` and retries or skips individual items.
Files larger than the multipart threshold return `error_code=''USE_PER_FILE_INIT''`; the caller falls back to the regular `/upload-init` for those (multipart needs per-part presigning that doesn''t fit a batch shape).
**`X-Upload-Session-Id` header (optional, ADR-0039)**: pass a UUID and the server uses it as the rollup correlation_id for every file in this call. SDK clients reuse one UUID across all chunks of one logical `upload()` invocation so the activity feed shows a single *"uploaded N assets"* row instead of one row per 100-file chunk. When omitted, the server mints a fresh UUID per call (current default; backwards compatible).'
operationId: image_assets-upload_init_batch
security:
- HTTPBearer: []
parameters:
- name: slug
in: path
required: true
schema:
type: string
title: Slug
- name: dataset_id
in: path
required: true
schema:
type: string
format: uuid
title: Dataset Id
- name: X-Upload-Session-Id
in: header
required: false
schema:
anyOf:
- type: string
- type: 'null'
title: X-Upload-Session-Id
requestBody:
required: true
content:
application/json:
schema:
$ref: '#/components/schemas/AssetUploadInitBatchRequest'
responses:
'201':
description: Successful Response
content:
application/json:
schema:
$ref: '#/components/schemas/AssetUploadInitBatchResponse'
'422':
description: Validation Error
content:
application/json:
schema:
$ref: '#/components/schemas/HTTPValidationError'
'401':
description: Unauthenticated — missing, malformed, or expired Bearer token
content:
application/json:
schema:
$ref: '#/components/schemas/ErrorResponse'
'403':
description: Authenticated but not authorized for this resource
content:
application/json:
schema:
$ref: '#/components/schemas/ErrorResponse'
'404':
description: Resource not found in this tenant
content:
application/json:
schema:
$ref: '#/components/schemas/ErrorResponse'
'409':
description: Conflict — resource state prevents this action
content:
application/json:
schema:
$ref: '#/components/schemas/ErrorResponse'
'429':
description: Rate-limited (per-tenant token bucket)
content:
application/json:
schema:
$ref: '#/components/schemas/ErrorResponse'
/tenants/{slug}/datasets/images/{dataset_id}/assets/upload-init/{upload_id}/complete:
post:
tags:
- image_assets
summary: Upload Complete
operationId: image_assets-upload_complete
security:
- HTTPBearer: []
parameters:
- name: upload_id
in: path
required: true
schema:
type: string
minLength: 1
title: Upload Id
- name: slug
in: path
required: true
schema:
type: string
title: Slug
- name: dataset_id
in: path
required: true
schema:
type: string
format: uuid
title: Dataset Id
requestBody:
required: true
content:
application/json:
schema:
$ref: '#/components/schemas/AssetUploadCompleteRequest'
responses:
'204':
description: Successful Response
'422':
description: Validation Error
content:
application/json:
schema:
$ref: '#/components/schemas/HTTPValidationError'
'401':
description: Unauthenticated — missing, malformed, or expired Bearer token
content:
application/json:
schema:
$ref: '#/components/schemas/ErrorResponse'
'403':
description: Authenticated but not authorized for this resource
content:
application/json:
schema:
$ref: '#/components/schemas/ErrorResponse'
'404':
description: Resource not found in this tenant
content:
application/json:
schema:
$ref: '#/components/schemas/ErrorResponse'
'409':
description: Conflict — resource state prevents this action
content:
application/json:
schema:
$ref: '#/components/schemas/ErrorResponse'
'429':
description: Rate-limited (per-tenant token bucket)
content:
application/json:
schema:
$ref: '#/components/schemas/ErrorResponse'
/tenants/{slug}/datasets/images/{dataset_id}/assets:
get:
tags:
- image_assets
summary: List Assets
operationId: image_assets-list_assets
security:
- HTTPBearer: []
parameters:
- name: slug
in: path
required: true
schema:
type: string
title: Slug
- name: dataset_id
in: path
required: true
schema:
type: string
format: uuid
title: Dataset Id
- name: limit
in: query
required: false
schema:
type: integer
maximum: 100
minimum: 1
description: Max rows per page.
default: 50
title: Limit
description: Max rows per page.
- name: cursor
in: query
required: false
schema:
anyOf:
- type: string
- type: 'null'
description: Opaque pagination cursor from a previous response's `next_cursor`; omit for the first page.
title: Cursor
description: Opaque pagination cursor from a previous response's `next_cursor`; omit for the first page.
- name: q
in: query
required: false
schema:
anyOf:
- type: string
minLength: 1
maxLength: 255
- type: 'null'
description: Case-insensitive substring search (min 1 char). Wildcards are matched literally.
title: Q
description: Case-insensitive substring search (min 1 char). Wildcards are matched literally.
- name: uploaded_by
in: query
required: false
schema:
anyOf:
- type: string
format: uuid
- type: 'null'
description: Filter to assets uploaded by this user.
title: Uploaded By
description: Filter to assets uploaded by this user.
- name: created_at_from
in: query
required: false
schema:
anyOf:
- type: string
format: date-time
- type: 'null'
description: Inclusive lower bound (>=) on `created_at` (ISO-8601).
title: Created At From
description: Inclusive lower bound (>=) on `created_at` (ISO-8601).
- name: created_at_to
in: query
required: false
schema:
anyOf:
- type: string
format: date-time
- type: 'null'
description: Exclusive upper bound (<) on `created_at` (ISO-8601).
title: Created At To
description: Exclusive upper bound (<) on `created_at` (ISO-8601).
- name: status
in: query
required: false
schema:
anyOf:
- $ref: '#/components/schemas/AssetStatus'
- type: 'null'
description: Filter on asset processing `status` (e.g. 'ready'). Exact match.
title: Status
description: Filter on asset processing `status` (e.g. 'ready'). Exact match.
- name: content_type
in: query
required: false
schema:
anyOf:
- type: string
- type: 'null'
description: Filter on MIME `content_type` (e.g. 'image/jpeg'). Exact match.
title: Content Type
description: Filter on MIME `content_type` (e.g. 'image/jpeg'). Exact match.
- name: embedding_status
in: query
required: false
schema:
anyOf:
- $ref: '#/components/schemas/EmbeddingStatus'
- type: 'null'
description: Filter on `embedding_status` ('pending' / 'ready'). Use `pending` to list assets the next /embed pass will pick up.
title: Embedding Status
description: Filter on `embedding_status` ('pending' / 'ready'). Use `pending` to list assets the next /embed pass will pick up.
- name: include
in: query
required: false
schema:
anyOf:
- type: string
- type: 'null'
description: CSV. `projects` → `[{id,name}]` per asset; `thumbnail_url` → presigned thumbnail URL per asset (saves the per-asset round trip in grid views).
title: Include
description: CSV. `projects` → `[{id,name}]` per asset; `thumbnail_url` → presigned thumbnail URL per asset (saves the per-asset round trip in grid views).
- name: include_total
in: query
required: false
schema:
type: boolean
description: When true, response carries `total` = COUNT(*) for the same filter (ignores cursor/limit). ~150ms extra at the 1M-row dataset cap; opt in only when the FE needs a 'showing X of Y' header.
default: false
title: Include Total
description: When true, response carries `total` = COUNT(*) for the same filter (ignores cursor/limit). ~150ms extra at the 1M-row dataset cap; opt in only when the FE needs a 'showing X of Y' header.
responses:
'200':
description: Successful Response
content:
application/json:
schema:
$ref: '#/components/schemas/AssetPage'
'422':
description: Validation Error
content:
application/json:
schema:
$ref: '#/components/schemas/HTTPValidationError'
'401':
description: Unauthenticated — missing, malformed, or expired Bearer token
content:
application/json:
schema:
$ref: '#/components/schemas/ErrorResponse'
'403':
description: Authenticated but not authorized for this resource
content:
application/json:
schema:
$ref: '#/components/schemas/ErrorResponse'
'404':
description: Resource not found in this tenant
content:
application/json:
schema:
$ref: '#/components/schemas/ErrorResponse'
'409':
description: Conflict — resource state prevents this action
content:
application/json:
schema:
$ref: '#/components/schemas/ErrorResponse'
'429':
description: Rate-limited (per-tenant token bucket)
content:
application/json:
schema:
$ref: '#/components/schemas/ErrorResponse'
/tenants/{slug}/datasets/images/{dataset_id}/assets/{asset_id}:
get:
tags:
- image_assets
summary: Get Asset
operationId: image_assets-get_asset
security:
- HTTPBearer: []
parameters:
- name: asset_id
in: path
required: true
schema:
type: string
format: uuid
title: Asset Id
- name: slug
in: path
required: true
schema:
type: string
title: Slug
- name: dataset_id
in: path
required: true
schema:
type: string
format: uuid
title: Dataset Id
responses:
'200':
description: Successful Response
content:
application/json:
schema:
$ref: '#/components/schemas/AssetResponse'
'422':
description: Validation Error
content:
application/json:
schema:
$ref: '#/components/schemas/HTTPValidationError'
'401':
description: Unauthenticated — missing, malformed, or expired Bearer token
content:
application/json:
schema:
$ref: '#/components/schemas/ErrorResponse'
'403':
description: Authenticated but not authorized for this resource
content:
application/json:
schema:
$ref: '#/components/schemas/ErrorResponse'
'404':
description: Resource not found in this tenant
content:
application/json:
schema:
$ref: '#/components/schemas/ErrorResponse'
'409':
description: Conflict — resource state prevents this action
content:
application/json:
schema:
$ref: '#/components/schemas/ErrorResponse'
'429':
description: Rate-limited (per-tenant token bucket)
content:
application/json:
schema:
$ref: '#/components/schemas/ErrorResponse'
/tenants/{slug}/datasets/images/{dataset_id}/assets/{asset_id}/download-url:
get:
tags:
- image_assets
summary: Get Asset Download Url
description: 'Presigned GET URL for the asset''s S3 object. 1-hour expiry.
Used by the labeling app to render the image on canvas.'
operationId: image_assets-get_asset_download_url
security:
- HTTPBearer: []
parameters:
- name: asset_id
in: path
required: true
schema:
type: string
format: uuid
title: Asset Id
- name: slug
in: path
required: true
schema:
type: string
title: Slug
- name: dataset_id
in: path
required: true
schema:
type: string
format: uuid
title: Dataset Id
responses:
'200':
description: Successful Response
content:
application/json:
schema:
$ref: '#/components/schemas/AssetDownloadUrl'
'422':
description: Validation Error
content:
application/json:
schema:
$ref: '#/components/schemas/HTTPValidationError'
'401':
description: Unauthenticated — missing, malformed, or expired Bearer token
content:
application/json:
schema:
$ref: '#/components/schemas/ErrorResponse'
'403':
description: Authenticated but not authorized for this resource
content:
application/json:
schema:
$ref: '#/components/schemas/ErrorResponse'
'404':
description: Resource not found in this tenant
content:
application/json:
schema:
$ref: '#/components/schemas/ErrorResponse'
'409':
description: Conflict — resource state prevents this action
content:
application/json:
schema:
$ref: '#/components/schemas/ErrorResponse'
'429':
description: Rate-limited (per-tenant token bucket)
content:
application/json:
schema:
$ref: '#/components/schemas/ErrorResponse'
/tenants/{slug}/datasets/images/{dataset_id}/assets/{asset_id}/thumbnail-url:
get:
tags:
- image_assets
summary: Get Asset Thumbnail Url
description: 'Presigned GET URL for the 320px-long-edge JPEG thumbnail (ADR-0026).
Returns 404 if the thumbnail wasn''t generated (extraction soft-failed, or
the asset was uploaded pre-feature). FE should fall back to /download-url
on 404.'
operationId: image_assets-get_asset_thumbnail_url
security:
- HTTPBearer: []
parameters:
- name: asset_id
in: path
required: true
schema:
type: string
format: uuid
title: Asset Id
- name: slug
in: path
required: true
schema:
type: string
title: Slug
- name: dataset_id
in: path
required: true
schema:
type: string
format: uuid
title: Dataset Id
responses:
'200':
description: Successful Response
content:
application/json:
schema:
$ref: '#/components/schemas/AssetDownloadUrl'
'422':
description: Validation Error
content:
application/json:
schema:
$ref: '#/components/schemas/HTTPValidationError'
'401':
description: Unauthenticated — missing, malformed, or expired Bearer token
content:
application/json:
schema:
$ref: '#/components/schemas/ErrorResponse'
'403':
description: Authenticated but not authorized for this resource
content:
application/json:
schema:
$ref: '#/components/schemas/ErrorResponse'
'404':
description: Resource not found in this tenant
content:
application/json:
schema:
$ref: '#/components/schemas/ErrorResponse'
'409':
description: Conflict — resource state prevents this action
content:
application/json:
schema:
$ref: '#/components/schemas/ErrorResponse'
'429':
description: Rate-limited (per-tenant token bucket)
content:
application/json:
schema:
$ref: '#/components/schemas/ErrorResponse'
/tenants/{slug}/datasets/images/{dataset_id}/assets/search:
post:
tags:
- image_assets
summary: Search Assets
description: 'Multimodal similarity search over the dataset''s embedded assets (ADR-0033).
Top-K (default 50, max 200), no pagination. Filters AND the vector ranking
— items that don''t match the filters are excluded even if visually identical.
Only assets with `embedding_status = ''ready''` participate; unembedded assets
are skipped.
`query.parts` is an ordered list of {text|image_uri|asset_id} blocks; the
model accepts mixed inputs in one query. `query.instruction` is optional
(server picks a default per dataset kind; must be English for the
retrieval-quality boost — ADR-0033).'
operationId: image_assets-search_assets
security:
- HTTPBearer: []
parameters:
- name: slug
in: path
required: true
schema:
type: string
title: Slug
- name: dataset_id
in: path
required: true
schema:
type: string
format: uuid
title: Dataset Id
- name: include
in: query
required: false
schema:
anyOf:
- type: string
- type: 'null'
description: CSV. `thumbnail_url` → presigned 320px-thumbnail GET per hit; `image_url` → full-res presigned GET per hit. Render the whole results grid in one round trip instead of a per-hit /thumbnail-url|/download-url fetch.
title: Include
description: CSV. `thumbnail_url` → presigned 320px-thumbnail GET per hit; `image_url` → full-res presigned GET per hit. Render the whole results grid in one round trip instead of a per-hit /thumbnail-url|/download-url fetch.
requestBody:
required: true
content:
application/json:
schema:
$ref: '#/components/schemas/SearchRequest'
responses:
'200':
description: Successful Response
content:
application/json:
schema:
$ref: '#/components/schemas/SearchResponse'
'422':
description: Validation Error
content:
application/json:
schema:
$ref: '#/components/schemas/HTTPValidationError'
'401':
description: Unauthenticated — missing, malformed, or expired Bearer token
content:
application/json:
schema:
$ref: '#/components/schemas/ErrorResponse'
'403':
description: Authenticated but not authorized for this resource
content:
application/json:
schema:
$ref: '#/components/schemas/ErrorResponse'
'404':
description: Resource not found in this tenant
content:
application/json:
schema:
$ref: '#/components/schemas/ErrorResponse'
'409':
description: Conflict — resource state prevents this action
content:
application/json:
schema:
$ref: '#/components/schemas/ErrorResponse'
'429':
description: Rate-limited (per-tenant token bucket)
content:
application/json:
schema:
$ref: '#/components/schemas/ErrorResponse'
/tenants/{slug}/datasets/images/{dataset_id}/assets/bulk-delete:
post:
tags:
- image_assets
summary: Bulk Delete
operationId: image_assets-bulk_delete
security:
- HTTPBearer: []
parameters:
- name: slug
in: path
required: true
schema:
type: string
title: Slug
- name: dataset_id
in: path
required: true
schema:
type: string
format: uuid
title: Dataset Id
- name: Idempotency-Key
in: header
required: false
schema:
anyOf:
- type: string
- type: 'null'
title: Idempotency-Key
requestBody:
required: true
content:
application/json:
schema:
$ref: '#/components/schemas/BulkOpRequest'
responses:
'202':
description: Successful Response
content:
application/json:
schema:
$ref: '#/components/schemas/JobResponse'
'422':
description: Validation Error
content:
application/json:
schema:
$ref: '#/components/schemas/HTTPValidationError'
'401':
description: Unauthenticated — missing, malformed, or expired Bearer token
content:
application/json:
schema:
$ref: '#/components/schemas/ErrorResponse'
'403':
description: Authenticated but not authorized for this resource
content:
application/json:
schema:
$ref: '#/components/schemas/ErrorResponse'
'404':
description: Resource not found in this tenant
content:
application/json:
schema:
$ref: '#/components/schemas/ErrorResponse'
'409':
description: Conflict — resource state prevents this action
content:
application/json:
schema:
$ref: '#/components/schemas/ErrorResponse'
'429':
description: Rate-limited (per-tenant token bucket)
content:
application/json:
schema:
$ref: '#/components/schemas/ErrorResponse'
/tenants/{slug}/datasets/images/{dataset_id}/assets/batch-delete:
post:
tags:
- image_assets
summary: Batch Delete Image Assets
description: 'Sync counterpart to `/bulk-delete`. Selection-driven: `asset_ids` only. Cap `MAX_SYNC_BATCH_SIZE = 1000`. Hard-deletes via the central `hard_delete_assets` helper (ADR-0051); idempotent. ADR-0041.'
operationId: image_assets-batch_delete_image_assets
security:
- HTTPBearer: []
parameters:
- name: slug
in: path
required: true
schema:
type: string
title: Slug
- name: dataset_id
in: path
required: true
schema:
type: string
format: uuid
title: Dataset Id
requestBody:
required: true
content:
application/json:
schema:
$ref: '#/components/schemas/AssetsBatchDeleteRequest'
responses:
'200':
description: Successful Response
content:
application/json:
schema:
$ref: '#/components/schemas/AssetsBatchDeleteResponse'
'422':
description: Validation Error
content:
application/json:
schema:
$ref: '#/components/schemas/HTTPValidationError'
'401':
description: Unauthenticated — missing, malformed, or expired Bearer token
content:
application/json:
schema:
$ref: '#/components/schemas/ErrorResponse'
'403':
description: Authenticated but not authorized for this resource
content:
application/json:
schema:
$ref: '#/components/schemas/ErrorResponse'
'404':
description: Resource not found in this tenant
content:
application/json:
schema:
$ref: '#/components/schemas/ErrorResponse'
'409':
description: Conflict — resource state prevents this action
content:
application/json:
schema:
$ref: '#/components/schemas/ErrorResponse'
'429':
description: Rate-limited (per-tenant token bucket)
content:
application/json:
schema:
$ref: '#/components/schemas/ErrorResponse'
components:
schemas:
AssetUploadInitMultipartResponse:
properties:
upload_type:
type: string
const: multipart
title: Upload Type
default: multipart
s3_key:
type: string
title: S3 Key
upload_id:
type: string
title: Upload Id
parts:
items:
$ref: '#/components/schemas/MultipartPartUrl'
type: array
title: Parts
expires_at:
type: string
format: date-time
title: Expires At
type: object
required:
- s3_key
- upload_id
- parts
- expires_at
title: AssetUploadInitMultipartResponse
ErrorResponse:
type: object
required:
- error
properties:
error:
type: object
required:
- code
- message
properties:
code:
$ref: '#/components/schemas/ErrorCode'
message:
type: string
description: Human-readable; free to evolve. Don't pattern-match on this.
hint:
type: string
nullable: true
description: When present, a concrete next step (often references a CLI command).
details:
type: object
nullable: true
description: Per-`code` structured payload; schema documented per code.
request_id:
type: string
nullable: true
description: Correlation id for support / log lookups.
AssetUploadInitBatchItem:
properties:
client_ref:
type: string
maxLength: 512
minLength: 1
title: Client Ref
description: Opaque caller-supplied token echoed back on the matching response item
filename:
type: string
maxLength: 512
minLength: 1
title: Filename
description: Original file name
size_bytes:
type: integer
exclusiveMinimum: 0.0
title: Size Bytes
description: Declared size; validated against per-format max
content_type:
type: string
maxLength: 128
minLength: 1
title: Content Type
description: MIME; validated against the kind's accepted list (ADR-0017)
type: object
required:
- client_ref
- filename
- size_bytes
- content_type
title: AssetUploadInitBatchItem
description: 'One file in a batch upload-init request. `client_r
# --- truncated at 32 KB (54 KB total) ---
# Full source: https://raw.githubusercontent.com/api-evangelist/superb-ai/refs/heads/main/openapi/superb-ai-image-assets-api-openapi.yml