Every API here is available over the APIs.io API and to AI agents over MCP.
MCP server
One button, every client — Claude, Cursor, VS Code and the rest.
https://apis.io/mcp
Tools for apis
7 MCP tools reach this
find_apisBrowse and filter every API in the catalog.
get_api_artifactsOne API's artifacts, grouped by type.
get_openapiThe primary OpenAPI for this API.
find_similar_apisAPIs that look like this one.
apis_io_searchSTART HERE — APIs, providers and tags for one query, each with its total.
resolveTurn a domain, URL or GitHub org into the provider it belongs to.
find_cohortsEvery scored population of providers in the catalog.
All 92 tools →
Call it yourself
curl for this page
This API
curl "https://apis.io/api/v1/apis/captapi-com:captapi-com-linkme-api"
All apis
curl "https://apis.io/api/v1/apis?limit=25"
Discovery needs no key. Ratings and market analysis are Pro.
Get an API key
Free tier, no form to fill in. Signing in shares your email address with us — we
store it to create your key and to recognise you if you sign in with another
provider. See our Privacy Policy and
Terms.
A second provider on the same verified email joins the account you already have.
openapi: 3.2.0
info:
title: Captapi Linkme API
version: 0.1.0
summary: Structured public data from social platforms through one REST API.
description: 'Captapi returns public data (profiles, posts, comments, transcripts, search, ads, commerce) from social platforms as JSON.
Auth: send your key as `Authorization: Bearer capt_live_...` or `X-API-Key: capt_live_...`. Keys are created by a human at https://captapi.com/dashboard/api-keys.
Billing: each operation states its cost in `x-credit-cost`. The `X-Captapi-Credits` response header shows what was charged. Failed requests (4xx/5xx) are not billed. `cache=true` serves from the 24h cache, free on a hit where `billedOnCacheHit` is false. Where the price depends on which path served the call, `x-credit-cost.note` gives the full rule and the range we have observed.
Empty results: on many list and search endpoints a call that ran but found nothing is charged 0 credits (for example an ad-library or profile search with no matches). Where an empty result is still billed, the endpoint description says so; Google Maps business search, for instance, bills its one page because the lookup ran. The `X-Captapi-Credits` header always shows the actual charge.
Errors: every non-2xx response uses the same envelope, `{ success: false, error: { code, message, retryable } }`. Retry only when `retryable` is true, honouring `Retry-After`.
Timing: every response carries `Server-Timing: total;dur=`, the total time the request took. Deprecated: the `timings` object some endpoints still return in `data` will be removed from response bodies on 2026-12-17; use the header instead. It is not part of the response schemas below.
Response schemas are inferred from real captured responses and list the fields seen there plus documented top-level fields. Fields can be null when a platform does not expose them.
Endpoint list: https://captapi.com/llms-endpoints.txt · Guide for agents: https://captapi.com/llms.txt · MCP: https://captapi.com/mcp.json'
contact:
name: Captapi support
email: support@captapi.com
url: https://captapi.com
termsOfService: https://captapi.com/legal/terms
license:
name: Captapi Terms of Service
url: https://captapi.com/legal/terms
servers:
- url: https://api.captapi.com
security:
- bearerAuth: []
- apiKeyHeader: []
tags:
- name: Linkme
description: Public data from Linkme.
paths:
/v1/linkme/profile:
get:
operationId: linkme_profile
tags:
- Linkme
summary: Linkme Profile API
description: 'Linkme profile → bio, profileVisitCount, featured links, webLinks, email/infoLinks, stripeStatus.
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.
Docs: https://captapi.com/apis/linkme-profile'
security:
- bearerAuth: []
- apiKeyHeader: []
parameters:
- name: url
in: query
required: true
description: 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.
schema:
type: string
example: https://link.me/danucd
- name: cache
in: query
required: false
description: Set true to serve from the response cache (default TTL). Default false — always fetch fresh. Prefer cacheMaxAge when you need 1d–30d freshness control.
schema:
type: boolean
default: false
example: false
- name: cacheMaxAge
in: query
required: false
description: 'Max age of a cached response: 1d, 3d, 7d, 14d, or 30d. When set, enables caching with that TTL.'
schema:
enum:
- 1d
- 3d
- 7d
- 14d
- 30d
type: string
x-credit-cost:
credits: 1
label: 1 credit
billedOnCacheHit: false
x-one-liner: Linkme profile → bio, profileVisitCount, featured links, webLinks, email/infoLinks, stripeStatus.
responses:
'200':
description: Success. The data object for this endpoint.
headers:
X-Captapi-Credits:
$ref: '#/components/headers/Credits'
X-Captapi-Cache:
$ref: '#/components/headers/Cache'
X-Captapi-Request-Id:
$ref: '#/components/headers/RequestId'
Server-Timing:
$ref: '#/components/headers/ServerTiming'
content:
application/json:
schema:
type: object
required:
- success
- data
properties:
success:
const: true
data:
type: object
properties:
platform:
type: string
description: Platform identifier for this response (matches the endpoint's platform).
id:
type: string
description: Linkme profile id as a hex string.
url:
type: string
description: 'On the page: https://link.me/{username}. On a link row: outbound destination.'
username:
type: string
description: Linkme account username (bare, no @). Canonical account handle.
handle:
type: string
description: Account handle.
displayName:
type: string
description: firstName + lastName when present. Canonical human-readable name (no name/handle twins).
name:
type: string
description: 'Name of the item or account. On profile endpoints: deprecated alias of displayName (one release).'
firstName:
type: string
description: Given name from Linkme when distinct from displayName. Omitted when it would duplicate displayName with no lastName.
avatar:
type: string
description: Profile image URL on media.link.me. Check isDefaultProfilePicture before treating it as a real photo.
profileVisitCount:
type: string
description: Public 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.
createdAt:
type: string
description: Profile createdAt from Linkme (YYYY-MM-DD HH:mm:ss).
updatedAt:
type: string
description: Profile updatedAt from Linkme (YYYY-MM-DD HH:mm:ss).
email:
type: string
description: Public email from infoLinks when published. Null when unset.
socials:
type: object
properties:
appleMusic:
type: string
description: Apple music URL.
spotify:
type: string
description: Spotify URL.
instagram:
type: string
description: Instagram URL.
facebook:
type: string
description: Facebook URL.
twitter:
type: string
description: Twitter URL.
youtube:
type: string
description: Youtube URL.
tiktok:
type: string
description: Tiktok URL.
twitch:
type: string
description: Twitch URL.
threads:
type: string
description: Threads URL.
chatId:
type: string
description: 'Chat id. Example: "LinkMe-1169288".'
bio:
type: string
description: Creator bio from the dehydrated profile. Empty string when unset.
description:
type: string
description: Description text.
links:
type: array
items:
type: object
properties:
url:
type: string
description: 'On the page: https://link.me/{username}. On a link row: outbound destination.'
title:
type: string
description: Title of this links item.
id:
type: string
description: Id of this links item.
thumbnail:
type: string
description: Thumbnail image URL.
description: Featured CTA buttons [{id?, title, url, thumbnail?, description?}]. Never Privacy Policy / Terms footer rows. Not a union of webLinks/infoLinks — iterate links alone for CTAs.
linkCount:
type: integer
description: Number of featured CTA rows in links[] (not footer chrome). Prefer this when you need array length.
totalLinks:
type: integer
description: Linkme 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).
webLinks:
type: array
items:
type: object
properties:
title:
type: string
description: Title of this web links item.
linkId:
type: integer
description: Stable id for a bio link when Meta exposes one.
links:
type: array
items:
type: object
properties:
linkValue:
type: string
faceValue:
type: string
baseUrl:
type: string
description: Featured CTA buttons [{id?, title, url, thumbnail?, description?}]. Never Privacy Policy / Terms footer rows. Not a union of webLinks/infoLinks — iterate links alone for CTAs.
infoLinks:
type: array
items:
type: object
properties:
title:
type: string
description: Title of this info links item.
linkId:
type: integer
description: Stable id for a bio link when Meta exposes one.
links:
type: array
items:
type: object
properties:
linkValue:
type: string
faceValue:
type: string
description: Featured 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:
type: array
items:
type: object
properties:
url:
type: string
description: 'On the page: https://link.me/{username}. On a link row: outbound destination.'
title:
type: string
description: Title of this other item.
type:
type: string
description: Content type of the item.
stripeStatus:
type: object
properties:
tipsEnabled:
type: boolean
description: 'Tips enabled. Example: false.'
stripeEnabled:
type: boolean
description: 'Stripe enabled. Example: false.'
isDefaultProfilePicture:
type: boolean
description: True when Linkme is serving a placeholder avatar (e.g. default/profile/avatar-2.png) — not the creator's photo.
verifiedAccount:
type: boolean
description: True when Linkme marks the account verified.
isAmbassador:
type: boolean
description: True when the profile is a Linkme ambassador.
isPrivate:
type: boolean
description: True when the profile is private.
example:
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
'400':
$ref: '#/components/responses/Error400'
'401':
$ref: '#/components/responses/Error401'
'402':
$ref: '#/components/responses/Error402'
'404':
$ref: '#/components/responses/Error404'
'422':
$ref: '#/components/responses/Error422'
'429':
$ref: '#/components/responses/Error429'
'502':
$ref: '#/components/responses/Error502'
components:
responses:
Error429:
description: Rate limit reached. Wait for Retry-After seconds. Not billed.
headers:
Retry-After:
$ref: '#/components/headers/RetryAfter'
content:
application/json:
schema:
$ref: '#/components/schemas/Error'
example:
success: false
error:
code: rate_limit_exceeded
message: rate limit exceeded
retryable: true
plan: starter
limit_per_minute: 120
Error422:
description: A required parameter is missing or has the wrong type. Not billed.
content:
application/json:
schema:
$ref: '#/components/schemas/Error'
example:
success: false
error:
code: VALIDATION_ERROR
message: Request validation failed. Fix the listed fields and retry.
retryable: false
issues:
- type: missing
loc:
- query
- url
msg: Field required
input: null
Error404:
description: The resource does not exist or is not public. Not billed.
content:
application/json:
schema:
$ref: '#/components/schemas/Error'
example:
success: false
error:
code: NOT_FOUND
message: Monitor not found
retryable: false
Error502:
description: The platform could not be reached or returned nothing usable. Retryable, not billed. 503 and 504 use the same envelope.
headers:
Retry-After:
$ref: '#/components/headers/RetryAfter'
content:
application/json:
schema:
$ref: '#/components/schemas/Error'
example:
success: false
error:
code: UPSTREAM_UNAVAILABLE
message: The upstream data source failed for this request. Retry shortly.
retryable: true
Error401:
description: Missing, invalid or revoked API key. Not billed.
content:
application/json:
schema:
$ref: '#/components/schemas/Error'
example:
success: false
error:
code: UNAUTHORIZED
message: Invalid or revoked API key
retryable: false
Error400:
description: 'Bad request: wrong platform URL, unknown endpoint, or an invalid parameter value. Not billed.'
content:
application/json:
schema:
$ref: '#/components/schemas/Error'
example:
success: false
error:
code: WRONG_RESOURCE_TYPE
message: Expected a TikTok URL, but received a YouTube URL. Use the YouTube endpoint for that URL, or pass a TikTok URL like https://www.tiktok.com/@user/video/1234567890.
retryable: false
suggestedEndpoint: /v1/youtube/video-details
Error402:
description: Not enough credits for this request. Not billed.
content:
application/json:
schema:
$ref: '#/components/schemas/Error'
example:
success: false
error:
code: insufficient_credits
message: This call needs 2 credits; 1 available. No credits charged.
retryable: false
required: 2
available: 1
upgrade_url: /dashboard/billing
headers:
ServerTiming:
description: 'Total time the request took, in milliseconds: `total;dur=<ms>`. No per-step breakdown.'
schema:
type: string
example: total;dur=4387
Cache:
description: 1 when the response was served from the 24h cache, 0 otherwise.
schema:
type: string
enum:
- '0'
- '1'
RequestId:
description: Request id. Include it when contacting support.
schema:
type: string
RetryAfter:
description: Seconds to wait before retrying.
schema:
type: integer
Credits:
description: Credits charged for this request. 0 on a free cache hit or a failed request.
schema:
type: integer
schemas:
Error:
type: object
required:
- success
- error
properties:
success:
const: false
error:
type: object
required:
- code
- message
- retryable
properties:
code:
type: string
description: Machine-readable error code, e.g. WRONG_RESOURCE_TYPE, NOT_FOUND, insufficient_credits, rate_limit_exceeded. Compare case-sensitively; both upper and lower case codes exist.
message:
type: string
description: Human-readable explanation.
retryable:
type: boolean
description: true when the same request may succeed later (429, most 5xx). Do not retry when false.
suggestedEndpoint:
type:
- string
- 'null'
description: On platform mismatch, the endpoint that matches the URL you sent.
additionalProperties: true
securitySchemes:
bearerAuth:
type: http
scheme: bearer
description: 'Your API key: `Authorization: Bearer capt_live_...`. Create one at https://captapi.com/dashboard/api-keys.'
apiKeyHeader:
type: apiKey
in: header
name: X-API-Key
description: 'Alternative to the bearer header: `X-API-Key: capt_live_...`.'
externalDocs:
description: Docs
url: https://captapi.com/docs