Link Unwrapper API — Follow a Redirect Chain
Documentation menu
FetchLayer FetchLayer API

Follow one link to where it really goes

Follows a single link through its redirects and reports where it lands: the final url, its host and page title, every hop in order, whether the chain went through a link shortener or an affiliate redirector, and whether it hit the step limit and may continue. Use it on a shortened or campaign link when you want the retailer or network at the end rather than the wrapper at the start — a creator's page sends you to lnk.to, and lnk.to sends you to Spotify. Up to 20 hops, 10 by default. When the chain is still going, `truncated` is true and `url` is the furthest point reached rather than the end. When nothing could be established, `unresolvedReason` says why rather than leaving a null unexplained. Billing: 1 credit.

POST /unwrap-link Destinations
https://api.fetchlayer.dev/link-in-bio/unwrap-link
OpenAPI JSON

Headers

Authorization string required

Bearer token — your FetchLayer API key.

Parameters

url string required

The link to follow to its real destination.

maxHops integer optional

How many redirects to follow, up to 20. (default: 10)

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

unwrap-link

Follow one link to where it really goes

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.

url string

The link that was followed.

destination.url string

The address the chain ended at.

destination.host string

Host of that address, so destinations can be grouped without re-parsing.

destination.status number

HTTP status at the end of the chain, or null when none was established.

destination.hops string[]

Each intermediate address, in order, excluding the starting one.

destination.truncated boolean

True when the chain hit the step limit and may continue further.

destination.title string

Page title at the destination, where one was readable.

destination.shortened boolean

True when the chain went through a known link shortener or affiliate redirector, anywhere along it.

destination.unresolvedReason string

Why no destination could be established, when status is null — the host did not answer, refused the request, and so on.

Request

curl -X POST "https://api.fetchlayer.dev/link-in-bio/unwrap-link" \
  -H "Authorization: Bearer ss-your-key" \
  -H "Content-Type: application/json" \
  -d '{"url":"https://bennyblanco.lnk.to/TeOlvido"}'

Response

{
  "blocked": false,
  "requestedUrl": "https://bennyblanco.lnk.to/TeOlvido",
  "scrapedAt": "2026-09-16T20:43:02.551Z",
  "transport": "link-in-bio-page",
  "notes": [],
  "resultType": "unwrap-link",
  "pagesFetched": 1,
  "url": "https://bennyblanco.lnk.to/TeOlvido",
  "destination": {
    "url": "https://bennyblanco.lnk.to/TeOlvido",
    "host": "bennyblanco.lnk.to",
    "status": 200,
    "hops": [],
    "truncated": false,
    "title": "benny blanco, Selena Gomez, Becky G - Te Olvido (La La)",
    "shortened": true,
    "unresolvedReason": null
  }
}