API
Render from your own backend
Four calls: get an upload URL, start a render, poll it, finalise it. Included on every paid plan from Pro upward, with usage counted the same way as it is in the app — one credit per render, whatever size you ask for.
This exists because the work that most needs automating is the work nobody wants to sit through: a nightly job that re-renders whatever product photos changed today, a listing pipeline that fires when an agent uploads a folder, a PIM that fixes the lighting before an image ever reaches a channel.
The shape of it
- 01
Get a signed upload URL
POST to /v2/upload with the filename and your project id. You get back a signed URL to PUT the file to, and the final URL the render will reference.
- 02
Start the render
POST to /v2/generate with the image URL, a mode, an output size and an optional prompt. It returns either the finished output or a processing id to poll.
- 03
Poll for the result
POST to /v2/results with that processing id until it stops reporting progress and returns the output URL. Roughly twenty seconds in the normal case.
- 04
Finalise
POST to /v2/finalize_upload with the output URL. This is also where a render flagged by the safety check reports back, so it is not optional.
What you send to a render
| Field | Meaning |
|---|---|
| image | URL of the photo to render |
| precise | -1 max fidelity · 100 precise · 60 balanced · 30 creative · 150 max creative |
| hd | Omit or 2 for 2K · 4 for 4K |
| prompt | Optional free text, up to 300 characters |
| pid | Your project id |
The mode values are the same ones behind the buttons in the app, so anything you can produce in the interface you can produce from a script — and anything you tune in the interface transfers straight into your integration.
Questions people ask.
Which plans include the API?
All of them, Pro upward. It is not held back for the top tier — a two-person team on Pro gets the same API a studio on the top plan does.
How do I authenticate?
Create a token in your dashboard and send it with each request. Tokens are per-account, can be named, and can be revoked individually, so a token given to a contractor or an integration can be pulled without disturbing the rest.
How is usage counted?
One render is one credit, whatever output size you request. Asking for 4K rather than 2K does not cost more. A failed render is refunded automatically.
Can I run a batch?
Yes — start as many renders as you have credits for and poll each processing id independently. There is no batching endpoint to learn; concurrency is just concurrency.
How long does a render take?
About twenty seconds in the normal case. Poll rather than blocking: the generate call returns a processing id immediately and the work happens behind it.
Is there a sandbox?
Not a separate one. The free render on a new account is the cheapest way to test an integration end to end against the real pipeline.
Rate limits?
There is no published per-second limit; your credit balance is the real constraint. If you are planning something that would move a lot of volume at once, talk to us first rather than discovering a limit in production.
What about the results — can I host them myself?
Output URLs are served from our CDN. Download and re-host them on your own storage if you would rather not depend on ours, which for a product catalogue is usually the right call.
Test it on your free render.
There is no separate sandbox, which means there is also no sandbox that behaves differently from production. Create an account, take a token from the dashboard, and point your script at the real thing.