Linkme Profile API
Linkme profile → bio, profileVisitCount, featured links, webLinks, email/infoLinks, stripeStatus. Flat 1 credit.
GET request to /v1/linkme/profile that responds with clean JSON and costs 1 credit. Pass cache=true for a free 24h cache hit; default is always fresh. Start with 100 free credits — no credit card.What is the Linkme Profile API?
Paste a Linkme URL (link.me/danucd) and get the public profile from Linkme's dehydrated SSR payload (TanStack $tsr) — not HTML meta tags or the site footer. Identity: id, username, displayName, firstName/lastName when distinct, bio, avatar + isDefaultProfilePicture. Audience: profileVisitCount (e.g. 15.9k) and totalLinks (Linkme's SSR counter — not links[].length). Flags: verifiedAccount, isAmbassador, isPrivate. Timestamps: createdAt/updatedAt. links[] are featured CTA rows; webLinks[] are social icon groups; infoLinks[] carry email/contact — three separate buckets, not a union. stripeStatus{tipsEnabled,stripeEnabled} signals monetization; socials{} + other[] cover mapped/unmapped networks. Flat 1 credit. Pass cache=true or cacheMaxAge (1d/3d/7d/14d/30d) for the shared response cache.
What you get
- Display name, handle or URL, bio, and avatar when available
- Follower / subscriber and content counts
- Verification status and external links when exposed
- Structured JSON ready for enrichment and dashboards
Try it
Fill in the parameters below and copy a ready-to-run request, or open the live Playground to run it against your account (no API key paste).
Parameters
curl "https://api.captapi.com/v1/linkme/profile?url=https%3A%2F%2Flink.me%2Fdanucd" \
-H "Authorization: Bearer capt_live_..."
# or: -H "x-api-key: capt_live_..."Edit the parameters and the code updates instantly. Switch languages and hit copy.
Example response
{
"success": true,
"data": {
"platform": "linkme",
"id": "1bf3efbf94cc4f55d3650ddc61094ac3",
"url": "https://link.me/danucd",
"username": "danucd",
"handle": "danucd",
"displayName": "Dana",
"name": "Dana",
"firstName": "Dana",
"avatar": "https://media.link.me/_resize/image/quality=90,format=webp/webp-images/user-profile/1169288/tmp-2541-1763300314455.webp",
"profileVisitCount": "54.1k",
"createdAt": "2024-11-01 12:37:51",
"updatedAt": "2025-11-16 13:43:17",
"email": "dana.danucd@gmail.com",
"socials": {
"appleMusic": "https://music.apple.com/ng/artist/danucd/1562315189",
"spotify": "https://open.spotify.com/artist/0A8XmfCL2yangEtvot3peD?autoplay=true&source_application=google_assistant",
"instagram": "https://www.instagram.com/danucd/",
"facebook": "https://www.facebook.com/Danucd",
"twitter": "https://www.twitter.com/Danucd1",
"youtube": "https://www.youtube.com/@DanucD2",
"tiktok": "https://www.tiktok.com/@danucd_",
"twitch": "https://m.twitch.tv/danucd?fbclid=PAZXh0bgNhZW0CMTEAAaaw5KxeIr47f2JnvCWttLnzIFG35Q8vQ6dK_H4Pv7bQKefUMmqYXvRPm90_aem_qRBQ5McX7dnSwaw8aHxqaA&desktop-redirect=true",
"threads": "https://www.threads.net/@danucd?hl=en"
},
"chatId": "LinkMe-1169288",
"bio": "ALL MY LINKS👇",
"description": "ALL MY LINKS👇",
"links": [
{
"url": "https://twitch.tv/danucd",
"title": "Twitch",
"id": "231267",
"thumbnail": "small"
},
{
"url": "https://www.youtube.com/@DanucD2",
"title": "Daily YouTube",
"id": "611348",
"thumbnail": "small"
}
],
"linkCount": 12,
"totalLinks": 7,
"webLinks": [
{
"title": "Apple-music",
"linkId": 9,
"links": [
{
"linkValue": "https://music.apple.com/ng/artist/danucd/1562315189",
"faceValue": "1562315189",
"baseUrl": "https://music.apple.com/profile/"
}
]
},
{
"title": "Spotify",
"linkId": 10,
"links": [
{
"linkValue": "https://open.spotify.com/artist/0A8XmfCL2yangEtvot3peD?autoplay=true&source_application=google_assistant",
"faceValue": "0A8XmfCL2yangEtvot3peD",
"baseUrl": "https://open.spotify.com/user/"
}
]
}
],
"infoLinks": [
{
"title": "Email",
"linkId": 1,
"links": [
{
"linkValue": "dana.danucd@gmail.com",
"faceValue": "dana.danucdgmail.com"
}
]
}
],
"other": [
{
"url": "https://www.deezer.com/artist/129733822/radio?autoplay=true",
"title": "Deezer",
"type": "Deezer"
}
],
"stripeStatus": {
"tipsEnabled": false,
"stripeEnabled": false
},
"isDefaultProfilePicture": false,
"verifiedAccount": false,
"isAmbassador": true,
"isPrivate": false
}
}Billing metadata is returned in response headers: X-Captapi-Credits (credits charged), X-Captapi-Cache (hit or miss), and X-Captapi-Source. Failed requests (4xx/5xx) are never charged. See the full list of error codes in the error reference.
Response structure
A successful call returns success, cached, creditsUsed, and a data object with the following fields:
Top-level fields
platformPlatform identifier for this response (matches the endpoint's platform).idLinkme profile id as a hex string.urlOn the page: https://link.me/{username}. On a link row: outbound destination.usernameLinkme account username (bare, no @). Canonical account handle.handleAccount handle.displayNamefirstName + lastName when present. Canonical human-readable name (no name/handle twins).nameName of the item or account. On profile endpoints: deprecated alias of displayName (one release).firstNameGiven name from Linkme when distinct from displayName. Omitted when it would duplicate displayName with no lastName.avatarProfile image URL on media.link.me. Check isDefaultProfilePicture before treating it as a real photo.profileVisitCountPublic profile visit count as Linkme displays it (string, e.g. "15.9k" or "29"). One of the few audience metrics in the link-in-bio block.createdAtProfile createdAt from Linkme (YYYY-MM-DD HH:mm:ss).updatedAtProfile updatedAt from Linkme (YYYY-MM-DD HH:mm:ss).emailPublic email from infoLinks when published. Null when unset.chatIdChat id. Example: "LinkMe-1169288".bioCreator bio from the dehydrated profile. Empty string when unset.descriptionDescription text.linkCountNumber of featured CTA rows in links[] (not footer chrome). Prefer this when you need array length.totalLinksLinkme SSR profile.totalLinks — the platform's own counter from the dehydrated profile. Not derived from links[], webLinks[], or infoLinks[] (those are separate surfaces and their lengths can disagree with this number).isDefaultProfilePictureTrue when Linkme is serving a placeholder avatar (e.g. default/profile/avatar-2.png) — not the creator's photo.verifiedAccountTrue when Linkme marks the account verified.isAmbassadorTrue when the profile is a Linkme ambassador.isPrivateTrue when the profile is private.
Socials
The socials object contains:
appleMusicApple music URL.spotifySpotify URL.instagramInstagram URL.facebookFacebook URL.twitterTwitter URL.youtubeYoutube URL.tiktokTiktok URL.twitchTwitch URL.threadsThreads URL.
Links
Each item in links contains:
urlOn the page: https://link.me/{username}. On a link row: outbound destination.titleTitle of the item.idLinkme profile id as a hex string.thumbnailThumbnail image URL.
Web links
Each item in webLinks contains:
titleTitle of the item.linkIdStable id for a bio link when Meta exposes one.linksFeatured CTA buttons [{id?, title, url, thumbnail?, description?}]. Never Privacy Policy / Terms footer rows. Not a union of webLinks/infoLinks — iterate links alone for CTAs.
Info links
Each item in infoLinks contains:
titleTitle of the item.linkIdStable id for a bio link when Meta exposes one.linksFeatured CTA buttons [{id?, title, url, thumbnail?, description?}]. Never Privacy Policy / Terms footer rows. Not a union of webLinks/infoLinks — iterate links alone for CTAs.
Other
Each item in other contains:
urlOn the page: https://link.me/{username}. On a link row: outbound destination.titleTitle of the item.typeContent type of the item.
Stripe status
The stripeStatus object contains:
tipsEnabledTips enabled. Example: false.stripeEnabledStripe enabled. Example: false.
Parameters
| Name | Type | Required | Description |
|---|---|---|---|
| url | string | Yes | Linkme profile URL or username, e.g. https://link.me/danucd or danucd. The URL platform must match this endpoint's platform. Do not pass cross-platform URLs, e.g. YouTube to TikTok, Instagram to Facebook, LinkedIn to X/Twitter, or Pinterest to Rumble. |
| cache | boolean | No | Set true to serve from the response cache (default TTL). Default false — always fetch fresh. Prefer cacheMaxAge when you need 1d–30d freshness control. Envelope includes cached + cachedAt on hits. |
| cacheMaxAge | string | No | Max age of a cached response: 1d, 3d, 7d, 14d, or 30d. When set, enables caching with that TTL (SC cache_max_age). Envelope: cached + cachedAt. |
Authentication: send your key as Authorization: Bearer capt_live_.... A typical call costs 1 credit. Pass cache=true for a free 24h cache hit; default is always fresh.
How it works
- 1. Sign up — get 100 free credits, no card required.
- 2. Create a key from your dashboard.
- 3. Send one request to
/v1/linkme/profileand parse the JSON response.
Use cases
Audience sizing
Use profileVisitCount (e.g. 15.9k) with totalLinks — one of the few public link-in-bio audience metrics.
Lead enrichment
Read infoLinks / top-level email plus stripeStatus.tipsEnabled for contact and monetization signals.
Social + CTA inventory
Pipe socials{} / webLinks[] into Captapi profile endpoints and treat links[] as featured CTAs (not footer chrome).
Avatar quality gate
Skip isDefaultProfilePicture=true avatars so placeholder images never enter your creator DB.
Frequently asked questions
What does the Linkme Profile API do?+
The Linkme Profile API lets you fetch profile or page details and audience stats from a public Linkme profile or page using one GET request to /v1/linkme/profile. It returns clean JSON — no OAuth or infrastructure setup required.
How many credits does the Linkme Profile API cost?+
Each successful call costs 1 credit. Pass cache=true to serve from the 24h cache (0 credits on hit); default is always fresh. Hits include cached + cachedAt. Selected profile endpoints also accept cacheMaxAge=1d|3d|7d|14d|30d. Failed or empty results are never charged.
Do I need a Linkme API key or OAuth?+
No. A single Captapi key works across every platform Captapi supports — YouTube, TikTok, Instagram, Facebook, Twitter/X, Reddit, Threads, Bluesky, Pinterest, LinkedIn, Rumble, Spotify, Kwai, and more. We handle proxies, rate limits, retries, and authentication for you.
Why did Linkme used to return Privacy Policy and Terms as links?+
An older HTML scrape read the SSR shell meta tags and site footer. We now parse Linkme's dehydrated TanStack $tsr profile (same payload SC uses): bio, profileVisitCount, featured links[], webLinks[], infoLinks/email, stripeStatus, and isDefaultProfilePicture. Footer chrome is never returned. Flat 1 credit.
Is the Linkme Profile API suitable for production use?+
Yes. It is a stable REST endpoint with predictable JSON and automatic retries. Pass cache=true to serve from the 24h cache (0 credits on hit); default is always fresh. Hits include cached + cachedAt. Selected profile endpoints also accept cacheMaxAge=1d|3d|7d|14d|30d. Use it for analytics, monitoring, and content automation.
Ready to use the Linkme Profile API?
Sign up, grab your key, and make your first call in 60 seconds.