Skip to main content

Link-in-bio (bio pages)

Bio pages are hosted, multi-link landing pages (a Linktree-style profile). Create a page, add items, order them, and publish.

Code samples use the planned TypeScript SDK interface, which is not published yet; each call maps to a REST endpoint in the API reference.

Create a page​

const { data: page } = await leonai.bioPages.create({
slug: 'leon', // 3–30 chars, lowercase letters/digits/hyphens
title: 'Leon',
bio: 'Links & launches', // optional, up to 500 chars
avatarUrl: 'https://example.com/me.png', // optional
theme: { preset: 'midnight', accentColor: '#14b8a6' }, // optional
});

REST: POST /api/v1/bio-pages (scope links:write). Page count is capped by tier (Free 1, Pro 3, Business 10, Enterprise unlimited).

Add items​

Items are one of three types — link, header, or social:

await leonai.bioPages.createItem(page.id, {
type: 'link',
title: 'My site',
url: 'https://example.com',
// or reference an existing short link: linkId: 'link_...'
});

REST: POST /api/v1/bio-pages/:id/items. A link/social item can carry a url or a linkId (a linkId-backed item is tracked by that short link's own analytics), plus an optional icon and position.

Reorder items​

Pass item ids in the desired order:

await leonai.bioPages.reorderItems(page.id, ['item_2', 'item_1']);

Publish / unpublish​

await leonai.bioPages.publish(page.id);
await leonai.bioPages.unpublish(page.id);

Read and update​

await leonai.bioPages.list();
await leonai.bioPages.get(page.id); // includes items
await leonai.bioPages.update(page.id, { bio: 'Links & launches' });
await leonai.bioPages.delete(page.id);

REST: POST /api/v1/bio-pages/:id/publish (and .../unpublish). Reordering uses PUT /api/v1/bio-pages/:id/items/order with the full list of item ids in the desired order (it must be a permutation of the page's current items).

Once published, the page is resolvable publicly (no auth) at GET /api/v1/public/bio/:slug, and public item clicks are tracked via POST /api/v1/public/bio/:slug/items/:itemId/click.