Place elements freely on a canvas
Build a non-standard layout instead of a fixed column of buttons.
By default buttons stack in one column. Free canvas mode lets you position buttons — and up to 40 extra elements — anywhere on a fixed-size art board (350px wide, up to 6000px tall), for a layout that isn't just a vertical list.
Switch to free layout
curl -X POST "https://app.tease.link/api/admin/bg/ui?domain=links.creator.com" \
-H "Authorization: Bearer $TEASE_API_KEY" \
-H "Content-Type: application/json" \
-d '{ "layout": { "mode": "free" } }'{ "layout": { "mode": "column" } } (or just { "layout": null }) goes back to the fixed
column — any saved positions are kept, so switching back to free later restores them.
Position elements
Positions live in layout.pos, keyed by button id or object id:
curl -X POST "https://app.tease.link/api/admin/bg/ui?domain=links.creator.com" \
-H "Authorization: Bearer $TEASE_API_KEY" \
-H "Content-Type: application/json" \
-d '{
"layout": {
"mode": "free",
"pos": {
"b_a1b2c3d4": { "x": 20, "y": 400, "w": 310 },
"obj_headline": { "x": 20, "y": 40, "w": 310, "h": 80 }
}
}
}'x/y/w/h are all in canvas pixels; w is 96–350 for a button, 24–350 for an object; x is
clamped so an element never runs past the 350px-wide art board. Up to 120 positioned elements per
domain.
Add extra elements
Elements beyond buttons live in the objects section, up to 40 per domain:
curl -X POST "https://app.tease.link/api/admin/bg/ui?domain=links.creator.com" \
-H "Authorization: Bearer $TEASE_API_KEY" \
-H "Content-Type: application/json" \
-d '{
"objects": {
"items": [
{ "id": "headline", "type": "text", "text": "Welcome 👋", "size": 1.4, "weight": "bold", "align": "center" },
{ "id": "photo", "type": "image", "src": "teaser_0123456789abcdef.webp", "radius": 16 }
]
}
}'| Type | What it is |
|---|---|
text | Text with size/color/align/weight/font/letter-spacing/line-height/transform/shadow |
image / video | An uploaded teaser asset, with corner radius and object-fit |
icon | An icon glyph with color and size (12–128px) |
shape | A pure style-driven box — background, border, shadow, radius, opacity — no content |
teaser | The same locked/blurred tile used on button teasers, as a standalone canvas element |
badge | A small counter/splash badge (e.g. a live subscriber-count style pill) |
Every object also accepts style (background/border/shadow/radius/opacity — the same shape used
by the profile card), hidden, and
an optional name for your own reference in the editor. Position each new object's id in
layout.pos the same way as a button, or it stacks at the canvas origin.
Confirm it worked
Read back ui.layout and ui.objects and check the ids and coordinates match what you sent,
then look at the domain's preview in free-canvas mode — elements should appear exactly where you
placed them, and stay there when you resize the preview between phone and desktop widths.
Not available on the Spotlight design
Free canvas works on the classic built-in design. The spotlight design keeps its own fixed
hero-photo layout and does not offer a free canvas — switch to classic first if you need it.