Create a job
POST /v1/jobs submits a generation job. The body carries the image input for an image-to-3D job, and may carry an idempotency key. Creation returns immediately with a job id — poll GET /v1/jobs/{id} or subscribe to task.updated webhooks for the result.
POST/v1/jobs
Submit a generation job. Returns 202 with a job id immediately; generation runs asynchronously.
Request body
| Field | Type | Required | Description |
|---|---|---|---|
| type | string | yes | Must be image-to-3d — the only supported job type. Other values are accepted but reserved for upcoming features and currently fail during processing. |
| input | object | yes | The job input — see the image-to-3d table below. |
| options | object | no | Accepted for forward compatibility; not yet applied (see Options below). |
| idempotency_key | string | no | 1–256 characters. Submitting the same key again returns the original job with 202 instead of creating a duplicate. Keys are scoped to your account. |
Input
image-to-3d
Generates a model from a single product photo or reference image.
| Field | Type | Required | Description |
|---|---|---|---|
| image_urls | string[] | yes | Exactly 1 image URL. See image rules below. |
Image rules
Every entry in an image_urls array must be one of:
- An
http(s)URL — https recommended. Remote images are fetched by the pipeline and must be at most 25 MiB. - An inline base64 data URI
data:image/(png|jpeg|webp);base64,...with a decoded payload of at most 4 MiB.
Non-http(s) schemes are rejected. Use data URIs to avoid making your images publicly fetchable; use https URLs for anything larger than 4 MiB.
Options
options is accepted on every job for forward compatibility. Its fields are not yet applied — the generation pipeline currently uses its own defaults, and GLB is the only output format produced today. Sending options is harmless but has no effect.
Responses
| Status | Meaning |
|---|---|
202 Accepted | Job created. Body: {"job_id":"..."} — the id is a ULID. Same id is returned for a repeated idempotency_key. |
400 invalid_request | Validation failed or the JSON body was malformed. The error message names the offending field. |
402 insufficient_balance | Your prepaid balance is below the minimum required to start a new job. The body additionally carries top-level balance_usd and min_balance_usd. |
Examples
Create a job
The simplest job: one product photo in, one GLB out.
curl -X POST https://api.everythingstudios.ai/v1/jobs \
-H "Authorization: Bearer esk_YOUR_API_KEY" \
-H "Content-Type: application/json" \
-d '{
"type": "image-to-3d",
"input": {
"image_urls": ["https://example.com/product-photo.jpg"]
}
}'