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
401missing or invalid API key402insufficient credits429rate limit exceeded202lookup still pending — poll GET /api/v1/lookups/{id}502upstream 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.