> ## 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.

# Downloads & bundle formats

> Download simulator exports, raw visual GLBs, collision bundles and saved source.

Each request downloads **one asset in one format**. There is no single ZIP containing an entire batch.

## Export an asset

```bash theme={null}
curl --fail-with-body -X POST \
  "https://api.gizmo.antimlabs.com/v1/assets/ASSET_ID/export?format=mjcf" \
  -H "Authorization: Bearer gzm_k1_YOUR_KEY" \
  -o asset.zip
```

Replace `ASSET_ID` with `result.asset.id`. The required `format` is a **query parameter**. There is no request body. The response contains the file bytes, not JSON or a download URL.

| Format | Download | Content type |
| - | - | - |
| `mjcf` | `.zip` | `application/zip` |
| `usd` | `.zip` | `application/zip` |
| `usdz` | `.usdz` | `model/vnd.usdz+zip` |
| `sdf` | `.zip` | `application/zip` |
| `glb` | Team: `.zip`; Personal: `.glb` for a native USD preview, otherwise `.zip` | `model/gltf-binary` or `application/zip` |

For Team jobs, `export?format=glb` is a ZIP containing the visual GLB and
available collision/physics/QA files. Use `GET /v1/assets/{id}/files/glb` when you
need the raw visual `.glb`; `/files/glb_bundle` returns the saved bundle. Inspect
`Content-Type` and `Content-Disposition`, rather than treating every GLB-related
response as raw GLB bytes. Formats absent from the job's pinned release return
`409 export_not_available`; requesting an export does not imply a new generation.

Use `-o asset.usdz` when requesting `format=usdz`. `Content-Disposition` supplies a suggested filename. `X-Export-File-Count` and `X-Export-Warnings` provide export metadata.

## Team results and downloads

**Team releases require USD and a saved visual GLB.** The export worker also prepares a
GLB bundle with collision meshes and physics metadata when decomposition succeeds.
USDZ, MJCF, SDF and Blender files are optional release settings. Inspect `published_formats`
on job/batch status before requesting an optional format. An unavailable optional
format returns `409 export_not_available`; it never triggers regeneration.

Every accepted Team job has an `asset_id`, also returned on batch item
statuses. `GET /v1/assets` lists the shared Team library, including queued,
failed and cancelled entries. Follow its pagination cursor. A key only lists
assets in its own Team, even when its owner belongs to several Teams.

After the job succeeds, use `GET /v1/assets/{asset_id}?include_record=true` for
geometry, joints and material data. Referenced mesh/texture URLs expire after
five minutes; fetch the record again to obtain fresh URLs. Do not persist these
URLs as permanent asset identifiers.

Use `POST /v1/assets/{asset_id}/export?format=usd` (also `usdz`, `mjcf`, `sdf`)
for saved simulator output. Each export request downloads **one asset in one
selected format**. It does not combine every batch item or every simulator format
into a universal archive. `format=glb` returns a single ZIP bundle when available:

| File | Meaning |
| - | - |
| `visual.glb` | Display geometry and delivered materials/textures; use this in a 3D viewer |
| `collision.glb` | Collision geometry for the standard convex representation |
| `physics.json` | Physical properties, joints where present, and collider/build metadata; follow its file references |
| `collision_hybrid_convex.glb` | Optional convex portion of a hybrid collider representation |
| `collision_hybrid_sdf.glb` | Optional mesh input for the hybrid SDF representation; not a pre-cooked simulator state |
| `physics-qa.json` | Optional executed QA results, scope, input hashes, failures and skips when QA ran |

The exact collider files depend on the collision backend and accepted release.
Use `physics.json` to determine the available representations. A QA file can
report failures even when generation published successfully. Neither an archive
nor a collision mesh by itself certifies native USD/Isaac dynamics.

These file roles describe the asset format, not a PI-specific customer format.
Different releases may produce different optional representations or simulator
formats; document those capabilities rather than changing the meaning of a file
based on who requested it. USD is a separate ZIP export containing the USD scene
and its packaged dependencies, not the same GLB/physics bundle.

Team downloads
return the bytes produced by that job's pinned release; they do not rerun the
latest exporter. Native files are available through:

| Method | Path | Output |
| - | - | - |
| `GET` | `/v1/assets/{asset_id}/files/glb` | Saved visual GLB |
| `GET` | `/v1/assets/{asset_id}/files/glb_bundle` | Saved visual, collision, and physics ZIP |
| `GET` | `/v1/assets/{asset_id}/files/blend` | Saved Blender source |

Downloads require `export:assets`; listing and record access require
`read:assets`. These native-file endpoints currently require a Team key.
A pending, failed or cancelled asset without a published result returns
`409 asset_not_ready` on download. A missing or inconsistent saved artifact
returns `503`; the server does not silently regenerate it. Binary downloads
include an `X-Content-SHA256` checksum header. A GLB download provides visual
geometry/materials, not a certification of simulator physics or PBR parity.

For a large Team download, `GET /v1/assets/{asset_id}/files/{format}/url`
returns `{url, expires_in, name, size_bytes, sha256}`. Supported formats are `usd`,
`usdz`, `mjcf`, `sdf`, `glb`, `glb_bundle`, and `blend`. The URL downloads the same saved bytes
with an attachment filename and expires after 300 seconds. It grants temporary
file access: keep it private and fetch a new link when needed. This endpoint
requires `export:assets` and verifies the saved artifact before issuing a link.

## Load collision geometry

In `collision.glb` each mesh node is one convex hull; load every node as its own hull and do not re-decompose. Assets whose design has functional openings that hulls would close (sockets, slots, hole patterns, handle cutouts) also include `collision_hybrid_convex.glb` and `collision_hybrid_sdf.glb`: use the pair instead of `collision.glb`, loading the second as SDF colliders (PhysX SDF colliders do not touch plane shapes, so use a box for the floor or table). `physics.json` describes each file under `colliders`. In ManiSkill:

```python theme={null}
builder.add_visual_from_file("visual.glb")
builder.add_multiple_convex_collisions_from_file("collision.glb")
# or, when the hybrid pair is present:
# builder.add_multiple_convex_collisions_from_file("collision_hybrid_convex.glb")
# builder.add_nonconvex_collision_from_file("collision_hybrid_sdf.glb")
```

## Endpoint reference

[Export an asset](/api-reference/exports/export-an-asset) · [Download a saved file](/api-reference/exports/download-a-saved-team-glb-or-blender-file) · [Get a temporary download link](/api-reference/exports/get-a-short-lived-team-download-link)


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