Docs · Linktree page
Linktree page
A public Linktree profile, its link cards and listed social accounts.
https://api.lurkapi.com/v1/linktreeWhen to use this
Pass a linktr.ee profile URL. Returns the profile's title, bio, picture, categories, public link cards and social links in the page's order. Link cards without a destination (such as a header or embedded shop) have url: null. Locked link destinations are withheld. Missing pages return 404 not_found; pages requiring a password or content consent return 403 not_public. Results are cached for up to one day. This endpoint reads the page and does not follow its outgoing links.
Parameters
All parameters go in the query string.
| Parameter | Description |
|---|---|
urlstringrequired | The creator's Linktree profile URL, such as https://linktr.ee/linktree. Tracking parameters are ignored.
|
Example request
Replace YOUR_API_KEY with your key, or set LURKAPI_KEY for the code. Get a free key.
curl "https://api.lurkapi.com/v1/linktree?url=https%3A%2F%2Flinktr.ee%2Fmiguelangeles" \
-H "x-api-key: YOUR_API_KEY"const params = new URLSearchParams({
url: "https://linktr.ee/miguelangeles",
});
const res = await fetch(`https://api.lurkapi.com/v1/linktree?${params}`, {
headers: { "x-api-key": process.env.LURKAPI_KEY },
});
const data = await res.json();
if (!data.success) throw new Error(`${data.code}: ${data.error}`);
console.log(data.verticals);import os
import requests
res = requests.get(
"https://api.lurkapi.com/v1/linktree",
params={
"url": "https://linktr.ee/miguelangeles",
},
headers={"x-api-key": os.environ["LURKAPI_KEY"]},
timeout=60,
)
data = res.json()
if not data["success"]:
raise RuntimeError(f"{data['code']}: {data['error']}")
print(data["verticals"])Example response
A real response from this endpoint, captured from the live API and trimmed to a couple of items. Strings over 96 characters (mostly signed media URLs) are cut short and end in ….
Show the example response (3 KB)Hide
{
"success": true,
"credits_remaining": 999942,
"credits_charged": 1,
"id": 15278008,
"username": "miguelangeles",
"pageTitle": "MIGUEL ANGELES",
"profilePictureUrl": "https://ugc.production.linktr.ee/d3141538-f586-4f3f-bc9a-a82fbebab798_DE…",
"description": "☆☆☆☆ IRL ANGEL ☆☆☆☆\nψ EMBRACE CHAOS ψ",
"verticals": [
"music",
"creative",
"arts-entertainment"
],
"linkPlatforms": [
"TikTok",
"Instagram"
],
"timezone": "America/New_York",
"links": [
{
"id": 463416775,
"type": "SPOTIFY_ALBUM",
"title": "new project \"BEFORE THE SUN RISES & WINTERR ENDS\"",
"url": "https://open.spotify.com/album/0pgrg7phBbnwGJ2HBEl9EG?si=Zub7J4I3RySAaM9WVX3Okg",
"thumbnailUrl": "https://ugc.production.linktr.ee/8ed131c7-6d74-47fc-bceb-8be7f6bae4c8_ab…",
"locked": false
},
{
"id": 460281204,
"type": "SPOTIFY_SONG",
"title": "stream \"NOVEMBERR\"",
"url": "https://open.spotify.com/track/62HnBMEdZjeFCd2T8g37T8?si=7bd35dd0e9f24d65",
"thumbnailUrl": "https://ugc.production.linktr.ee/3bd59146-cd44-4187-9601-4341b21070d2_ab…",
"locked": false
}
],
"socialLinks": [
{
"type": "INSTAGRAM",
"url": "https://instagram.com/miguelangeles"
},
{
"type": "SPOTIFY",
"url": "https://open.spotify.com/artist/14xRX3JR8H4RWh8R7V3fvZ?si=EgRxWIPiRcaEHtSnqk5PAQ"
},
{
"type": "SOUNDCLOUD",
"url": "https://soundcloud.com/miguelangeles"
},
{
"type": "YOUTUBE",
"url": "https://www.youtube.com/watch?v=xiFUzOJaiC4"
},
{
"type": "APPLE_MUSIC",
"url": "https://music.apple.com/ca/artist/miguel-angeles/1209423162"
},
{
"type": "TIKTOK",
"url": "https://tiktok.com/@irlangel"
},
{
"type": "EMAIL_ADDRESS",
"url": "mailto:miguel@irlangel.com"
}
],
"instagram": "https://instagram.com/miguelangeles",
"tiktok": "https://tiktok.com/@irlangel",
"spotify": "https://open.spotify.com/artist/14xRX3JR8H4RWh8R7V3fvZ?si=EgRxWIPiRcaEHtSnqk5PAQ",
"youtube": "https://www.youtube.com/watch?v=xiFUzOJaiC4",
"soundcloud": "https://soundcloud.com/miguelangeles",
"apple_music": "https://music.apple.com/ca/artist/miguel-angeles/1209423162",
"email_address": "miguel@irlangel.com"
}Response fields
Every field of a successful response. [] marks a list: a[].b is the b of each item in a. nullable fields can be null; optional fields can be missing.
Show all 28 fieldsHide
| Field | Type | Description |
|---|---|---|
| success | true | Always true here; errors have success: false. |
| credits_remaining | number | Your balance after this call. On anonymous playground calls: free tries left today. |
| credits_charged | number | Credits this call cost; 0 on free endpoints. On anonymous playground calls: tries used (1). |
| id | integer | Linktree account id. |
| username | string | The profile's Linktree username. |
| pageTitle | string | Profile title; the username when no title is set. |
| profilePictureUrl | stringnullable | Profile picture URL; null when no picture is set. |
| description | stringnullable | Profile bio as plain text; null when none is set. |
| verticals | string[] | Creator categories selected on Linktree, such as music or internet-technology. |
| linkPlatforms | string[] | Social platform labels provided by Linktree, in the source order. |
| timezone | stringnullable | Account timezone reported by the public page; null when absent. |
| links | object[] | Public top-level link cards in page order; embedded product details and nested collection contents are not returned. |
| links[].id | integer | Link card id. |
| links[].type | string | Linktree card type, such as CLASSIC, HEADER or YOUTUBE_VIDEO. |
| links[].title | stringnullable | Link card title; null if none is set. |
| links[].url | stringnullable | Public destination URL; null for locked cards or cards without an outgoing URL. |
| links[].thumbnailUrl | stringnullable | Card thumbnail URL; null when none is set. |
| links[].locked | boolean | Linktree marks this card as locked; its destination is withheld. |
| socialLinks | object[] | Listed social destinations in their displayed order. |
| socialLinks[].type | string | Linktree's social type, such as INSTAGRAM, TIKTOK or EMAIL_ADDRESS. |
| socialLinks[].url | string | The social destination or mailto URL listed on the profile. |
| stringnullable | Public Instagram social link; null if the profile does not list one. | |
| tiktok | stringnullable | Public TikTok social link; null if the profile does not list one. |
| spotify | stringnullable | Public Spotify social link; null if the profile does not list one. |
| youtube | stringnullable | Public YouTube social link; null if the profile does not list one. |
| soundcloud | stringnullable | Public SoundCloud social link; null if the profile does not list one. |
| apple_music | stringnullable | Public Apple Music social link; null if the profile does not list one. |
| email_address | stringnullable | Email address from the public EMAIL_ADDRESS social link, without mailto or query parameters; null when none is listed. |
Caching and freshness
Responses are cached for up to 1 day, so a repeat call within that window can return the same data. It still costs 1 credit.
Errors
Errors return { success: false, error, code, docs } with the HTTP status below. Validation errors, 401/402/429 rejections and 5xx failures are free; not_found is charged (how charging works). All error codes.
| Status | Code | Meaning |
|---|---|---|
| 401 | missing_api_key | No API key. Send it in the x-api-key header. |
| 401 | invalid_api_key | The key is unknown or was revoked. |
| 402 | insufficient_credits | Not enough credits for this call. Buy a pack or wait for tomorrow's top-up. |
| 403 | not_public | The platform confirmed this account or content isn't available to logged-out visitors. Use a publicly visible target. |
| 404 | not_found | The endpoint, or the thing you asked for (ad, post, subreddit), doesn't exist. Charged when the platform was checked. |
| 405 | method_not_allowed | Endpoints take GET with query params. |
| 429 | rate_limited | Too many calls at once. Wait for the retry-after seconds, then retry. |
| 500 | internal_error | Something broke on our side. Retry; 5xx errors are free. |
| 502 | upstream_error | The platform didn't give a usable answer. Retry; 5xx errors are free. |
| 503 | upstream_busy | All our connections to the platform are busy. Retry in a few seconds; 5xx errors are free. |
| 504 | upstream_timeout | The platform took over 30 seconds to answer. Retry; timeouts are free. |
Use it in Claude
Once LurkAPI is connected to Claude, this endpoint is the linkinbio_linktree tool. Ask in plain English, for example:
Use LurkAPI's linkinbio_linktree with url "https://linktr.ee/miguelangeles" and summarize what you find.Claude calls linkinbio_linktree with arguments like these, and each call costs 1 credit:
{
"url": "https://linktr.ee/miguelangeles"
}Tool results skip nulls and empty lists to save tokens.