Skip to main content
POST
Pass a Reddit or LinkedIn profile_url, or use the existing linkedin_url field for LinkedIn. Send exactly one URL field.

LinkedIn

Pass a linkedin_url from Search people, or one you already have. The person’s full public LinkedIn profile is collected from AnyAPI first; a 404 means no profile was found for that address. Send platforms: [] to get only the profile. Contact lookup is off by default. With contact: true, person.emails and person.phones hold the person’s work and personal emails and phone numbers from Crustdata, looked up alongside the platforms. Each email has a type, work or personal, and a status: deliverable; catch_all, when the domain accepts any address so delivery isn’t certain; or unknown. Addresses Crustdata found to bounce are left out. The lookup costs Crustdata credits, about 1 plus 1 for work emails and 2 each for personal emails and phone numbers found, and fails independently: if the lookup fails, the contact lists are empty and the rest of the response still returns. person.posts holds the person’s linkedin_posts most recent LinkedIn posts (10 by default, up to 100), newest first, read from LinkedIn alongside the platforms. Reposts are included and labeled by type: post is the person’s own; repost is someone else’s post shared without comment, so its text is empty, its url is that post’s and referenced holds that post’s author and text; quote is someone else’s post shared with the person’s own text, with the quoted post in referenced. created_at is the day the person posted or shared it. One read usually returns up to 100 posts and costs the same however many; asking for more than 50 sometimes takes a second read. A person with fewer posts than asked for returns fewer. If the lookup fails, person.posts is empty and the rest of the response still returns. Send linkedin_posts: 0 to skip it. Each platform runs in parallel and fails independently: if one platform’s search fails, its result list is empty and the others still return. Accounts and videos are filtered to confident matches when ranking succeeds. See Matching. With youtube in platforms (the default), videos lists YouTube videos from searching the person’s name and, when their profile has a current employer, the name with that employer. Each video is checked for whether the person speaks in it, as a speaker, guest, interviewee or panelist, on any channel, and only matches come back. Videos where others talk about them or their work are left out.

Facebook

Facebook is included in the default platforms. To request it alone, send:
accounts.facebook contains confident matches found by looking up the person’s name and comparing public Facebook profile information with LinkedIn. max_results.facebook controls how many candidates are checked (1–7, default 7). A matching name or verification badge alone is insufficient. Unreadable profiles and ambiguous candidates are omitted; if the comparison fails, no Facebook matches are returned. Personal profiles and the person’s own public creator Pages are eligible; employer and fan Pages are not. This flow uses AnyAPI’s Facebook endpoints, without People Data Labs. With enrich_accounts: true, each match includes its profile and up to account_posts available public posts, reading at most five provider pages. Private or unavailable content is not accessible. Post failures preserve the matched profile and any posts already read, with enrichment.posts_error explaining the failure. account_posts: 0 skips posts. Facebook following lists are not fetched. Direct Facebook URLs are not accepted as the input to Enrich person; start with LinkedIn.

Matches come back enriched

In the same call, as soon as each platform’s accounts are ranked, every matched account is enriched: its enrichment holds the account’s profile, its account_posts most recent posts and the account_following accounts it follows. Up to 8 matched videos get their transcript: the captions’ whole text, as a string. These are billed with this call, and fail on their own: an account that can’t be enriched has enrichment: { "error": "…" }, and a video without captions has transcript: null and a transcript_error. Send enrich_accounts: false or transcribe_videos: false to skip them.

Reddit

Send profile_url: "https://www.reddit.com/user/username/", or click Enrich on a Reddit search result. Enrichment reads that account directly; it does not infer a real name, match other social accounts, or look up contact details. person contains platform: "reddit", the username, public display name, avatar (picture_url), bio (summary), account creation date, karma split, public activity counts, followers, trophies, and available account flags. Missing values are null or empty. The provider’s profile counts may differ from the activity returned by its history sources. A missing or suspended profile returns 404. By default, the response includes one whole provider page in each of reddit.posts and reddit.comments, newest first. Pages vary in size; this is recent public activity, not a guarantee of complete account history. Each feed contains items and next_cursor. Send reddit_posts: false or reddit_comments: false to skip a feed; disable both for just the profile. Comments contain body_preview, is_preview: true, the parent post title, and thread_url. The text may be shortened and the link opens the thread, not the individual comment. Posts include their title, available body text, date, subreddit, and canonical Reddit link. To continue, pass a feed’s next_cursor back for the same account. Disable the other feed so it is not fetched again:
The dashboard provides Load more buttons for both feeds. A null cursor means the source supplied no continuation. We retain whole pages so following a cursor does not skip items hidden by a result limit. History lookups fail independently: the profile and any successful feed remain available. A failed feed has an error, an empty items list, and its requested cursor for retry. This is different from a successful empty history. Each request reads the profile again and bills actual provider receipts, including paid history failures. No model call is needed. LinkedIn-specific contact, platform, and video options do not trigger extra lookups for Reddit.

Authorizations

Authorization
string
header
required

An API key from the dashboard's API Keys page (sign in or sign up there with a constants.io account), sent as Authorization: Bearer <key>. Keys start with cps_.

Body

application/json
linkedin_url
string
required

The person's LinkedIn profile address, such as https://www.linkedin.com/in/jane-doe. Country subdomains and addresses without https:// work too.

Maximum string length: 500
platforms
enum<string>[]

Platforms to search. youtube returns videos in videos rather than accounts. Empty returns only the profile. Facebook looks up the name, reads public profiles and returns only confident matches; failed comparisons return no Facebook matches.

What Enrich person can search: the account platforms, plus youtube for videos.

Available options:
x,
instagram,
tiktok,
facebook,
youtube
contact
boolean
default:false

Look up the person's emails and phone numbers on Crustdata, alongside the platforms. Costs Crustdata credits: about 1, plus 1 for work emails and 2 each for personal emails and phone numbers found.

linkedin_posts
integer
default:10

Up to how many of the person's most recent LinkedIn posts, reposts and quotes to return in person.posts, newest first. One read usually returns up to 100 and costs the same however many; asking for more than 50 sometimes takes a second read. A person with fewer posts returns fewer. 0 skips them.

Required range: 0 <= x <= 100
max_results
object

Results per platform. Leave a platform out for its default. Instagram's search takes no count.

enrich_accounts
boolean
default:true

Enrich each matched account (its profile, recent posts and who it follows) into its enrichment. Billed with this call. Nothing is enriched on a platform where ranking didn't run.

account_posts
integer
default:20

Recent posts per enriched account. Private accounts return none. Facebook reads up to 5 provider pages; fewer posts may be available.

Required range: 0 <= x <= 100
account_following
integer
default:200

How many accounts each enriched account follows to return. Instagram's come with only their name, picture and badges. 0 skips it. Facebook following lists are not fetched.

Required range: 0 <= x <= 500
transcribe_videos
boolean
default:true

Add the transcript of up to 8 matched videos as plain text, the captions' whole text. Billed with this call. Nothing is transcribed when ranking didn't run.

profile_url
string

A Reddit or LinkedIn user profile URL. Send exactly one of profile_url or linkedin_url.

Maximum string length: 500
reddit_posts
boolean
default:true

For Reddit profiles, include one whole page of recent posts. False skips it.

reddit_comments
boolean
default:true

For Reddit profiles, include one whole page of recent comment previews. False skips it.

reddit_posts_cursor
string

reddit.posts.next_cursor from the previous response for this account. Keep reddit_posts enabled.

Maximum string length: 8000
reddit_comments_cursor
string

reddit.comments.next_cursor from the previous response for this account. Keep reddit_comments enabled.

Maximum string length: 8000

Response

The person's profile, each platform's matched accounts and, with youtube, matched videos, with the matched ones enriched and transcribed.

person
object

The public LinkedIn profile collected from AnyAPI.

accounts
object

Keyed by platform, best first.

videos
object[]

With youtube in platforms: the videos the person speaks in, from searching the name and, when the profile has a current employer, the name with that employer. Only matches; best first.

usage
object

What the call cost.

ms
integer
reddit
object