Lnk.Bio Profile API
One public Lnk.Bio profile with its identity, social icons and its main-page links.
GET /v1/lnk-bio/profiles/{handle}1 credit Failed requests are free
About this endpoint
GET /v1/lnk-bio/profiles/{handle} takes the handle as the profile shows it, for example sportsillustrated, Curate.in or S&S. Case is preserved, and a percent-encoded handle in the path is decoded once.
On found, data.profile carries the identity: handle, displayName, bio, avatarUrl, verified, connectedUsername, timezone, customDomainUrl, shareImageUrl, welcomePlaceholder and pages. Each page tab has id, title, heading and text when the profile provides them. data.links holds the links on the main page, each with id, title, url, type, thumbnailUrl, position, group, badge and blockType. data.socials holds the icons with a normalized platform slug, a url, the title and the networkCode. data.embeds holds iframe blocks with provider, url and title.
data.linksTotal is the number of links when known. It is null when the total is not known from this response; call the links route for the full count. When the response holds every link, linksTotal equals the number of links returned. data.linksTruncated is true when the links list may be incomplete; call the links route for the full list. A missing profile returns HTTP 200 with lookupStatus: "not_found", profile: null and empty arrays.
Lnk.Bio Profile API FAQ
Which handle format should I send?
Send the handle as the profile shows it. Case is preserved, and @, &, +, *, . and _ are valid characters. sportsillustrated, Curate.in, S&S and @brastel.thai all name public pages. A percent-encoded handle in the path is decoded once.
Why is linksTotal null?
linksTotal is null when the total is not known from this response; call the links route for the full count. When the response holds every link, linksTotal equals the number of links returned.
What is a block link?
A block link opens a form, image tag or carousel instead of a destination. Its data.links[].url is null and data.links[].blockType names the block, for example form. Other links carry a public http or https url.
How does not_found look?
HTTP 200 with data.lookupStatus not_found, data.profile null, and empty links, socials and embeds arrays. HTTP status alone only means the request finished, so branch on lookupStatus.
How many credits does a profile lookup cost?
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.