TEASEDocs
ProductsLinkLanding-page builder

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 }
      ]
    }
  }'
TypeWhat it is
textText with size/color/align/weight/font/letter-spacing/line-height/transform/shadow
image / videoAn uploaded teaser asset, with corner radius and object-fit
iconAn icon glyph with color and size (12–128px)
shapeA pure style-driven box — background, border, shadow, radius, opacity — no content
teaserThe same locked/blurred tile used on button teasers, as a standalone canvas element
badgeA 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.

What's next

On this page