Lnk.Bio hub

Lnk.Bio Links API

Every link on a public Lnk.Bio profile, in display order, with a cursor and the real total.

GET /v1/lnk-bio/profiles/{handle}/links

1 credit Failed requests are free

About this endpoint

GET /v1/lnk-bio/profiles/{handle}/links returns one page of a profile's links. limit is 1 to 200 and defaults to 100. Start without a cursor, then send page.nextCursor while page.hasMore is true.

On found, data.handle is the canonical handle, data.links is the page in display order, and data.linksTotal is the profile's full link count. Each link carries id, title, url, type, thumbnailUrl, position, group, badge and blockType. A link whose url is null is a block link, such as a contact form, and its blockType names the block. data.page has hasMore and nextCursor, and nextCursor is null on the last page.

The cursor is opaque and only works for the same handle. A cursor from another profile, or a damaged one, is refused with HTTP 400. A missing profile returns HTTP 200 with lookupStatus: "not_found" and an empty page.

Lnk.Bio Links API FAQ

How do I page through a long profile?

Start without a cursor, read data.links and data.page.nextCursor, then repeat the request with cursor set to that value while data.page.hasMore is true. The last page has nextCursor null.

What is linksTotal?

data.linksTotal is the profile's known full link count, not just the number on this page. It can be larger than data.links.length. When the response holds every link, it equals the number of links on the profile.

Why was my cursor refused?

A cursor only works for the same handle. Cursors from another profile, or a malformed cursor, are refused with HTTP 400. Start again without a cursor.

How many links fit on a page?

limit is 1 to 200 and defaults to 100. A page can be shorter than limit on the last page or when the profile has fewer links.

How is a paged list billed?

Pricing is documented on the operation in the API registry (shown on this page). Confirm on every response with meta.creditsCharged: that field is the billing source of truth. Each paginated page is a separate billed request.

What does not_found look like?

HTTP 200 with data.lookupStatus not_found, data.links empty, data.linksTotal null, and data.page.hasMore false. Branch on lookupStatus, not on the HTTP status.