Guide
Changelog
Every change to the v1 API, newest first.
2026-10-05 — delete a job, per-key retention, result URLs
- New endpoint:
DELETE /v1/jobs/{id}deletes a finished job together with its rendered results and its input image, and answers204. A job that is still processing answers409 job_in_progress, a new error code. A job of another account, or one already deleted, answers404 job_not_found; after a delete,GET /v1/jobs/{id}answers404too. A webhook not delivered yet is not sent. Deletes have their own limit of 60 per minute per key. See Delete a job. GET /v1/accountreturns a new field,retention_days: the number of days after which jobs created with the key are deleted, images included, ornullwhen the key has none. Roomagen sets it on request. See Storage and retention.- The input image of a request that is rejected without creating a job, for example with
402 insufficient_credits, is now deleted at once. Until now it was kept with the failed run. - The input image of a failed job is deleted 30 days after the job was created.
- Documentation: the result URL examples showed
https://api.roomagen.com/api/uploads/…, which is not where results are served. Result images are public URLs of the formhttps://uploads.roomagen.com/<account-id>/<file-id>-<name>.<ext>; how long they are kept is now documented under Storage and retention.
2026-10-03 — every tool documented, warnings, idempotent replays, free-image watermark
- Every tool
GET /v1/toolsreturns is now documented, with its options, its price and an example; Tools lists them by what they do. Until now seven were documented and the rest were accepted without documentation. Nothing changes for calls you already make. A few things worth knowing:- Most tools do not read
customPrompt; the Tools tables say which do. 4k-upscalesends the same prompt and asks for the same 4K output asimage-upscaling, but is charged as two images.sketch-to-floor-planleaves out dimensions, room names and furniture unless you ask for them (preserve).
- Most tools do not read
POST /v1/jobsanswers with a new field,warnings: the options in your request that the tool will not use — a key it does not have (with the key you probably meant), acustomPromptit does not read or that was sent withouttier: "custom", aresolutionother than2Kor4K. Nothing is rejected that was accepted before: the job runs exactly as it did.warningsis always present and usually empty. See Warnings.- Until an account buys a pack, its renders now carry a Roomagen watermark. That is what the API pages have always said about the 50 free images, but the watermark was not being applied. Accounts that have bought a pack see no change: every render stays watermark-free, the free images left over included. See Pricing.
- A request replayed with the same
Idempotency-Keyand body used to answerprocessingforever, even for a job that had long finished, so a client retrying after a timeout never learned the outcome fromPOST /v1/jobs. It now answers201with the job as it stands — the job objectGET /v1/jobs/{id}returns — so the status can already becompletedwithresult_urls, orfailedwitherror. Nothing is charged and nothing is rendered again. If the job that key created no longer exists, the replay answers404 job_not_found. See Idempotency.
2026-10-03 — tool fixes: stainless steel, facade material, holiday decorations
bathroom-fixturesacceptsfixtureFinish: "stainless-steel". It was rejected with400 invalid_request.construction-exteriorhas a newfacadeMaterialvalue,auto, and it is now the default: the facade is chosen to suit the style and the building, and the model is told to keep a material the building is clearly being finished in (brick, stone, cladding, glass). Until now a request withoutfacadeMaterialalways asked for a plaster facade; send"plaster"to keep that.festive-flip: Christmas, Halloween and Easter list their decorations per regional style, and withoutholidayRegionthe instruction used to list none. The first style is now used —americanfor Christmas and Halloween,westernfor Easter. AholidayRegionthe holiday does not have is ignored instead of emptying the list, anddecorationswith no id the theme's list has gets the whole list instead of none. See Festive flip.exterior-additionswithhasExisting: "true"names what it replaces — a fence or boundary wall, a driveway, a garage or carport — instead of calling it by the new type's name. It andlandscapingare now told to keep pools, spas, pergolas, gazebos, decks and patios as they are.watermark-removalwithremovalTarget: "watermark"removes the watermark and logo overlays; it is no longer told to remove copyright notices. Use it on photos you own or have the rights to edit.lighting-update: its option description said fixtures are "added or replaced". The tool has always replaced only the fixtures already in the photo — it is told not to add new ones — and the description now says so.
2026-10-03 — webhook verification sample, day to dusk
Documentation only; the API itself did not change.
- The Node verification sample on Webhooks compared string lengths before
crypto.timingSafeEqual. A signature header with non-ASCII characters can have the right number of characters and more bytes;timingSafeEqualthen throws instead of returningfalse, and in an async handler that can take the process down. The sample now compares the byte lengths of the two Buffers. The Python sample comparedstrvalues, whichhmac.compare_digestrejects withTypeErrorwhen one has non-ASCII characters; it now compares bytes. If you copied either sample, apply the same change. day-to-duskis the interior tool: it treats every photo as a room (windows, the view through them, the room's own lights). Its page described an exterior; it now says so and explainshasWindows.day-to-dusk-exterior, accepted since launch and listed byGET /v1/tools, is documented for building exteriors, with its optionstimeShiftandseason.
2026-09-30 — floor plan to 3D
floor-plan-to-3dis documented, with its options. New optional keys:fp3dOutdoor(as_drawnby default: balconies, terraces, pools and parking only where the plan draws them) andfp3dLabels(noneby default).inputTypealso acceptsauto: no format hint, the same as leaving the key out.tiercustomnow usescustomPromptfor this tool; before, the text was ignored and the default prompt ran.furnitureModeemptysent with it still gives an empty shell.- The aliases
view(→outputStyle) andstyle(→interiorStyle, when it is one of its values) are accepted. An unknownview, or an unknown value for one of the tool's own keys, is rejected withinvalid_requestin every tier — previouslycustomandautorequests ignored it. - The model is now told to build the plan once (no second copy on the sheet) and to draw doors, windows and outdoor areas only where the plan draws them.
Your renders may look different
Until this release view, style and customPrompt were accepted but had no effect on this
tool, so calls that used them got the default modern cutaway. They now apply: view: "topdown" gives the top-down render instead of the cutaway, style: "luxury" gives the
luxury interior, and a custom prompt sets the look. Calls that use the documented values keep
working. To keep the old look, send outputStyle: "cutaway_isometric" and leave out style
and customPrompt.
v1 — 2026-08-30
Initial public release: 5 tools, webhooks, idempotency, self-serve keys.
Breaking changes
We announce breaking changes by email to every account with an active key, before they ship. Additive changes — a new tool slug, a new optional field — can land at any time, so treat unknown response fields as safe to ignore.