> ## Documentation Index
> Fetch the complete documentation index at: https://docs.gizmo.antimlabs.com/llms.txt
> Use this file to discover all available pages before exploring further.

# Export an asset

> Download one asset in MJCF, USD, USDZ, SDF, or GLB format. Pass the required `format` as a query parameter; no request body is needed. MJCF, USD, and SDF return a ZIP archive. USDZ returns a .usdz file. Personal-key GLB export returns the current native USD preview when present, otherwise a ZIP with visual.glb, collision.glb, and physics.json for supported Blender assets. Team keys download the pinned saved visual GLB with GET /v1/assets/{asset_id}/files/glb. The response is binary data, not a download URL.



## OpenAPI

````yaml /openapi.json post /v1/assets/{asset_id}/export
openapi: 3.1.0
info:
  title: Gizmo Asset API
  description: >-
    Generate individual assets or Team batches from text and reference images.
    Start with the [API Guides](https://docs.gizmo.antimlabs.com/api-access) for
    complete workflows.


    Export assets to USD / USDZ, MJCF, SDF, and GLB. Available formats depend on
    the asset and its accepted release. A successful export is not simulator
    certification.


    ## Authentication


    All endpoints require an API key passed via the `Authorization` header:


    ```

    Authorization: Bearer gzm_k1_<your-key>

    ```


    Select Personal or your Team in Gizmo, then create a key in API Access. Both
    use https://api.gizmo.antimlabs.com; the key selects the library and billing
    account. A Team may be called workspace in response fields and error codes.


    ## Rate Limiting


    Rate limits are per-key. Rate-limited API-key responses include:

    - `X-RateLimit-Limit` — requests allowed per minute

    - `X-RateLimit-Remaining` — requests remaining in current window

    - `X-RateLimit-Reset` — Unix timestamp when the window resets


    ## Async Generation


    Asset generation is asynchronous. `POST /v1/assets` returns `202 Accepted`
    with a `job_id`. Use `GET /v1/jobs/{id}` to poll. Personal keys also support
    `GET /v1/jobs/{id}/events` for SSE streaming. Team keys currently do not
    support SSE, GET /v1/usage or DELETE /v1/assets/{asset_id}; those operations
    return 403 workspace_route_unavailable. Use polling for progress and Team
    Billing for the current balance. Batch generation, saved-file links and
    export-only retries require Team access. One shared API reference describes
    both key types; it does not imply every operation is available to both. Team
    generation requires Idempotency-Key.


    ## Errors


    Errors on public endpoints use `detail.error` with code, message, and
    status. Validation errors also include fields. Responses include
    X-Request-ID for support.

    ```json

    {"detail": {"error": {"code": "asset_not_found", "message": "Asset not
    found", "status": 404}}}

    ```
  version: 1.0.0
servers:
  - url: https://api.gizmo.antimlabs.com
    description: Production
security:
  - ApiKeyAuth: []
tags:
  - name: Assets
    description: Generate individual assets and browse your Personal or Team library.
  - name: Batches
    description: >-
      Team-only generation of up to 1,000 assets, with partial results and
      automatic queueing.
  - name: Images
    description: Upload and retrieve private original reference images.
  - name: Jobs
    description: >-
      Track, cancel and recover generation jobs. Teams use polling; Personal
      keys also support SSE.
  - name: Exports
    description: >-
      Download simulator formats, visual GLBs and collision bundles. Saved-file
      routes require Team access.
  - name: Account
    description: >-
      Check your key's identity. Request usage statistics currently require
      Personal access.
paths:
  /v1/assets/{asset_id}/export:
    post:
      tags:
        - Exports
      summary: Export an asset
      description: >-
        Download one asset in MJCF, USD, USDZ, SDF, or GLB format. Pass the
        required `format` as a query parameter; no request body is needed. MJCF,
        USD, and SDF return a ZIP archive. USDZ returns a .usdz file.
        Personal-key GLB export returns the current native USD preview when
        present, otherwise a ZIP with visual.glb, collision.glb, and
        physics.json for supported Blender assets. Team keys download the pinned
        saved visual GLB with GET /v1/assets/{asset_id}/files/glb. The response
        is binary data, not a download URL.
      operationId: export_asset_v1_assets__asset_id__export_post
      parameters:
        - name: asset_id
          in: path
          required: true
          schema:
            type: string
            title: Asset Id
        - name: format
          in: query
          required: true
          schema:
            enum:
              - mjcf
              - usd
              - usdz
              - sdf
              - glb
            type: string
            description: 'Export format: mjcf, usd, usdz, sdf, or glb'
            title: Format
          description: 'Export format: mjcf, usd, usdz, sdf, or glb'
      responses:
        '200':
          description: Exported asset file
          content:
            application/zip:
              schema:
                type: string
                format: binary
            model/vnd.usdz+zip:
              schema:
                type: string
                format: binary
            model/gltf-binary:
              schema:
                type: string
                format: binary
        '401':
          description: Missing, invalid, or revoked API key
          content:
            application/json:
              example:
                detail:
                  error:
                    code: invalid_api_key
                    message: Invalid or revoked API key
                    status: 401
              schema:
                $ref: '#/components/schemas/ApiErrorResponse'
        '404':
          description: Asset not found
        '409':
          description: Conflicting request or idempotency key
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/ApiErrorResponse'
        '413':
          description: Upload too large
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/ApiErrorResponse'
        '415':
          description: Unsupported or invalid image
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/ApiErrorResponse'
        '422':
          description: Invalid request; see detail.error.fields
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/ApiErrorResponse'
        '429':
          description: Rate limit exceeded
          content:
            application/json:
              example:
                detail:
                  error:
                    code: rate_limit_exceeded
                    message: 'Rate limit exceeded: 60 requests per minute'
                    status: 429
              schema:
                $ref: '#/components/schemas/ApiErrorResponse'
        '500':
          description: Export processing error
components:
  schemas:
    ApiErrorResponse:
      properties:
        detail:
          $ref: '#/components/schemas/ApiErrorPayload'
      type: object
      required:
        - detail
      title: ApiErrorResponse
    ApiErrorPayload:
      properties:
        error:
          $ref: '#/components/schemas/ApiErrorDetail'
      type: object
      required:
        - error
      title: ApiErrorPayload
    ApiErrorDetail:
      properties:
        code:
          type: string
          title: Code
          description: Machine-readable error code
          examples:
            - asset_not_found
        message:
          type: string
          title: Message
          description: Human-readable description
          examples:
            - Asset ast_abc123 not found
        fields:
          anyOf:
            - items:
                additionalProperties: true
                type: object
              type: array
            - type: 'null'
          title: Fields
        status:
          type: integer
          title: Status
          description: HTTP status code
          examples:
            - 404
      type: object
      required:
        - code
        - message
        - status
      title: ApiErrorDetail
  securitySchemes:
    ApiKeyAuth:
      type: http
      scheme: bearer
      bearerFormat: gzm_k1_<hex>
      description: >-
        Select Personal or your Team in Gizmo, then create a key in API Access.
        The key selects your library and billing account.

````

This documentation is built and hosted on [Mintlify](https://mintlify.com), a developer documentation platform.