LinkedIn API
Sign in

API documentation

Authenticate every request with your API key in the X-API-Key header.

Authentication

X-API-Key: lnk_live_your_key

Data API

GET /api/v1/person

Returns a normalized person profile. Cost: 2 credits (1 if served from cache).

curl "$BASE_URL/api/v1/person?url=https://www.linkedin.com/in/example" \
  -H "X-API-Key: $API_KEY"

GET /api/v1/company

Returns a normalized company profile. Cost: 2 credits (1 if served from cache).

curl "$BASE_URL/api/v1/company?url=https://www.linkedin.com/company/example" \
  -H "X-API-Key: $API_KEY"

GET /api/v1/search

Search people or companies with keyword or structured filters. Returns results and pagination. Cost: 3 credits (1 if served from cache).

Optional query params: title, exclude_title, company, industry, country, region, city, first_name, last_name, open_to_work, min_followers, max_followers, min_company_size, max_company_size, page, limit (max 100). Use query for headline keywords. At least one of query or a filter is required.

curl "$BASE_URL/api/v1/search?title=VP%20Marketing&country=United%20States&type=person&limit=25&page=1" \
  -H "X-API-Key: $API_KEY"

GET /api/v1/employees

List people currently at a company from its LinkedIn URL. Supports page and limit. Cost: 3 credits (1 if served from cache).

curl "$BASE_URL/api/v1/employees?url=https://www.linkedin.com/company/example&limit=25&page=1" \
  -H "X-API-Key: $API_KEY"

GET /api/v1/person-by-email

Find a person profile from a work email. Cost: 4 credits. May return 202 with a lookup_id if the result is not ready yet.

curl "$BASE_URL/api/v1/person-by-email?email=jane@example.com" \
  -H "X-API-Key: $API_KEY"

GET /api/v1/email-finder

Find verified emails from a LinkedIn profile URL. Cost: 6 credits. May return 202 with a lookup_id if the result is not ready yet.

curl "$BASE_URL/api/v1/email-finder?url=https://www.linkedin.com/in/example" \
  -H "X-API-Key: $API_KEY"

GET /api/v1/posts

Returns recent posts for a person or company profile URL. Cost: 3 credits (1 if served from cache).

curl "$BASE_URL/api/v1/posts?url=https://www.linkedin.com/in/example" \
  -H "X-API-Key: $API_KEY"

GET /api/v1/post-reactions

Returns people who reacted to a post. Pass a post URL or activity_id. Cost: 4 credits (1 if served from cache).

curl "$BASE_URL/api/v1/post-reactions?url=https://www.linkedin.com/feed/update/urn:li:activity:123" \
  -H "X-API-Key: $API_KEY"

GET /api/v1/post-comments

Returns comments on a post with author details. Pass a post URL or activity_id. Cost: 4 credits (1 if served from cache).

curl "$BASE_URL/api/v1/post-comments?activity_id=123&page=1" \
  -H "X-API-Key: $API_KEY"

GET /api/v1/jobs

Search open job listings by keyword, location, or company. Cost: 3 credits (1 if served from cache).

curl "$BASE_URL/api/v1/jobs?keyword=software%20engineer&location=San%20Francisco" \
  -H "X-API-Key: $API_KEY"

GET /api/v1/jobs/{id}

Returns details for a single job listing. Cost: 2 credits (1 if served from cache).

curl "$BASE_URL/api/v1/jobs/1234567890" \
  -H "X-API-Key: $API_KEY"

Monitors

Watch a profile or company and receive a signed webhook when key fields or job history changes. Each daily check costs 1 credit. Create monitors via POST /api/v1/monitors.

POST /api/v1/monitors

Create a monitor with type (person or company), target_url, and webhook_url. Returns a webhook_secret for verifying deliveries.

curl -X POST "$BASE_URL/api/v1/monitors" \
  -H "X-API-Key: $API_KEY" \
  -H "Content-Type: application/json" \
  -d '{"type":"person","target_url":"https://www.linkedin.com/in/example","webhook_url":"https://example.com/hook"}'

GET /api/v1/monitors

List your monitors. Free to call.

curl "$BASE_URL/api/v1/monitors" \
  -H "X-API-Key: $API_KEY"

DELETE /api/v1/monitors/{id}

Delete a monitor. Free to call.

curl -X DELETE "$BASE_URL/api/v1/monitors/$MONITOR_ID" \
  -H "X-API-Key: $API_KEY"

Monitor webhooks

Webhook payloads use event profile.changed and include changes (scalar field diffs) plus job_changes for person monitors: job.started, job.ended, and job.title_changed.

{
  "event": "profile.changed",
  "monitor_id": "...",
  "type": "person",
  "target_url": "https://www.linkedin.com/in/example",
  "changes": [{ "field": "current_title", "previous": "VP Sales", "current": "Head of Sales" }],
  "job_changes": [{ "type": "job.title_changed", "company": "Acme", "title": "Head of Sales", "previous_title": "VP Sales" }],
  "checked_at": "2026-07-16T08:00:00.000Z"
}

GET /api/v1/lookups/{id}

Check the status of a deferred lookup. Free to call. Credits are charged only when a successful result is delivered.

curl "$BASE_URL/api/v1/lookups/$LOOKUP_ID" \
  -H "X-API-Key: $API_KEY"

LinkedIn outreach

Connect LinkedIn accounts, queue invites and messages, sync inbox threads, and receive webhooks. Outreach is seat-based — each connected account counts toward your plan limit.

POST /api/v1/outreach/accounts

Start account connection. Returns a hosted auth URL. On success, your account appears in GET /api/v1/outreach/accounts.

curl -X POST "$BASE_URL/api/v1/outreach/accounts" \
  -H "X-API-Key: $API_KEY"

GET /api/v1/outreach/accounts

List connected LinkedIn accounts with status and today's usage.

curl "$BASE_URL/api/v1/outreach/accounts" \
  -H "X-API-Key: $API_KEY"

POST /api/v1/outreach/actions/invite

Queue a connection request. Returns 202 with action_id. Requires account_id and profile_url or provider_id.

curl -X POST "$BASE_URL/api/v1/outreach/actions/invite" \
  -H "X-API-Key: $API_KEY" \
  -H "Content-Type: application/json" \
  -d '{"account_id":"$ACCOUNT_ID","profile_url":"https://www.linkedin.com/in/example","message":"Hi"}'

POST /api/v1/outreach/actions/message

Queue a direct message. Returns 202 with action_id. Requires account_id, text, and chat_id or profile_url.

curl -X POST "$BASE_URL/api/v1/outreach/actions/message" \
  -H "X-API-Key: $API_KEY" \
  -H "Content-Type: application/json" \
  -d '{"account_id":"$ACCOUNT_ID","profile_url":"https://www.linkedin.com/in/example","text":"Hello"}'

GET /api/v1/outreach/actions/{id}

Check action status (queued, processing, completed, failed).

curl "$BASE_URL/api/v1/outreach/actions/$ACTION_ID" \
  -H "X-API-Key: $API_KEY"

GET /api/v1/outreach/chats

List synced inbox threads for an account. Pass account_id. Add sync=true to pull from LinkedIn first.

curl "$BASE_URL/api/v1/outreach/chats?account_id=$ACCOUNT_ID&sync=true" \
  -H "X-API-Key: $API_KEY"

GET /api/v1/outreach/chats/{id}/messages

List messages in a thread. Add sync=true to refresh from LinkedIn.

curl "$BASE_URL/api/v1/outreach/chats/$CHAT_ID/messages?sync=true" \
  -H "X-API-Key: $API_KEY"

Outreach webhooks

Register a URL with POST /api/v1/outreach/webhooks. Events: account.connected, account.status_changed, invite.accepted, message.received, action.completed. Verify with X-Webhook-Signature.

curl -X POST "$BASE_URL/api/v1/outreach/webhooks" \
  -H "X-API-Key: $API_KEY" \
  -H "Content-Type: application/json" \
  -d '{"url":"https://example.com/webhooks/outreach"}'

POST /api/v1/outreach/actions/react

Queue a reaction on a post. Requires account_id and post_id (LinkedIn social_id).

curl -X POST "$BASE_URL/api/v1/outreach/actions/react" \
  -H "X-API-Key: $API_KEY" \
  -H "Content-Type: application/json" \
  -d '{"account_id":"$ACCOUNT_ID","post_id":"urn:li:activity:123","reaction":"LIKE"}'

POST /api/v1/outreach/actions/follow

Queue a follow action. Requires account_id and profile_url or provider_id.

curl -X POST "$BASE_URL/api/v1/outreach/actions/follow" \
  -H "X-API-Key: $API_KEY" \
  -H "Content-Type: application/json" \
  -d '{"account_id":"$ACCOUNT_ID","profile_url":"https://www.linkedin.com/in/example"}'

POST /api/v1/outreach/actions/withdraw

Queue withdrawal of a pending invitation. Requires account_id and request_id.

curl -X POST "$BASE_URL/api/v1/outreach/actions/withdraw" \
  -H "X-API-Key: $API_KEY" \
  -H "Content-Type: application/json" \
  -d '{"account_id":"$ACCOUNT_ID","request_id":"$REQUEST_ID"}'

POST /api/v1/outreach/actions/post

Queue a LinkedIn post from a connected account. Requires account_id and text (max 3000 characters).

curl -X POST "$BASE_URL/api/v1/outreach/actions/post" \
  -H "X-API-Key: $API_KEY" \
  -H "Content-Type: application/json" \
  -d '{"account_id":"$ACCOUNT_ID","text":"Excited to share our latest update."}'

POST /api/v1/outreach/actions/comment

Queue a comment on a post. Requires account_id, post_id (LinkedIn social_id), and text.

curl -X POST "$BASE_URL/api/v1/outreach/actions/comment" \
  -H "X-API-Key: $API_KEY" \
  -H "Content-Type: application/json" \
  -d '{"account_id":"$ACCOUNT_ID","post_id":"urn:li:activity:123","text":"Great insight."}'

GET /api/v1/outreach/relations

List first-degree connections for a connected account. Pass account_id. Optional cursor for pagination.

curl "$BASE_URL/api/v1/outreach/relations?account_id=$ACCOUNT_ID" \
  -H "X-API-Key: $API_KEY"

Daily action limits

Per connected account: 20 invites, 50 messages, 3 posts, 25 comments, 80 other actions. Limits scale during the first 7 days after connecting.

Sequences

Create multi-step outreach flows that enqueue invites, waits, and follow-up messages.

POST /api/v1/outreach/sequences

Create a sequence with name, account_id, and steps array (invite, wait, message, react, follow, withdraw).

curl -X POST "$BASE_URL/api/v1/outreach/sequences" \
  -H "X-API-Key: $API_KEY" \
  -H "Content-Type: application/json" \
  -d '{"name":"Connect and follow up","account_id":"$ACCOUNT_ID","steps":[{"type":"invite","message":"Hi"},{"type":"wait","days":3},{"type":"message","text":"Thanks for connecting!"}]}'

POST /api/v1/outreach/sequences/{id}/enroll

Enroll profile URLs into a sequence. Each enrollment advances automatically when steps complete or when invite.accepted / message.received events arrive.

curl -X POST "$BASE_URL/api/v1/outreach/sequences/$SEQUENCE_ID/enroll" \
  -H "X-API-Key: $API_KEY" \
  -H "Content-Type: application/json" \
  -d '{"profile_urls":["https://www.linkedin.com/in/example"]}'

Plans and limits

Seat limits

Free: 1, Hobby: 1, Pro: 3, Business: 10 connected accounts.

Deferred results

Email lookups can take a few seconds. If the result is not ready immediately, you receive HTTP 202 with a lookup_id. Poll GET /api/v1/lookups/{id} until status is completed.

Rate limits

Rate limits depend on your plan: 30, 60, or 120 requests per minute per API key.

Errors

  • 401 missing or invalid API key
  • 402 insufficient credits
  • 429 rate limit exceeded
  • 202 lookup still pending — poll GET /api/v1/lookups/{id}
  • 502 upstream provider failure (no credits charged)

Data requests

Submit deletion or opt-out requests to POST /api/compliance?action=deletion or POST /api/compliance?action=opt-out.