Generative imaging as one API call
A predictable REST surface: submit a job, stream previews while the full-resolution frame finishes, and take delivery by webhook or poll. Same pipeline, same safety layer and same privacy guarantee as Studio.
Endpoints
Every generation route returns a job id first. Nothing blocks for the length of a render.
| Endpoint | Does | Returns |
|---|---|---|
POST /v1/images | Generate from a prompt, style family and ratio | Job id, then streamed previews |
POST /v1/edits | Inpaint, outpaint or erase within an existing frame | Job id, then the edited frame |
POST /v1/variations | Re-roll around a chosen seed | Job id, then n variations |
POST /v1/upscale | Detail-recovery pass to 4K | Job id, then the upscaled asset |
GET /v1/jobs/:id | Poll a job when you would rather not hold a stream | Status and asset URLs |
POST /v1/finetunes | Train a brand adapter from a reference set | Adapter id and training status |
Webhooks
Rather than hold a stream, register a URL and we post the finished job to it. Every delivery is signed, and retried with backoff for 24 hours until you return 2xx.
Verify X-Metabob-Signature against your signing secret before trusting a payload. Deliveries are
idempotent — the same id may arrive twice.
Errors and limits
Errors are boring on purpose: a stable code, a message that names the offending field, and a request id to quote at us.
| Status | Code | Means |
|---|---|---|
400 | invalid_request | A field is missing or malformed. The message names the field. |
401 | unauthorized | Missing or revoked key. |
402 | quota_exhausted | Plan allowance spent for the period. |
422 | policy_violation | The prompt or reference failed the safety screen. |
429 | rate_limited | Too many concurrent jobs. Retry-After tells you when. |
500 | internal | Ours. Retry with the same idempotency key — it will not double-charge. |