Profiles

Resolve a public LinkedIn profile URL or vanity slug to a typed person record.

The Profiles surface returns a typed Profile record — name, headline, location, current and past roles, education, skills, certifications. Every profile is captured through the end user's own LinkedIn session via the LinkFetch Chrome extension; we never hit a fake account on your behalf.

Get profile by URL or slug

The cache-first read. Returns the full structured profile. On a cache miss the API returns 422 extension_required and the extension captures the row from the user's signed-in tab; the next call hits the cache and returns 200.

GET/v1/profiles5 credits
Get Profile
Full profile for a LinkedIn member by slug or URL.

Reads our cache. If the row isn't cached, returns 422 with a hint to run the LinkFetch Chrome extension on a signed-in tab — the extension will post the capture to /v1/profiles/ingest.

parameters
This endpoint resolves through the Chrome extension when the row isn't cached. Open it in the full playground to capture via extension.

url and slug are interchangeable — supply whichever you have on hand. Pass a full https://www.linkedin.com/in/<slug>/ URL or the bare slug. The response includes the profile's entityUrn tail; keep it if you plan to call profile-posts or post-reactions later.

Recent posts by profile

GET/v1/profiles/{slug}/posts3 credits
Get Profile Posts
Recent posts from a profile (migration pending).

Stub — returns 501. Will wrap the voyager `Profile — Posts` path with normalization + pagination once the extension has a capture flow.

parameters
This endpoint resolves through the Chrome extension when the row isn't cached. Open it in the full playground to capture via extension.

Returns the most recent activity authored by the profile, paginated. Pair with GET /v1/posts/:id to enrich each entry with reaction counts and full body. Useful for warm-intro context and "who has been talking about X" digests.

Ingest profile (extension write-path)

POST/v1/profiles/ingest5 credits
Ingest Profile
Extension-side write path. Reference only — not runnable from here.

Called by the LinkFetch Chrome extension after it captures a profile from a signed-in LinkedIn tab. Upserts the row and debits credits atomically. GDPR-suppressed slugs return 410.

parameters
urlstring<url> · in body · required

Canonical linkedin.com/in/<slug> URL.

profileobject<Profile> · in body · required

Normalised payload — see packages/shared/src/profile.ts.

fetched_atstring<ISO-8601> · in body · optional

When the extension captured the page. Defaults to now.

This endpoint isn’t directly callable — it’s invoked by the LinkFetch extension or another LinkFetch service. The shape above is documented so you can build matching integrations.

open in full playground →

This route exists for the LinkFetch extension. It POSTs a freshly captured profile from the user's signed-in tab and the API normalises, caches, and debits credits atomically. You do not call this yourself — it's documented so you can build matching integrations or replicate the contract from a server-to-server pipeline if you have one of our enterprise plans.

Notes

  • 5 credits per call regardless of profile size.
  • Profiles cache for 30 days; pass ?fresh=true to force a re-capture.
  • Suppressed profiles (under DSR) return 410 gone permanently — including via the extension capture path.