bitbybit-dev CAD Operations API

The CAD Operations API from bitbybit-dev — 3 operation(s) for cad operations.

Operations 3

POST /api/v1/cad/execute CAD - execute a single operation #
POST /api/v1/cad/pipeline CAD - execute a chained pipeline #
POST /api/v1/cad/compound CAD - execute compound (parallel) operations #

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/bitbybit-dev:bitbybit-dev-cad-operations-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

bitbybit-dev-cad-operations-api-openapi.yml Raw ↑
openapi: 3.2.0
info:
  title: Bitbybit CAD Cloud CAD Operations API
  version: 1.6.0
  description: High-performance parametric CAD model generation API. Supports multi-format output (STEP, GLTF, decomposed mesh), pipeline execution, file-based conversion, and async job processing.
  contact:
    name: Bitbybit
    url: https://bitbybit.dev
  termsOfService: https://bitbybit.dev/terms-and-conditions
  license:
    name: Proprietary
    url: https://bitbybit.dev/terms-and-conditions
servers:
- url: https://api.bitbybit.dev
  description: Production
security:
- ApiKeyAuth: []
tags:
- name: CAD Operations
paths:
  /api/v1/cad/execute:
    post:
      tags:
      - CAD Operations
      summary: CAD - execute a single operation
      description: Runs a single CAD operation by its fully-qualified identifier.
      requestBody:
        required: true
        content:
          application/json:
            schema:
              $ref: '#/components/schemas/ExecuteBody'
      responses:
        '202':
          description: Task accepted
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/TaskAcceptedResponse'
        '400':
          description: Validation error
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/ErrorResponse'
        '500':
          description: Server error
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/ErrorResponse'
      operationId: postApiV1CadExecute
      x-operation-id-source: derived
  /api/v1/cad/pipeline:
    post:
      tags:
      - CAD Operations
      summary: CAD - execute a chained pipeline
      description: Runs multiple operations sequentially. Use '$ref:N' in params to reference step N's result.
      requestBody:
        required: true
        content:
          application/json:
            schema:
              $ref: '#/components/schemas/PipelineBody'
      responses:
        '202':
          description: Task accepted
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/TaskAcceptedResponse'
        '400':
          description: Validation error
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/ErrorResponse'
        '500':
          description: Server error
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/ErrorResponse'
      operationId: postApiV1CadPipeline
      x-operation-id-source: derived
  /api/v1/cad/compound:
    post:
      tags:
      - CAD Operations
      summary: CAD - execute compound (parallel) operations
      description: Runs several independent CAD operations in parallel as one compound task. Each sub-operation is executed on its own and produces its own downloadable result, so use this when the operations do not depend on each other - for a sequence where each step consumes the previous one's output, use the chained pipeline endpoint instead. Returns 202 with a compound task id; poll it and download the per-sub-task manifest when it completes.
      requestBody:
        required: true
        content:
          application/json:
            schema:
              $ref: '#/components/schemas/CompoundExecuteBody'
      responses:
        '202':
          description: Compound task accepted
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/CompoundTaskAcceptedResponse'
        '400':
          description: Validation error
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/ErrorResponse'
        '500':
          description: Server error
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/ErrorResponse'
      operationId: postApiV1CadCompound
      x-operation-id-source: derived
components:
  schemas:
    CompoundExecuteBody:
      type: object
      properties:
        parallel:
          type: boolean
          const: true
          description: Must be true - signals that items should be processed concurrently
        items:
          minItems: 1
          maxItems: 100
          type: array
          items:
            $ref: '#/components/schemas/CompoundItem'
          description: List of independent CAD operations to execute in parallel. Each item becomes a sub-task.
      required:
      - parallel
      - items
      additionalProperties: false
      description: Execute multiple independent Bitbybit CAD operations in parallel. Each item runs as a separate sub-task and can be polled individually.
    TaskCreatedResult:
      type: object
      properties:
        taskId:
          type: string
          description: Unique task identifier - use this to poll for status and retrieve results
          format: uuid
        status:
          type: string
          const: queued
          description: Initial task status (always 'queued' upon creation)
        statusUrl:
          type: string
          description: Relative URL to poll for task status updates
          example: /api/v1/tasks/{taskId}
      required:
      - taskId
      - status
      - statusUrl
      additionalProperties: false
      description: Returned when a CAD task is accepted. Poll the statusUrl to track progress.
    TaskStatus:
      type: string
      enum:
      - waiting
      - queued
      - processing
      - completed
      - failed
      - cancelled
      - expired
      description: 'Task lifecycle state: waiting (pending dependencies), queued (in queue), processing (actively computing), completed (result available), failed (error occurred), cancelled (user-cancelled), expired (result TTL exceeded)'
    PipelineOutputFormat:
      type: string
      enum:
      - step
      - stpz
      - decomposed-mesh
      - gltf
      - json
      - csv
      - stl
      - 3mf
      - brep
      - brep-binary
      description: 'Pipeline output file format. Includes all standard formats plus: ''json'' (JSON data), ''csv'' (CSV text), ''stl'' (binary STL mesh - Manifold/JSCAD only), ''3mf'' (3MF mesh package - Manifold/JSCAD only), ''brep'' (OpenCascade BREP as text, which OCCT-based tools such as FreeCAD read) and ''brep-binary'' (OpenCascade binary BREP, the smallest and fastest exact form, which keeps the numbering of faces and edges; read back with occt.io.loadBrepBinary) - both OCCT only, without triangulation.'
    LengthUnit:
      type: string
      enum:
      - mm
      - cm
      - m
      - in
      description: 'A unit of length: ''mm'' (millimetres), ''cm'' (centimetres), ''m'' (metres) or ''in'' (inches).'
    InputFileItem:
      type: object
      properties:
        fileId:
          type: string
          minLength: 1
          description: ID of a previously uploaded file (from POST /files/upload)
        role:
          type: string
          minLength: 1
          description: Role identifier for the file (e.g. 'step-model', 'coordinates-csv')
      required:
      - fileId
      - role
      additionalProperties: false
      description: Reference to an uploaded file to be used as input
    MapStep:
      type: object
      properties:
        type:
          type: string
          const: map
          description: Declares this step as a map (iteration) step
        items:
          description: Source array to iterate over. Typically a '$ref:N' reference to a previous step that produced an array.
        steps:
          minItems: 1
          type: array
          items:
            $ref: '#/components/schemas/PipelineStep'
          description: Sub-steps to execute for each item. Use '$item' for the current element, '$index' for the iteration number.
        reduce:
          description: Optional sub-steps to combine map results. Use '$mapResult' to reference the collected array of iteration outputs.
          type: array
          items:
            $ref: '#/components/schemas/PipelineStep'
      required:
      - type
      - items
      - steps
      description: Iterate over an array, executing sub-steps for each element. Produces an array of results (or a reduced value).
    PipelineOutputOptions:
      type: object
      properties:
        formats:
          minItems: 1
          type: array
          items:
            $ref: '#/components/schemas/PipelineOutputFormat'
          description: Output formats to generate. Supports standard CAD formats (step, stpz, gltf, decomposed-mesh) plus pipeline-specific formats (json, csv, stl, 3mf, brep, brep-binary).
        meshPrecision:
          description: Tessellation precision for mesh-based outputs (decomposed-mesh and gltf). Lower values produce denser meshes.
          $ref: '#/components/schemas/MeshPrecision'
        gltfMeshPrecision:
          description: Override tessellation precision specifically for glTF output. When set, takes precedence over meshPrecision for glTF only.
          $ref: '#/components/schemas/MeshPrecision'
        adjustYtoZ:
          description: Convert from Y-up to Z-up coordinate system in the output. Useful for software that expects Z-up.
          type: boolean
        includePipelineInMetadata:
          description: Include the full pipeline definition in metadata.json. Defaults to true. Set to false to exclude it for smaller metadata.
          type: boolean
        unit:
          description: 'The unit the pipeline''s shapes are modelled in. Given, a STEP output is written at its true size in millimetres, so CAD tools open the shapes at the right size, and a glTF output is written in metres, the unit glTF viewers assume. Left out, the numbers are written as they are: STEP takes them as millimetres and glTF holds them unscaled. The other formats carry no unit and always hold the numbers as they are. A design build''s documents state their own unit, and a unit given here must be the same.'
          $ref: '#/components/schemas/LengthUnit'
      required:
      - formats
      additionalProperties: false
      description: Controls which output formats are generated for pipeline results. Supports additional formats (json, csv, stl, 3mf, brep, brep-binary) beyond standard model outputs.
    PipelineAnyStep:
      anyOf:
      - $ref: '#/components/schemas/MapStep'
      - $ref: '#/components/schemas/ChoiceStep'
      - $ref: '#/components/schemas/PipelineStep'
      description: A pipeline step - either a plain operation, a map (iteration), or a choice (conditional).
    MeshPrecision:
      type: number
      minimum: 0.0001
      maximum: 10
      description: 'Mesh tessellation precision (lower = finer). Range: [0.0001, 10]'
      example: 0.1
    ComparisonOperator:
      type: string
      enum:
      - eq
      - neq
      - gt
      - gte
      - lt
      - lte
      - exists
      description: 'Comparison operator: ''eq'' (equal), ''neq'' (not equal), ''gt'' (greater than), ''gte'' (greater or equal), ''lt'' (less than), ''lte'' (less or equal), ''exists'' (value is not null/undefined).'
    PipelineBody:
      type: object
      properties:
        steps:
          minItems: 1
          maxItems: 50
          type: array
          items:
            $ref: '#/components/schemas/PipelineAnyStep'
          description: Ordered list of CAD operations executed sequentially. Later steps can reference earlier results using '$ref:N' syntax. Supports map and choice control-flow steps.
        inputFiles:
          description: References to previously uploaded files. Use '$file:N' in step params to inject file contents (optionally '$file:N:<format>:<codec>' to pick a read format and/or decompress - see PipelineStep.params).
          maxItems: 5
          type: array
          items:
            $ref: '#/components/schemas/InputFileItem'
        outputs:
          description: Output format options applied to the final pipeline result. Supports json, csv, stl, 3mf in addition to standard formats. If omitted, raw result data is stored.
          $ref: '#/components/schemas/PipelineOutputOptions'
      required:
      - steps
      additionalProperties: false
      description: Execute a chain of Bitbybit CAD operations sequentially. Supports $ref:N step references, $file:N file inputs, map iteration, and choice conditionals.
    ChoiceStep:
      type: object
      properties:
        type:
          type: string
          const: choice
          description: Declares this step as a choice (conditional) step
        value:
          description: Value to compare. Typically a '$ref:N' reference to a previous step result.
        operator:
          description: Comparison operator to apply between value and compareTo
          $ref: '#/components/schemas/ComparisonOperator'
        compareTo:
          description: Value to compare against. Not required for 'exists' operator.
        then:
          minItems: 1
          type: array
          items:
            $ref: '#/components/schemas/PipelineStep'
          description: Sub-steps to execute when condition is true
        else:
          description: Sub-steps to execute when condition is false. If omitted, produces null.
          type: array
          items:
            $ref: '#/components/schemas/PipelineStep'
      required:
      - type
      - value
      - operator
      - then
      description: Conditional execution - evaluate a condition and run the matching branch.
    CompoundTaskAcceptedResponse:
      type: object
      properties:
        ok:
          type: boolean
          const: true
        data:
          $ref: '#/components/schemas/CompoundTaskCreatedResult'
      required:
      - ok
      - data
      additionalProperties: false
      description: HTTP 202 response when a compound (parallel) task is accepted
    ExecuteBody:
      type: object
      properties:
        operation:
          type: string
          minLength: 1
          description: Fully-qualified CAD operation identifier (e.g. 'occt.shapes.solid.createBox', 'manifold.primitives.cube', 'jscad.booleans.union'). Supports OCCT, Manifold, JSCAD, and vector/math operations.
        params:
          description: Operation-specific parameters - varies by operation. See model definitions for available parameters.
      required:
      - operation
      additionalProperties: false
      description: Execute a single Bitbybit CAD operation. The operation runs asynchronously and returns a task ID for polling.
    CompoundItem:
      type: object
      properties:
        operation:
          type: string
          minLength: 1
          description: Fully-qualified CAD operation identifier. Supports OCCT, Manifold, JSCAD, and vector/math operations.
        params:
          description: Operation-specific parameters for this sub-task
        inputFiles:
          description: References to previously uploaded files to be used as inputs for this operation
          type: array
          items:
            $ref: '#/components/schemas/InputFileItem'
        outputFormats:
          description: Per-item output format overrides. If omitted, the task produces raw result data.
          maxItems: 10
          type: array
          items:
            type: string
            minLength: 1
      required:
      - operation
      additionalProperties: false
      description: A single operation within a compound (parallel) task. Each item runs independently.
    ErrorResponse:
      type: object
      properties:
        ok:
          type: boolean
          const: false
        error:
          $ref: '#/components/schemas/ErrorDetail'
      required:
      - ok
      - error
      additionalProperties: false
      description: Standard error envelope
    CompoundTaskCreatedResult:
      type: object
      properties:
        taskId:
          type: string
          description: Parent compound task ID for tracking overall progress
        kind:
          type: string
          const: compound
        subTaskCount:
          type: integer
          exclusiveMinimum: 0
          maximum: 9007199254740991
          description: Total number of sub-tasks created (one per item in the request)
        statusUrl:
          type: string
          description: Relative URL to poll the parent task status
          example: /api/v1/tasks/{taskId}
        subTasks:
          type: array
          items:
            $ref: '#/components/schemas/SubTaskSummary'
      required:
      - taskId
      - kind
      - subTaskCount
      - statusUrl
      - subTasks
      additionalProperties: false
      description: Returned when a compound (parallel) task is accepted. Contains initial status for all sub-tasks.
    ErrorDetail:
      type: object
      properties:
        code:
          type: string
          description: Machine-readable error code
          example: VALIDATION_ERROR
        message:
          type: string
          description: Human-readable error message
        details:
          description: Optional structured error context
        requestId:
          description: Request ID for tracing
          type: string
      required:
      - code
      - message
      additionalProperties: false
      description: Structured error information with machine-readable code and optional debugging context
    PipelineStep:
      type: object
      properties:
        operation:
          type: string
          minLength: 1
          description: Fully-qualified CAD operation identifier (e.g. 'occt.shapes.solid.createSphere'). Supports OCCT, Manifold, JSCAD, and vector/math operations.
        params:
          description: Operation parameters. Use '$ref:N' (e.g. '$ref:0') to reference the output of a previous step by its zero-based index. Use '$file:N[:<format>][:<codec>]' to reference an input file's contents - <format> is one of text|buffer|uint8|json|base64 (default text), and the optional <codec> is one of raw|gunzip|auto (default raw) to decompress the file first; 'auto' gunzips only when gzip magic bytes are present, so '$file:0:text:auto' reads both plain and gzip-compressed uploads (e.g. .step and .stpz).
        output:
          description: When true, this step's result is included in a separate result.json output alongside any shape files.
          type: boolean
      required:
      - operation
      - params
      description: A single step in a sequential CAD pipeline. Steps can reference outputs of earlier steps via $ref or input files via $file.
    TaskAcceptedResponse:
      type: object
      properties:
        ok:
          type: boolean
          const: true
        data:
          $ref: '#/components/schemas/TaskCreatedResult'
      required:
      - ok
      - data
      additionalProperties: false
      description: HTTP 202 response when a task is accepted for async processing
    SubTaskSummary:
      type: object
      properties:
        taskId:
          type: string
          description: Unique identifier for this sub-task (can be polled individually)
        index:
          type: integer
          minimum: 0
          maximum: 9007199254740991
          description: Zero-based position of this sub-task within the compound
        status:
          $ref: '#/components/schemas/TaskStatus'
        progress:
          anyOf:
          - type: number
          - type: 'null'
          description: Completion percentage (0–100) or null if not yet started
        computeMs:
          anyOf:
          - type: number
          - type: 'null'
          description: Actual compute time in milliseconds (null until completed)
        error:
          anyOf:
          - type: string
          - type: 'null'
          description: Error message if sub-task failed, null otherwise
        downloadFormats:
          type: array
          items:
            type: string
          description: Available output format keys (e.g. ['glb', 'stpz']) for downloading results
      required:
      - taskId
      - index
      - status
      - progress
      - computeMs
      - error
      - downloadFormats
      additionalProperties: false
      description: Status summary for one sub-task within a compound (parallel) task
  securitySchemes:
    ApiKeyAuth:
      type: apiKey
      in: header
      name: X-API-Key
      description: 'Scoped API key. Scopes: models, cad, convert, * (wildcard). A key without the required scope receives 403 INSUFFICIENT_SCOPE.'