Superb AI Image Datasets API

The image_datasets API from Superb AI — 4 operation(s) for image_datasets.

Operations 6

POST /tenants/{slug}/datasets/images Create Image Dataset #
GET /tenants/{slug}/datasets/images/{dataset_id} Get Image Dataset #
PATCH /tenants/{slug}/datasets/images/{dataset_id} Update Image Dataset #
DELETE /tenants/{slug}/datasets/images/{dataset_id} Delete Image Dataset #
GET /tenants/{slug}/datasets/images/{dataset_id}/stats Get Image Dataset Stats #
POST /tenants/{slug}/datasets/images/{dataset_id}/embed Embed Image Dataset #

Work with this as data

Every API here is available over the APIs.io API and to AI agents over MCP.

MCP server

One button, every client — Claude, Cursor, VS Code and the rest.

https://apis.io/mcp

Tools for apis

7 MCP tools reach this
  • 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.
All 92 tools →

Call it yourself

curl for this page
This API
curl "https://apis.io/api/v1/apis/superb-ai-image-datasets-api"
All apis
curl "https://apis.io/api/v1/apis?limit=25"

Discovery needs no key. Ratings and market analysis are Pro.

Get an API key

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 Specification

superb-ai-image-datasets-api-openapi.yml Raw ↑
openapi: 3.2.0
info:
  title: MLOps Platform Image Datasets API
  description: Multi-tenant labeling-platform backend.
  version: 0.1.0
tags:
- name: image_datasets
paths:
  /tenants/{slug}/datasets/images:
    post:
      tags:
      - image_datasets
      summary: Create Image Dataset
      operationId: image_datasets-create_image_dataset
      security:
      - HTTPBearer: []
      parameters:
      - name: slug
        in: path
        required: true
        schema:
          type: string
          title: Slug
      requestBody:
        required: true
        content:
          application/json:
            schema:
              $ref: '#/components/schemas/DatasetCreate'
      responses:
        '201':
          description: Successful Response
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/DatasetResponse'
        '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}:
    get:
      tags:
      - image_datasets
      summary: Get Image Dataset
      operationId: image_datasets-get_image_dataset
      security:
      - HTTPBearer: []
      parameters:
      - name: dataset_id
        in: path
        required: true
        schema:
          type: string
          format: uuid
          title: Dataset Id
      - name: slug
        in: path
        required: true
        schema:
          type: string
          title: Slug
      responses:
        '200':
          description: Successful Response
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/DatasetResponse'
        '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'
    patch:
      tags:
      - image_datasets
      summary: Update Image Dataset
      operationId: image_datasets-update_image_dataset
      security:
      - HTTPBearer: []
      parameters:
      - name: dataset_id
        in: path
        required: true
        schema:
          type: string
          format: uuid
          title: Dataset Id
      - name: slug
        in: path
        required: true
        schema:
          type: string
          title: Slug
      requestBody:
        required: true
        content:
          application/json:
            schema:
              $ref: '#/components/schemas/DatasetUpdate'
      responses:
        '200':
          description: Successful Response
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/DatasetResponse'
        '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'
    delete:
      tags:
      - image_datasets
      summary: Delete Image Dataset
      operationId: image_datasets-delete_image_dataset
      security:
      - HTTPBearer: []
      parameters:
      - name: dataset_id
        in: path
        required: true
        schema:
          type: string
          format: uuid
          title: Dataset Id
      - name: slug
        in: path
        required: true
        schema:
          type: string
          title: Slug
      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}/stats:
    get:
      tags:
      - image_datasets
      summary: Get Image Dataset Stats
      description: 'Total + per-status counts of active assets — for the FE grid header

        (FE feedback 2026-05-07). Separate endpoint per ADR-0012 (cursor list,

        no totals on list responses).


        Also reports embedding coverage (`embedding: {pending, ready, ...}`) so the

        FE can show a "search-ready: 1872 / 2000" badge and prompt for re-embed

        when new uploads land.'
      operationId: image_datasets-get_image_dataset_stats
      security:
      - HTTPBearer: []
      parameters:
      - name: dataset_id
        in: path
        required: true
        schema:
          type: string
          format: uuid
          title: Dataset Id
      - name: slug
        in: path
        required: true
        schema:
          type: string
          title: Slug
      responses:
        '200':
          description: Successful Response
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/DatasetStatsResponse'
        '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}/embed:
    post:
      tags:
      - image_datasets
      summary: Embed Image Dataset
      description: 'Kick off a dataset-wide embedding pass (ADR-0033).


        Embeds every active image asset in the dataset that doesn''t yet have a

        `ready` embedding. Returns a job; poll `/jobs/{id}` for status. The

        actual GPU cost (gpu_seconds_used) is recorded on the job row when the

        SageMaker endpoint reports usage. Per-tenant 3-job cap (ADR-0023) applies.


        Video datasets are not yet supported (returns 400). See ADR-0033 for

        the rationale (single-vector vs per-segment scope decision deferred).'
      operationId: image_datasets-embed_image_dataset
      security:
      - HTTPBearer: []
      parameters:
      - name: dataset_id
        in: path
        required: true
        schema:
          type: string
          format: uuid
          title: Dataset Id
      - name: slug
        in: path
        required: true
        schema:
          type: string
          title: Slug
      - name: Idempotency-Key
        in: header
        required: false
        schema:
          anyOf:
          - type: string
          - type: 'null'
          title: Idempotency-Key
      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'
components:
  schemas:
    EmbeddingStatus:
      type: string
      enum:
      - pending
      - ready
      - failed
      title: EmbeddingStatus
    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.
    JobResponse:
      properties:
        id:
          type: string
          format: uuid
          title: Id
          description: Server-assigned job identifier.
        kind:
          $ref: '#/components/schemas/JobKind'
          description: The kind of work this job performs.
        target:
          additionalProperties: true
          type: object
          title: Target
          description: Kind-specific parameters describing what the job operates on (shape varies per `kind`; internal orchestration fields are omitted).
        status:
          $ref: '#/components/schemas/JobStatus'
          description: Current lifecycle state of the job.
        total:
          type: integer
          title: Total
          description: Total number of work items the job will process.
        processed:
          type: integer
          title: Processed
          description: Number of work items processed so far.
        succeeded:
          type: integer
          title: Succeeded
          description: Number of processed items that succeeded.
        failed:
          type: integer
          title: Failed
          description: Number of processed items that failed.
        skipped:
          type: integer
          title: Skipped
          description: Number of items skipped (ineligible / already in target state).
          default: 0
        error:
          anyOf:
          - type: string
          - type: 'null'
          title: Error
          description: Failure message when the job errored, else null.
        result_summary:
          anyOf:
          - additionalProperties: true
            type: object
          - type: 'null'
          title: Result Summary
          description: Kind-specific summary of the outcome, populated as the job runs and finishes. Stays a plain object here because the key set varies per `kind` (the union isn't a useful client type); the per-kind keys are registry-validated on the write side (`app/job_results.py`), so a given `kind` always carries the same shape.
        created_by:
          anyOf:
          - type: string
            format: uuid
          - type: 'null'
          title: Created By
          description: User who created the job, or null if system-initiated.
        created_at:
          type: string
          format: date-time
          title: Created At
          description: When the job was created.
        completed_at:
          anyOf:
          - type: string
            format: date-time
          - type: 'null'
          title: Completed At
          description: When the job reached a terminal state, or null if still in flight.
        pct:
          anyOf:
          - type: integer
          - type: 'null'
          title: Pct
          description: 'Derived progress percent. A COMPLETED job is always 100 — even a no-op

            with total==0 finished all of its (zero) work; showing 0/null on a done job

            was misleading. Otherwise processed/total, or None when total is unknown

            (freshly-queued, denominator not yet resolved).'
          readOnly: true
      type: object
      required:
      - id
      - kind
      - target
      - status
      - total
      - processed
      - succeeded
      - failed
      - error
      - created_by
      - created_at
      - completed_at
      - pct
      title: JobResponse
    DatasetStatsResponse:
      properties:
        total:
          type: integer
          title: Total
        by_status:
          additionalProperties:
            type: integer
          propertyNames:
            $ref: '#/components/schemas/AssetStatus'
          type: object
          title: By Status
        embedding:
          anyOf:
          - additionalProperties:
              type: integer
            propertyNames:
              $ref: '#/components/schemas/EmbeddingStatus'
            type: object
          - type: 'null'
          title: Embedding
      type: object
      required:
      - total
      - by_status
      title: DatasetStatsResponse
      description: 'Total counts for the FE asset grid header (FE feedback 2026-05-07).

        Separate endpoint per ADR-0012 (cursor pagination, no totals on list).


        `embedding`: semantic-search coverage so the FE can show

        "1872 / 2000 embedded" badges and prompt the user to re-embed when there

        are pending arrivals.'
    AssetStatus:
      type: string
      enum:
      - pending
      - processing
      - ready
      - failed
      - deleted
      title: AssetStatus
    JobStatus:
      type: string
      enum:
      - pending
      - queued
      - running
      - completed
      - failed
      - canceled
      title: JobStatus
    JobKind:
      type: string
      enum:
      - build_project_version_manifest
      - bulk_delete_image_assets
      - bulk_update_tags_project
      - bulk_add_assets_project
      - bulk_remove_assets_project
      - bulk_assign_assets_project
      - bulk_unassign_assets_project
      - bulk_approve_assets_project
      - bulk_reject_assets_project
      - bulk_create_annotations
      - bulk_delete_annotations
      - embed_dataset
      - export_dataset
      - auto_label_project
      - cleanup_s3_objects
      - delete_project_cascade
      - delete_dataset_cascade
      - duplicate_project_scope
      - bulk_set_status_assets_project
      title: JobKind
    ValidationError:
      properties:
        loc:
          items:
            anyOf:
            - type: string
            - type: integer
          type: array
          title: Location
        msg:
          type: string
          title: Message
        type:
          type: string
          title: Error Type
        input:
          title: Input
        ctx:
          type: object
          title: Context
      type: object
      required:
      - loc
      - msg
      - type
      title: ValidationError
    DatasetResponse:
      properties:
        id:
          type: string
          format: uuid
          title: Id
        name:
          type: string
          title: Name
        description:
          anyOf:
          - type: string
          - type: 'null'
          title: Description
        created_by:
          anyOf:
          - type: string
            format: uuid
          - type: 'null'
          title: Created By
        created_at:
          type: string
          format: date-time
          title: Created At
        updated_at:
          type: string
          format: date-time
          title: Updated At
      type: object
      required:
      - id
      - name
      - description
      - created_by
      - created_at
      - updated_at
      title: DatasetResponse
    ErrorCode:
      type: string
      enum:
      - UNCATEGORIZED
      - AUTH_MISSING
      - AUTH_INVALID_CREDENTIAL
      - AUTH_TOKEN_EXPIRED
      - AUTH_FORBIDDEN
      - AUTH_TENANT_MISMATCH
      - VALIDATION_ERROR
      - VALIDATION_REQUIRED_CLASSIFICATION_MISSING
      - BAD_REQUEST
      - INVALID_CURSOR
      - INVALID_FILTER
      - UNSUPPORTED_OPERATION
      - PAYLOAD_TOO_LARGE
      - TENANT_NOT_FOUND
      - TENANT_SLUG_TAKEN
      - USER_NOT_FOUND
      - USER_EMAIL_TAKEN
      - INVITATION_NOT_FOUND
      - INVITATION_PENDING
      - INVITATION_NOT_PENDING
      - INVITATION_EXPIRED
      - LAST_ADMIN
      - DATASET_NOT_FOUND
      - DATASET_NAME_TAKEN
      - DATASET_DELETED
      - DATASET_ASSET_CAP_EXCEEDED
      - ASSET_NOT_FOUND
      - ASSET_DELETED
      - ASSET_NOT_EMBEDDED
      - ASSET_FORMAT_UNSUPPORTED
      - ASSET_TOO_LARGE
      - PROJECT_NOT_FOUND
      - PROJECT_ARCHIVED
      - PROJECT_MEMBER_NOT_FOUND
      - PROJECT_CLASS_NOT_FOUND
      - VERSION_NOT_FOUND
      - MODEL_NOT_FOUND
      - RESOURCE_NOT_READY
      - PROJECT_STATE_FORBIDDEN
      - CLASS_LOCKED
      - CLASS_IN_USE
      - DEPLOYMENT_NOT_FOUND
      - DEPLOYMENT_STATE_FORBIDDEN
      - EXPORT_EXPIRED
      - EXPORT_FAILED
      - ANNOTATION_NOT_FOUND
      - JOB_NOT_FOUND
      - JOB_ALREADY_RUNNING
      - JOB_PER_TENANT_CAP
      - JOB_TERMINAL
      - EMBEDDER_UNAVAILABLE
      - EMBEDDER_INVOCATION_FAILED
      - NAME_TAKEN
      - IDEMPOTENCY_REPLAY
      - CONCURRENT_MODIFICATION
      - RATE_LIMITED
      - RESOURCE_LIMIT_EXCEEDED
      - INTERNAL_ERROR
      - DEPENDENCY_UNAVAILABLE
      - MODEL_LOADING
      - MODEL_STARTING
      description: Stable error code enum. Pattern-match here, never on `message`. Adding values is non-breaking; renaming/removing is a major bump.
    DatasetUpdate:
      properties:
        name:
          anyOf:
          - type: string
            maxLength: 255
            minLength: 1
          - type: 'null'
          title: Name
        description:
          anyOf:
          - type: string
            maxLength: 1000
          - type: 'null'
          title: Description
      type: object
      title: DatasetUpdate
      description: 'PATCH semantics: omit a field to leave it unchanged. Explicit `null` is

        treated the same as omit (use `""` to clear `description`). Future revision

        may switch to JSON Merge Patch with explicit-null = clear semantics if FE asks.'
    DatasetCreate:
      properties:
        name:
          type: string
          maxLength: 255
          minLength: 1
          title: Name
        description:
          anyOf:
          - type: string
            maxLength: 1000
          - type: 'null'
          title: Description
      type: object
      required:
      - name
      title: DatasetCreate
    HTTPValidationError:
      properties:
        detail:
          items:
            $ref: '#/components/schemas/ValidationError'
          type: array
          title: Detail
      type: object
      title: HTTPValidationError
  securitySchemes:
    HTTPBearer:
      type: http
      description: Cognito access token
      scheme: bearer