API Documentation
Programmatic access to the USD Refinery. Convert 3D assets, retrieve health reports, and integrate into your pipeline.
Quick Start
X-API-Key header# Convert a file
curl -X POST https://converter.inside-media.com/api/v1/convert \
-H "X-API-Key: im_your_key_here" \
-F "file=@model.obj"
# Poll status
curl https://converter.inside-media.com/api/v1/status/{job_id} \
-H "X-API-Key: im_your_key_here"
# Download result
curl -o result.zip https://converter.inside-media.com/api/v1/download/{job_id} \
-H "X-API-Key: im_your_key_here"Authentication
All API endpoints require an API key. Pass it via the X-API-Key header (recommended) or the ?api_key= query parameter.
Keys are prefixed with im_ and tied to a tier (Starter, Pro, or Enterprise) that determines your rate limits and max file size.
Supported Formats
Endpoints
/api/v1/convertConvert a file
Upload a 3D asset and convert it to USD/USDZ. Conversion runs asynchronously — poll the status endpoint or use a webhook.
filemultipartrequiredThe 3D file to convertexport_formatstringOutput format: usdz (default), usdc, usda, glby_upbooleanForce Y-up orientation (default: true)root_xformbooleanApply root transform fix (default: true)webhook_urlstringURL to POST when conversion completescurl -X POST https://converter.inside-media.com/api/v1/convert \ -H "X-API-Key: im_your_key_here" \ -F "file=@model.obj" \ -F "export_format=usdz"
{
"job_id": "a1b2c3d4-...",
"status": "pending",
"filename": "model.obj",
"export_format": "usdz",
"status_url": "/api/v1/status/a1b2c3d4-...",
"health_url": "/api/v1/health/a1b2c3d4-...",
"download_url": "/api/v1/download/a1b2c3d4-..."
}/api/v1/status/{job_id}Poll job status
Check the current status of a conversion job. Poll until status is 'completed' or 'failed'.
curl https://converter.inside-media.com/api/v1/status/a1b2c3d4-... \ -H "X-API-Key: im_your_key_here"
{
"job_id": "a1b2c3d4-...",
"status": "completed",
"filename": "model.obj",
"export_format": "usdz",
"created_at": 1710000000.0,
"completed_at": 1710000005.0,
"health_score": 87,
"engine_readiness": {
"unreal": true,
"houdini": true,
"apple_ar": true,
"web_threejs": true
}
}/api/v1/health/{job_id}Get health report
Retrieve the full health/lint report for a completed conversion. Returns JSON by default, or a downloadable PDF.
formatstringjson (default) or pdf# JSON report curl https://converter.inside-media.com/api/v1/health/a1b2c3d4-... \ -H "X-API-Key: im_your_key_here" # PDF report curl -o report.pdf \ "https://converter.inside-media.com/api/v1/health/a1b2c3d4-...?format=pdf" \ -H "X-API-Key: im_your_key_here"
{
"health_score": 87,
"fixes_applied": ["normals_regenerated", "root_xform_applied"],
"lod_variants": 3,
"collision_meshes_generated": true,
"physics_material_inferred": "metal",
"engine_readiness": { ... },
"geometry": {
"vertices": 12450,
"triangles": 24800,
"meshes": 3
}
}/api/v1/download/{job_id}Download result
Download the converted asset as a ZIP bundle containing the USD file(s), health report JSON, and metadata.
curl -o result.zip \ https://converter.inside-media.com/api/v1/download/a1b2c3d4-... \ -H "X-API-Key: im_your_key_here"
Binary ZIP file containing: • converted asset (USDZ/USDC/USDA/GLB) • health_report.json • metadata.json
/api/v1/jobsList jobs
List your recent conversion jobs with status and health scores.
limitintegerResults per page (default: 20)offsetintegerPagination offset (default: 0)curl "https://converter.inside-media.com/api/v1/jobs?limit=10" \ -H "X-API-Key: im_your_key_here"
{
"jobs": [
{
"job_id": "a1b2c3d4-...",
"status": "completed",
"filename": "model.obj",
"export_format": "usdz",
"created_at": 1710000000.0,
"health_score": 87
}
],
"total": 42,
"limit": 20,
"offset": 0
}/api/v1/batchBatch convert
Convert multiple files in a single request (max 20). Each file counts against your monthly quota. Files that fail validation are rejected individually.
filesmultipart[]requiredMultiple 3D files to convertexport_formatstringOutput format for all files (default: usdz)y_upbooleanForce Y-up orientation (default: true)root_xformbooleanApply root transform fix (default: true)webhook_urlstringURL to POST when each conversion completescurl -X POST https://converter.inside-media.com/api/v1/batch \ -H "X-API-Key: im_your_key_here" \ -F "files=@chair.obj" \ -F "files=@table.glb" \ -F "files=@lamp.stl" \ -F "export_format=usdz"
{
"batch_size": 3,
"accepted": 3,
"rejected": 0,
"jobs": [
{ "job_id": "...", "status": "pending", "filename": "chair.obj", ... },
{ "job_id": "...", "status": "pending", "filename": "table.glb", ... },
{ "job_id": "...", "status": "pending", "filename": "lamp.stl", ... }
]
}Error Codes
401Missing or invalid API key403API key revoked or inactive404Job not found413File exceeds tier size limit429Monthly conversion limit reached400Unsupported format or invalid request202Conversion still in progress (poll again)Webhooks
Pass a webhook_url when submitting a conversion. When the job completes (or fails), we'll POST the full job status to your URL.
This is ideal for CI/CD pipelines where you don't want to poll. Combine with the download endpoint to automatically retrieve converted assets.
# Your webhook receives:
POST https://your-server.com/webhook
Content-Type: application/json
{
"job_id": "a1b2c3d4-...",
"status": "completed",
"health_score": 87,
"download_url": "/api/v1/download/a1b2c3d4-..."
}