Skip to main content
EXPERIMENTAL — This API is in beta. We’re evaluating demand to determine scaling priorities. Your feedback is invaluable — please share your experience on Discord or via email.
Last updated: January 31, 2026

Base URL

Authentication

All requests require a Bearer token:
Get your API key from the Amara web app: ProfileAdmin/Developer PanelDeveloper API.

Endpoints

Create Generation

Start a new mesh generation from an image. Request Body: Response:
Use generation_id for all subsequent API calls (status polling and downloads).
key_monthly_used and key_monthly_limit only appear if your API key has a monthly limit configured.

Check Status

Poll the status of a generation. Response (Queued):
Response (Processing):
Response (Completed):
expires_in is the number of seconds until glb_url expires. Download and save to your own storage immediately. queue_position indicates your place in line (1 means actively processing).
Response (Failed):

Download GLB

Download the GLB file directly. Response: Binary GLB file with headers:
  • Content-Type: model/gltf-binary
  • Content-Disposition: attachment; filename="asset_name.glb"
CRITICAL: You MUST download and save the GLB file to your own storage immediately after generation completes. Files are NOT retained on our servers.

Code Examples

Best Practices

  1. Download & Store Immediately — You MUST download and save GLB files to your own storage immediately. Files are NOT retained on our servers.
  2. Poll Every 5 Seconds — Check status every 5 seconds. Handle queue_position in the response to show users their place in line.
  3. Reproducible Results — Use the same seed value to regenerate identical meshes from the same input image.
  4. Resize Images Client-Side — Resize to max 1024x1024 before encoding to reduce payload size and improve performance.
  5. Exponential Backoff — For production, implement exponential backoff with jitter when polling and retrying.
  6. Handle Rate Limits — Check for retry_after_seconds in 429 responses and wait accordingly.
  7. Store Generation IDs — Persist generation IDs so you can recover from crashes and resume polling later.
  8. Tune Output Quality — Adjust decimation_target (triangle count) and texture_size to balance quality vs file size.

Generation Modes

Image Requirements

Rate Limits

Only generation creation (POST) counts against rate limits. Status polling (GET) and downloads are NOT rate-limited, so you can poll as frequently as needed.

Error Codes

HTTP Status Codes

Error Response Codes

On 503 errors, credits are automatically refunded. Check for credits_refunded: true in the response.

Example Error Responses

400 - Image Validation Error:
429 - Rate Limit Exceeded:
402 - Insufficient Credits:

Support