Users

Retrieve a user's profile

Returns a LinkedIn user's profile. Use user_id="me" for the caller's own account, or another LinkedIn user's identifier for read-only access. Request extra sections via linkedin_sections.

get/v1/{account_id}/users/{user_id}

Request

  • Base URL: https://api.curviate.com
  • URL: https://api.curviate.com/v1/{account_id}/users/{user_id}
  • Auth: HTTP bearer

Path parameters

account_idstring required

The account ID (acc_...) to use for the request.

user_idstring required

"me" for the caller, or a public identifier, member ID, or profile URL. endorsement_id appears only for connections eligible to endorse.

Query parameters

linkedin_sectionsstring[]

Profile sections to fetch, repeatable: linkedin_experience, linkedin_skills, and others (each has a _preview variant). Omit for base fields only.

mode'live' | 'auto' | 'refill' | 'cache_only'

How willing this read is to reach LinkedIn: auto (default), live, refill, or cache_only. Details: /reference/getting-started/cache.

max_ageinteger

Maximum age in seconds of a stored copy this read accepts; overrides mode in both directions. Not with cache_only. Details: /reference/getting-started/cache.

Response

The requested user's profile (classic variant). Section arrays are present only when requested via linkedin_sections.

object'user_profile' required

Response type discriminator.

idstring required

The profile's opaque identifier.

type'individual' | 'organization' | 'other' required

Profile type.

display_namestring required

The member's display name.

first_namestring

First name.

last_namestring

Last name.

public_identifierstring

LinkedIn public URL slug (e.g. 'jane-doe').

profile_urlstring

Full LinkedIn profile URL.

public_picture_urlstring

Profile picture URL.

public_picture_url_largestring

Large profile picture URL.

private_picture_download_urlstring

A private, time-limited picture download URL (present only in some responses).

background_picture_urlstring

Cover/background photo URL.

descriptionstring

Mirrors the profile headline (the short line shown under the member's name). NOT the About/Summary section; see bio for that.

biostring

The profile's About/Summary section (free text). Distinct from description, which mirrors the headline, not this field.

locationstring

Geographic location string.

created_atstring

ISO-8601 timestamp for when this profile record was created on the platform.

emailsstring[]

Email addresses associated with the profile.

phone_numbersstring[]

Phone numbers associated with the profile.

social_handlesobject

Self-declared social handles keyed by platform (e.g. 'github'), each an object naming the handle. Same sensitivity class as emails/phone_numbers (self-declared contact-class info).

websitesstring[]

Personal/professional website URLs associated with the profile.

is_blockedboolean

Whether the authenticated account has blocked this member.

is_followingboolean

Whether the authenticated account follows this member.

is_verifiedboolean

Whether LinkedIn has verified this member.

is_premiumboolean

Same value as specifics.is_premium; prefer the nested field.

languagestring

The member's profile language. Distinct from specifics.default_locale/specifics.supported_locales.

followers_countnumber

Total follower count.

relations_countnumber

Total 1st-degree connection count.

observed_atstring required

ISO-8601 timestamp for when this data was observed on LinkedIn. On a live fetch this is the time of the fetch; on a stored answer it is when the data was actually seen, not when you asked for it.

source'store' | 'live' required

Whether this answer came from Curviate's stored copy or from a fresh LinkedIn fetch. A stored answer costs the connected account nothing and is never surfaced to the person being read. It also carries less: fields Curviate does not retain (message bodies, notes, attachments, third-party contact details) are only ever present on a live fetch. Pass mode=live when you need them.

withdrawnboolean required

Whether LinkedIn has told us this resource no longer exists, such as a removed profile. When true, the answer above is the copy Curviate still holds and must not be treated as current. Always present; false is the normal case.

withdrawn_atstring

ISO-8601 timestamp for when a fetch MOST RECENTLY found this resource gone on LinkedIn. Every later fetch that finds it gone again moves it. Present only when withdrawn is true.

Example response

{
  "safety_warning": {
    "row": "profile_views",
    "reset_at": "2026-09-05T00:00:00.000Z",
    "hint": {
      "parameter": "profile_views.ceiling",
      "message": "This account is at its ceiling for profile_views. This action went through because profile_views.posture is warn, and it counted: 101 of 100 this window. Raise profile_views.ceiling, or wait for the window to reset at 2026-09-05T00:00:00.000Z."
    },
    "reason": "ceiling",
    "blocked": false
  }
}

Changes

No recorded changes to this operation across all 1 revision of this API.