Skip to content
Create API key

Sectional Builder

New combinations render on demand, unless your account runs in curated mode, where only configurations your team has published can be served. Every accepted render is cached, so a configuration renders at most once per material set and then serves free and instantly.

Everything the app needs to draw itself.

  • price is null when the key hides pricing (trade and designer apps).
  • builderMode is open or curated.
  • publishedConfigs is filled in curated mode.
Response
{
"brand": "Sample Furniture Co.",
"captureFirst": false,
"showPricing": true,
"builderMode": "open",
"units": [
{
"sku": "3772-ALC",
"series": "3772",
"title": "Armless Chair",
"unitType": "armless",
"armSide": null,
"attachEdges": "left,right",
"gridW": 1,
"gridH": 1,
"widthIn": 32.0,
"price": 899.00,
"imageUrl": "https://…/3772-alc-neutral.png"
}
],
"fabrics": [
{
"fabricKey": "2001-05",
"fabricName": "Stone",
"swatchUrl": "https://…/2001-05.jpg",
"family": "Performance weave"
}
],
"options": [
{
"kind": "leg",
"optionKey": "espresso",
"name": "Espresso legs",
"swatchUrl": "https://…/leg-espresso.jpg",
"sort": 1
}
],
"publishedConfigs": []
}

Render a configuration: 2 to 8 units placed on the layout grid, a fabric, and any selected options. A cached, approved configuration returns ready immediately. Otherwise the render starts and you poll. In curated mode an unpublished combination returns 403 with status: "unavailable".

Terminal
curl -X POST https://share.plunk.io/sb/render \
-H "x-visualizer-key: sk_••••" -H "x-surface: sectional" \
-H "Content-Type: application/json" \
-d '{
"units": [
{ "sku": "3772-LAL", "gx": 0, "gy": 0 },
{ "sku": "3772-ALC", "gx": 1, "gy": 0 },
{ "sku": "3772-COR", "gx": 2, "gy": 0 },
{ "sku": "3772-RAC", "gx": 2, "gy": 1 }
],
"fabricKey": "2001-05",
"options": { "leg": "espresso" }
}'
Cache hit: an approved render serves instantly
{
"status": "ready",
"url": "https://…/hero.png",
"configHash": "b04c…"
}
Cache miss: 202, poll /sb/render/{renderId}
{
"status": "rendering",
"renderId": "f2a91c…",
"configHash": "b04c…",
"fallback": {
"units": [
{ "sku": "3772-LAL", "url": "https://…/3772-lal-neutral.png" }
]
},
"schematicUrl": "https://…/schematic.png"
}

fallback carries the per-unit images so the app can show an exploded view while it waits.

Poll the render. Every result is checked against the units before it can serve. pending_review means it rendered but is waiting on staff approval and won’t serve until approved.

Possible answers
{ "status": "rendering" }
{ "status": "pending_review" }
{ "status": "failed", "verifyNote": "…" }
{ "status": "ready", "url": "https://…/hero.png" }

Save the configuration and, when the shopper leaves an email, mint a branded board with the hero render and email them the link. If the render is still in flight, pass the renderId from /sb/render: the board waits for the render and the email goes out when it’s ready.

Field Type Notes
units array Required. Same placement objects as /sb/render
fabricKey string Required.
options object Selected options, kind to key
title string Board title, default “My sectional”
email string Captures the lead and emails the board
renderId string An in-flight render to attach the board to
Response
{
"configId": "8c1b04d2ee…",
"totalPrice": 4796.00,
"boardUrl": "https://share.plunk.io/b/1f8e02aa41cd6b",
"pendingBoard": false,
"message": null
}

totalPrice is null when the key hides pricing. If the render was still in flight, pendingBoard is true and the board link is emailed on approval.

Was this helpful?

Still stuck? Contact support and include the job or page you were on.