AI3D Studio Batches API

The Batches API from AI3D Studio — 3 operation(s) for batches.

Operations 4

POST /batches Start a batch: one run per Library picture #
GET /batches List your recent batches of a scene #
GET /batches/{id} Poll a batch #
POST /batches/{id}/retry Run the failed pictures again #

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/ai3d-studio:ai3d-studio-batches-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

ai3d-studio-batches-api-openapi.yml Raw ↑
openapi: 3.2.0
info:
  title: AI3D Studio Batches API
  version: 1.0.0
  description: Public, API-key-authenticated endpoints for AI generation. Authenticate with your `sk-` key as a Bearer token (or `x-api-key`). Generation bills credits to the key’s account.
servers:
- url: https://ai3d.studio/v1
security:
- bearerAuth: []
- apiKeyHeader: []
tags:
- name: Batches
paths:
  /batches:
    post:
      operationId: createBatch
      x-required-scope: generate
      summary: 'Start a batch: one run per Library picture'
      description: 'Queue one run of the same model, scene and options for each picture, started in the background as your plan’s concurrency allows. The scenes and models an app batches are `generation.batches` in `/capabilities`; your plan sets how many pictures one batch may hold (`allowance` on `GET /batches`). A picture is the `assetId` of one of your own Library images — the `assets[].id` of a finished image run from `/workflows/{id}` — never a URL or bytes. Nothing is charged on submit: each run is charged as it starts and refunded if it fails; the whole quote (`quotedCredits`) must be covered by your balance now. For an API key or connection with a monthly credit limit the whole quote is held against it when the batch is accepted, and a batch that would pass it answers 429; each picture then counts its real cost, and nothing once it fails and is refunded, is cancelled or is refused. The `Idempotency-Key` header is REQUIRED: a retry with the same key and body returns the original batch (200) instead of a second one (202).'
      parameters:
      - name: Idempotency-Key
        in: header
        required: true
        schema:
          type: string
          pattern: ^[A-Za-z0-9._:-]{8,128}$
        description: Unique per batch (a UUID works). Reuse it on a retry; reusing it with a different body answers 409 `idempotency_conflict`.
      requestBody:
        required: true
        content:
          application/json:
            schema:
              type: object
              required:
              - model
              - scene
              - items
              additionalProperties: false
              properties:
                model:
                  type: string
                scene:
                  type: string
                  description: A scene from `generation.batches`.
                options:
                  type: object
                  additionalProperties: true
                  description: Options every run shares, as for `/generate`; the picture field is filled per item.
                prompt:
                  type: string
                items:
                  type: array
                  minItems: 1
                  maxItems: 100
                  items:
                    type: object
                    additionalProperties: false
                    properties:
                      assetId:
                        type: string
                        description: One of your Library images.
                      name:
                        type: string
                        maxLength: 400
                        description: What the run is filed as.
                    required:
                    - assetId
                projectId:
                  type: string
                  description: A Library project to file the runs in.
                notifyByEmail:
                  type: boolean
                  description: Email the account once the batch settles.
                expectedCredits:
                  type: integer
                  description: The quote you showed; a different current price answers 409 `price_changed` and queues nothing.
      responses:
        '200':
          description: A replay of an accepted batch.
        '202':
          description: 'Batch accepted: the batch with its items, `quotedCredits` and your `balance`. Poll `GET /batches/{id}`.'
          content:
            application/json:
              schema:
                type: object
                additionalProperties: true
        '400':
          description: Missing or malformed `Idempotency-Key` (`idempotency_key_required`) or body (`invalid_request`)
        '401':
          $ref: '#/components/responses/Unauthorized'
        '402':
          description: The balance does not cover the quote
        '403':
          description: The plan includes no batches (`plan_required`) or not this model (`model_unavailable`)
        '404':
          description: The app batches no such scene or model (`batches_unavailable`)
        '409':
          description: '`idempotency_conflict` or `price_changed` (with `expectedCredits` and `actualCredits`)'
        '422':
          description: '`too_many_items` (with `limit`), `invalid_inputs` (with `inputErrors`: picture index → `unavailable` or `duplicate`), `invalid_options` or `project_unavailable`'
        '429':
          description: Rate limited, five batches already running (`too_many_active_batches`), or the key’s or connection’s monthly credit limit would be passed (with `needed` and `resetsAt`)
      security:
      - bearerAuth: []
      - apiKeyHeader: []
      - oauth2:
        - generate
      tags:
      - Batches
    get:
      operationId: listBatches
      x-required-scope: read
      summary: List your recent batches of a scene
      description: Your batches of one scene from the last 24 hours, newest first.
      parameters:
      - name: scene
        in: query
        required: true
        schema:
          type: string
      - name: limit
        in: query
        required: false
        schema:
          type: integer
          minimum: 1
          maximum: 10
          default: 3
      responses:
        '200':
          description: 'Newest first: `batches`, and `allowance` — how many pictures your plan lets one batch hold (0: none).'
          content:
            application/json:
              schema:
                type: object
                additionalProperties: true
        '401':
          $ref: '#/components/responses/Unauthorized'
      security:
      - bearerAuth: []
      - apiKeyHeader: []
      - oauth2:
        - read
      tags:
      - Batches
  /batches/{id}:
    get:
      operationId: getBatch
      x-required-scope: read
      summary: Poll a batch
      description: 'The batch’s `status` (`running`, `done`, `cancelled`), its `counts` and each item: `state` (`queued`, `running`, `done`, `failed`, `cancelled`), the `workflowId` of its run once it has started (poll `/workflows/{id}` for the files), `credits`, `errorCode` and whether it is `retryable`.'
      parameters:
      - name: id
        in: path
        required: true
        schema:
          type: string
      responses:
        '200':
          description: The batch
          content:
            application/json:
              schema:
                type: object
                additionalProperties: true
        '401':
          $ref: '#/components/responses/Unauthorized'
        '404':
          description: Unknown batch (`not_found`)
      security:
      - bearerAuth: []
      - apiKeyHeader: []
      - oauth2:
        - read
      tags:
      - Batches
  /batches/{id}/retry:
    post:
      operationId: retryBatch
      x-required-scope: generate
      summary: Run the failed pictures again
      description: Each failed picture (or one stopped for want of credits) is queued again as a new run; send `itemIds` to retry only some. Charged and capped like a new batch of that many pictures.
      parameters:
      - name: id
        in: path
        required: true
        schema:
          type: string
      requestBody:
        required: false
        content:
          application/json:
            schema:
              type: object
              additionalProperties: false
              properties:
                itemIds:
                  type: array
                  items:
                    type: string
      responses:
        '200':
          description: '`requeued` (how many) and the batch'
          content:
            application/json:
              schema:
                type: object
                additionalProperties: true
        '401':
          $ref: '#/components/responses/Unauthorized'
        '402':
          description: The balance does not cover the retry
        '404':
          description: Unknown batch (`not_found`)
        '409':
          description: Nothing to retry (`nothing_to_retry`)
        '429':
          description: Rate limited, or the monthly credit limit would be passed
      security:
      - bearerAuth: []
      - apiKeyHeader: []
      - oauth2:
        - generate
      tags:
      - Batches
components:
  schemas:
    Error:
      type: object
      properties:
        code:
          type: integer
          example: -1
        message:
          type: string
      required:
      - code
      - message
  responses:
    Unauthorized:
      description: Missing, malformed, or invalid API key
      content:
        application/json:
          schema:
            $ref: '#/components/schemas/Error'
  securitySchemes:
    bearerAuth:
      type: http
      scheme: bearer
      description: Your `sk-` API key (`sk-[A-Za-z0-9]{38}`, checksummed) presented as a Bearer token. API access is a plan right (see pricing); a plan that does not include it answers 403 `plan_required`.
    apiKeyHeader:
      type: apiKey
      in: header
      name: x-api-key
      description: Your `sk-` API key in the `x-api-key` header.
    oauth2:
      type: oauth2
      description: 'OAuth 2.1 for an agent acting for a signed-in account: the authorization code flow with PKCE (S256), or client credentials for a client registered from the dashboard. Send the RFC 8707 `resource` parameter `https://ai3d.studio/v1` on the authorization and token requests: a token minted for another resource, the MCP server included, is refused here. Authorization server metadata: `https://ai3d.studio/.well-known/oauth-authorization-server`.'
      flows:
        authorizationCode:
          authorizationUrl: https://ai3d.studio/api/auth/oauth2/authorize
          tokenUrl: https://ai3d.studio/api/auth/oauth2/token
          refreshUrl: https://ai3d.studio/api/auth/oauth2/token
          scopes:
            read: Read the account, models, quotes, runs, batches and the Library.
            generate: Start runs that spend credits, and file new creations in the Library.
        clientCredentials:
          tokenUrl: https://ai3d.studio/api/auth/oauth2/token
          scopes:
            read: Read the account, models, quotes, runs, batches and the Library.
            generate: Start runs that spend credits, and file new creations in the Library.