> **For coding agents and LLMs:** This is one Social Fetch marketing page (markdown export). For API orientation start with [`/llms.txt`](https://www.socialfetch.dev/llms.txt); for auth and crawl rules use [`/agents.txt`](https://www.socialfetch.dev/agents.txt); for every operation use [`/llms-endpoints.txt`](https://www.socialfetch.dev/llms-endpoints.txt).

## This page

- **On-site (HTML):** <https://www.socialfetch.dev/platforms/lnk-bio/profiles-handle>
- **Markdown (.mdx) URL:** <https://www.socialfetch.dev/platforms/lnk-bio/profiles-handle.mdx>

---

# 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}` 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.

## Request

- **Endpoint:** `GET /v1/lnk-bio/profiles/{handle}`
- **Credits:** 1 credit
Failed requests are free
- **Input:** by handle
- **Full reference:** [docs](https://www.socialfetch.dev/docs/api/v1/lnk-bio/profiles/handle/get)
- **Platform page:** [/platforms/lnk-bio](https://www.socialfetch.dev/platforms/lnk-bio)

## 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.
