Response objects
Every field of the Product, Scene, Surface, Render and Error objects the API returns.
Updated
Every field below is always present. A value the API does not have is null, never left out.
Product
{
"id": 4410,
"name": "Emerald velvet",
"brand": "Northwind",
"sku": "NW-VEL-104",
"category": "Upholstery fabric",
"type": "furniture",
"material_type": "fabric",
"image_url": "https://…"
}idintegerThe product’s id, for
product_id.namestringIts name, as in your catalog.
brandstring | nullIts brand.
skustring | nullIts SKU, for matching to your own systems.
categorystring | nullThe name of its category.
typestringWhich surfaces it can go on:
wall,floor,counter,cabinetry,furniture,furnishingorlighting. See Which products fit which surfaces.material_typestringWhat it is made of;
otherwhen not known. See Material types.image_urlstring | nullA link to the product’s image.
Scene
{
"id": 812,
"name": "Library",
"origin": "upload",
"setting": "indoor",
"status": "ready",
"image_url": "https://…",
"surfaces": [
{
"id": "wall_1",
"name": "Back wall",
"type": "wall"
},
{
"id": "floor_1",
"name": "Floor",
"type": "floor"
},
{
"id": "sofa_1",
"name": "Sofa",
"type": "furniture"
},
{
"id": "scene_lighting",
"name": "Scene lighting",
"type": "lighting"
}
],
"created_at": "2026-10-21T14:02:40.000Z"
}idintegerThe scene’s id, for
scene_id.namestringIts name.
originstringupload,editorialorlibrary. See Where scenes come from.settingstringindoororoutdoor, as chosen when the scene was added.statusstringanalyzing,ready,failedornot_analyzed. Only areadyscene can take renders.image_urlstring | nullA signed link to the room picture.
surfacesSurface[]What a render can go on, in your workspace’s order. Empty until the status is
ready.created_atstring | nullWhen it was added, as ISO 8601 in UTC.
Surface
{
"id": "sofa_1",
"name": "Sofa",
"type": "furniture"
}idstringFor
surface_id. Meaningful only within its scene.namestringA readable label, such as “Back wall”.
typestringwall,ceiling,floor,counter,cabinetry,furniture,light_fixtureorlighting. See Surface types.
Render
{
"id": "3f2b8e9a-6c1d-4e7b-9a05-2d8c41f7b6e0",
"scene": {
"id": 812,
"name": "Library"
},
"product": {
"id": 4410,
"name": "Emerald velvet"
},
"paint": null,
"surface": "Sofa",
"created_at": "2026-10-21T14:03:12.000Z",
"status": "completed",
"image_url": "https://…",
"upscale_status": "not_requested",
"error": null
}idstringThe render’s id, a UUID.
statusstringqueued,rendering,upscaling,completed,failedorcancelled. See Render statuses.sceneobjectThe scene’s
idandname.productobjectThe product’s
idandname, bothnullfor a paint render.paintobject | nullFor a paint render, its
hexas#RRGGBBand yournamefor it.nullfor a product render.surfacestring | nullThe name of the surface it went on.
image_urlstring | nullOnce
completed, a signed link to the image, valid for at least 30 days.nulluntil then. See Image output and links.upscale_statusstring | nullnot_requested,pending,completed,failedorunavailable: whetherimage_urlis upscaled.not_requestedwhenever no upscale was asked for;nullfor a failed or cancelled render that asked for one. See Upscaling.errorstring | nullFor a
failedorcancelledrender, why, in words you can show your team.nullotherwise.created_atstring | nullWhen it was requested, as ISO 8601 in UTC.
Error
{
"error": {
"type": "not_found",
"message": "No such render."
}
}error.typestringStable; branch on it. Every value is listed in Error types.
error.messagestringWritten for people. May change at any time.
Something these pages do not answer? Email admin@skipshoot.com and we’ll help.
