# Profiles (/docs/api/profiles)



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](/docs/extension); we
never hit a fake account on your behalf.

<EndpointList topic="profiles" />

## Get profile by URL or slug [#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`.

<EndpointDemo id="profiles-get" />

`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 [#recent-posts-by-profile]

<EndpointDemo id="profiles-posts" />

Returns the most recent activity authored by the profile, paginated.
Pair with [`GET /v1/posts/:id`](/docs/api/posts) 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) [#ingest-profile-extension-write-path]

<EndpointDemo id="profiles-ingest" />

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 [#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](/docs/compliance)) return
  `410 gone` permanently — including via the extension capture path.
