LurkAPI
Docs · Profile

Profile

An account's bio, avatar, banner and exact follower, following and post counts.

1 credit per callFresh within 30 secondsMCP tool: bluesky_profile
GEThttps://api.lurkapi.com/v1/bluesky/profile

Example responseView as markdown

When to use this

Use it to size up an account: exact followers, following and posts, plus bio, images and join date. did is the permanent id; the handle can change.

Accounts that opted out of logged-out visibility (!no-unauthenticated) return 403 not_public.

Unknown, deactivated and suspended accounts return 404 not_found.

Parameters

All parameters go in the query string.

ParameterDescription
handle
stringrequired
Handle (e.g. bsky.app, with or without @), a DID (did:plc:…) or the profile URL. A bare name like jay means jay.bsky.social.
Example
bsky.app

Example request

Replace YOUR_API_KEY with your key, or set LURKAPI_KEY for the code. Get a free key.

Language

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 (1 KB)
{
  "success": true,
  "credits_remaining": 999994,
  "credits_charged": 1,
  "did": "did:plc:z72i7hdynmk6r22z27h6tvur",
  "handle": "bsky.app",
  "displayName": "Bluesky",
  "description": "official Bluesky account (check username👆)\n\nBugs, feature requests, feedback: support@bsky.app",
  "url": "https://bsky.app/profile/bsky.app",
  "avatar": "https://cdn.bsky.app/img/avatar/plain/did:plc:z72i7hdynmk6r22z27h6tvur/b…",
  "banner": "https://cdn.bsky.app/img/banner/plain/did:plc:z72i7hdynmk6r22z27h6tvur/b…",
  "followersCount": 35097048,
  "followsCount": 15,
  "postsCount": 865,
  "createdAt": "2023-04-12T04:53:57.057Z",
  "pinnedPost": "at://did:plc:z72i7hdynmk6r22z27h6tvur/app.bsky.feed.post/3l6oveex3ii2l",
  "verified": false,
  "hiddenFromLoggedOut": false
}

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 17 fields
FieldTypeDescription
successtrueAlways true here; errors have success: false.
credits_remainingnumberYour balance after this call. On anonymous playground calls: free tries left today.
credits_chargednumberCredits this call cost; 0 on free endpoints. On anonymous playground calls: tries used (1).
didstringThe account's permanent id, e.g. did:plc:z72i7hdynmk6r22z27h6tvur.
handlestringHandle, e.g. bsky.app.
displayNamestringnullableDisplay name; null if not set.
descriptionstringnullableBio text; null if not set.
urlstringThe profile on bsky.app.
avatarstringnullableAvatar image URL; null if none.
bannerstringnullableBanner image URL; null if none.
followersCountnumberFollowers, exact.
followsCountnumberAccounts they follow.
postsCountnumberPosts, replies included.
createdAtstringnullableWhen the account was created, ISO 8601.
pinnedPoststringnullableat:// URI of the pinned post; null if none.
verifiedbooleanHas Bluesky's blue verification check.
hiddenFromLoggedOutbooleanAlways false for returned profiles. Accounts hidden from logged-out visitors return 403 not_public.

Caching and freshness

Responses are cached for up to 30 seconds, 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.

StatusCodeMeaning
401missing_api_keyNo API key. Send it in the x-api-key header.
401invalid_api_keyThe key is unknown or was revoked.
402insufficient_creditsNot enough credits for this call. Buy a pack or wait for tomorrow's top-up.
403not_publicThe platform confirmed this account or content isn't available to logged-out visitors. Use a publicly visible target. Charged when the platform was checked.
404not_foundThe endpoint, or the thing you asked for (ad, post, subreddit), doesn't exist. Charged when the platform was checked.
405method_not_allowedEndpoints take GET with query params.
429rate_limitedToo many calls at once. Wait for the retry-after seconds, then retry.
500internal_errorSomething broke on our side. Retry; 5xx errors are free.
502upstream_errorThe platform didn't give a usable answer. Retry; 5xx errors are free.
503upstream_busyAll our connections to the platform are busy. Retry in a few seconds; 5xx errors are free.
504upstream_timeoutThe 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 bluesky_profile tool. Ask in plain English, for example:

Ask Claude
Use LurkAPI's bluesky_profile with handle "bsky.app" and summarize what you find.

Claude calls bluesky_profile with arguments like these, and each call costs 1 credit:

Tool arguments
{
  "handle": "bsky.app"
}

Tool results skip nulls and empty lists to save tokens.