List the links on a page
Just the link list for a page, optionally narrowed to one kind. This is the route where `links` sits at the top level — on /profile the same list is at `profile.links[]`, and confusing the two is the most common mistake with this API. Returns provider, handle, url, links, linkCount, totalLinks and destinationsResolved. `totalLinks` is how many entries the page has before `kind` and `limit` narrowed the list, so a filter that matches nothing is visibly a filter rather than an empty page. `destinationsResolved` says whether an absent `destination` means "not asked for" or "could not be reached". Pass `resolveDestinations` to follow every link through its redirects — that is how the retailer or affiliate network behind a shortened link is found, and it is the part almost nothing else does. Up to 500 links, 100 by default. A live page that publishes nothing is a 200 with `linkCount: 0` and a note; a page whose links could not be read at all is a 502. Billing: 1 credit.
/links Pages https://api.fetchlayer.dev/link-in-bio/links Headers
Authorization string required Bearer token — your FetchLayer API key.
Parameters
profile string required The full page address — https://linktr.ee/spotify, or linktr.ee/spotify. Not a bare handle: "spotify" alone is a 400 saying handles are not unique across services. A bare handle works only when `provider` is given too.
provider string optional The service a bare handle belongs to (linktree, lnkbio, allmylinks, solo and 26 more). Required when `profile` is a handle rather than an address, and ignored when it is an address.
kind string optional Return only entries of this kind: link, embed, product, social, heading or group.
limit integer optional Maximum links returned, up to 500. Use -1 for the maximum. (default: 100)
resolveDestinations boolean optional Follow every link through its redirects to where it really lands, filling in `destination`. Off by default: it turns one page fetch into one request per link, so a 68-link page is far slower than a 3-link one. (default: false)
format string optional json or markdown. Markdown returns a rendered summary instead of the structured record. (default: json)
timeoutMs integer optional Time limit for the request, in milliseconds (max 600000).
Response Fields
links
List the links on a page
transport string The upstream source. Always "link-in-bio-page".
resultType string Which route produced this record — profile, links, detect-provider, unwrap-link or resolve-url.
requestedUrl string The address this result corresponds to.
scrapedAt string ISO 8601 timestamp of the read.
blocked boolean Always false on a successful response.
notes string[] Caveats you can act on — a page that is live but publishes no links, a service that publishes no theme or plan details, a destination that could not be reached. Read these: an empty result always arrives with one.
pagesFetched number Pages fetched, which is what the request costs: one credit per page. detect-provider reports 0 when it recognised the address from its shape alone, and resolve-url fetches nothing at all.
provider string Short, stable id for the service.
handle string The creator’s handle on that service.
url string The page’s canonical public address.
links object[] The entries, in the page’s own order. On this route the list is at the top level.
links[].id string The service’s own id for the entry, stable across reads, or null.
links[].kind string link, embed, product, social, heading or group. Coarse on purpose, so it stays stable as services change their own vocabularies.
links[].providerType string The service’s own label for the entry, verbatim ("classic"). Free-form — do not switch on it.
links[].title string The label shown on the button.
links[].description string Supporting copy under the title, or null.
links[].url string Where the page sends a visitor. Null on a heading, a group, or a gated link whose target is withheld.
links[].position number 0-based position in the page’s own order.
links[].parentId string The id of the group or heading this sits under, or null at the top level.
links[].thumbnail object The image on the button, or null.
links[].tracked boolean True when clicks are routed through the service’s own click tracker rather than straight to `url`.
links[].monetized boolean True when the link earns the creator money — an affiliate link, a product, a paid unlock.
links[].product object Price and currency where the entry sells something, or null.
links[].gates object[] Gates on this specific link — an age check, a payment, an email capture. Empty when it is freely clickable.
links[].destination object Where `url` actually lands, when destinations were resolved: url, host, status, hops, truncated, title, shortened and unresolvedReason. Null when they were not asked for — check `destinationsResolved` rather than reading null as "goes nowhere".
linkCount number Links returned, after `kind` and `limit`.
totalLinks number Links on the page before `kind` and `limit` narrowed the list.
destinationsResolved boolean True when destinations were resolved for the returned links, so an absent `destination` is never ambiguous.
Request
curl -X POST "https://api.fetchlayer.dev/link-in-bio/links" \
-H "Authorization: Bearer ss-your-key" \
-H "Content-Type: application/json" \
-d '{"profile":"https://linktr.ee/spotify","resolveDestinations":true}'Response
{
"blocked": false,
"requestedUrl": "https://linktr.ee/spotify",
"scrapedAt": "2026-09-16T20:41:44.119Z",
"transport": "link-in-bio-page",
"notes": [],
"resultType": "links",
"pagesFetched": 1,
"provider": "linktree",
"handle": "spotify",
"url": "https://linktr.ee/spotify",
"links": [
{
"id": "9964805",
"kind": "link",
"providerType": "classic",
"title": "Playlist 1",
"description": null,
"url": "https://open.spotify.com/user/0658h6ocit7uqryixhxt0uivc/playlist/4Zv9I6yJwjuPXZbB3e1Rx8?si=tQaQ38ioQRCrbS7k87rFhw",
"position": 0,
"parentId": null,
"thumbnail": null,
"tracked": false,
"monetized": false,
"product": null,
"gates": [],
"destination": {
"url": "https://open.spotify.com/playlist/4Zv9I6yJwjuPXZbB3e1Rx8?si=tQaQ38ioQRCrbS7k87rFhw",
"host": "open.spotify.com",
"status": 200,
"hops": [
"https://open.spotify.com/playlist/4Zv9I6yJwjuPXZbB3e1Rx8?si=tQaQ38ioQRCrbS7k87rFhw"
],
"truncated": false,
"title": "Spotify",
"shortened": false,
"unresolvedReason": null
}
}
],
"linkCount": 6,
"totalLinks": 6,
"destinationsResolved": true
}