Linkme
GET /v1/linkme/profile

Linkme Profile API

Linkme profile → bio, profileVisitCount, featured links, webLinks, email/infoLinks, stripeStatus. Flat 1 credit.

1 credit per request
TL;DR
Linkme profile → bio, profileVisitCount, featured links, webLinks, email/infoLinks, stripeStatus. Flat 1 credit. The Linkme Profile API (Linkme) is a single authenticated 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

Open in Playground

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

Sign in to run live
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

NameTypeRequiredDescription
urlstringYesLinkme 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.
cachebooleanNoSet 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.
cacheMaxAgestringNoMax 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.

Using an AI agent? This endpoint is the MCP tool linkme_profile via @captapi/mcp. Set it up →

How it works

  1. 1. Sign up — get 100 free credits, no card required.
  2. 2. Create a key from your dashboard.
  3. 3. Send one request to /v1/linkme/profile and 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.