REST API

120+ LinkedIn actions.
One REST API.

Curviate is a documented, API-first HTTPS interface for LinkedIn: Classic plus 30+ dedicated Sales Navigator and Recruiter actions, all behind one Bearer token. A headless, agent-native app: OpenAPI 3.1 described, structured errors on every call, webhooks for what happens in between. Per-seat pricing, no partner program, no procurement.

120+ LinkedIn actions30+ Sales Nav + Recruiter20+ webhook event typesEU data residency
Intent-named operations
POST search peopleGET retrieve profilePOST send messagePOST send InMailGET list chats
POST send connection requestPOST accept inviteDELETE withdraw inviteGET list notifications
POST create postPOST comment on postPOST react to postGET list company followers
POST save lead · Sales NavigatorPOST save candidate to pipeline · RecruiterPOST publish job posting
01QUICK START

How do I authenticate?

One API key authenticates everything. Sign up, connect a LinkedIn account in the dashboard (credentials or cookie; both encrypted at rest and never logged), and copy the key from the dashboard topbar. Send it as a Bearer token. Account-scoped calls carry the acc_... account ID in the path, so one key can act across every account you connect.

GET · a member profile, by public slug
# A member profile, by public slug (the part after linkedin.com/in/)
curl "https://api.curviate.com/v1/acc_YOUR_ACCOUNT_ID/users/a-public-slug" \
  -H "Authorization: Bearer cvt_live_YOUR_KEY"
POST · send a message into an existing chat thread
# Send a message into an existing chat thread
curl -X POST "https://api.curviate.com/v1/acc_YOUR_ACCOUNT_ID/chats/chat_YOUR_CHAT_ID/messages" \
  -H "Authorization: Bearer cvt_live_YOUR_KEY" \
  -H "Content-Type: application/json" \
  -d '{"text": "Following up on your message."}'

Full walkthrough in the docs: quickstart.

No key yet? An account is the one prerequisite for authentication: creating it takes about a minute and hands you a live key straight away.

02THE SURFACE

What can you do with it?

The API exposes 120+ LinkedIn actions as intent-named REST operations. Search people, companies, posts and jobs. Read and send messages, voice notes and InMail. Send, accept and withdraw connection requests. Publish posts, comment, react. Read profiles, company pages and notifications. Operate Sales Navigator lead lists and Recruiter hiring projects, with 30+ actions dedicated to those two premium surfaces; Recruiter alone is the deepest group in the surface at 23 actions.

recruiterHiring projects, pipelines, Recruiter search, job postings, applicants23 actions
messagingChats, messages, attachments, reactions, inboxes, InMail15 actions
companiesCompany profiles, page inbox, followers, employees, follow invites13 actions
postsPublish, retrieve, react, save; per-user post and reaction lists12 actions
sales-navigatorLead and account lists, saved searches, SN profiles and messaging12 actions
usersProfiles, connections, analytics, SSI, endorsements, InMail credits10 actions
jobsPost, edit, publish and close jobs; applicants and résumés10 actions
commentsComment, reply, react, moderate across posts9 actions
searchPeople, companies, posts, jobs, groups, services; filter resolution9 actions
invitesSend, accept, decline and withdraw connection requests6 actions
moreFollowing, groups, notifications and the home feed11 actions

This surface backs real work: lead generation and outreach in Sales Navigator, candidate sourcing and pipeline automation in Recruiter, inbox and CRM sync, content publishing and agent-driven prospecting. See the patterns on the use cases page.

Every action, on one page, honestly labelled: the LinkedIn actions catalogue. Every parameter and response shape is documented in the interactive API reference.

03MACHINE CALLERS

What makes this API agent-native?

We design for agent experience (AX) the way good products design for UX. Picture an AI operating a LinkedIn account with no human in the loop: it cannot squint at a screenshot or guess what a bare 400 meant. So every response is built to be parsed, not read. Errors carry a stable machine code plus fields that tell the caller whether retrying makes sense. Rate-limit state rides on standard RateLimit headers with every response (the quota, what remains, when it resets), and a 429 carries a machine-readable retry_hint with the exact wait in milliseconds, so the agent backs off precisely instead of hammering. Operations are intent-named, so a tool-calling model picks the right one from the name alone, without a human mapping RPC verbs to intentions.

On every callYou get
Structured errorsstable code, human message, retry guidance a program can branch on
Rate-limit feedbackstandard RateLimit headers (limit, remaining, reset) on every response; 429s add a retry_hint carrying the exact wait in milliseconds
Intent-named operationsone operation per user intention, no RPC soup
Event webhooks20+ HMAC-signed event types pushed to your endpoint, instead of polling. Every event type

And for the agents reading this page: the full surface is machine-described. The OpenAPI 3.1 document lives at a stable well-known URL, and we publish AGENTS.md and llms.txt so an agent can load the operating contract in plain text before it makes a single call. AX is not an afterthought here. It is the design brief.

04WHERE IT FITS

Where the API fits

There are two honest ways to drive LinkedIn programmatically: a documented, versioned contract, or a bot clicking through a UI that changes underneath it. This is the difference.

Curviate APIBrowser automation tools
Getting accessSign up, pay per seat, call in minutesInstall an extension
Sales Navigator and RecruiterAvailable: 30+ dedicated actionsFragile screen-driving
ContractOpenAPI 3.1, structured errors, versioned surfaceNone; DOM changes break flows
Webhooks20+ event types, HMAC-signedNone
Company & Page accounts13 actions: page inbox, followers, employees, follow invitesFragile per-page scripting

The surface is available as the typed TypeScript client, the command line, and the MCP server, all on one API key.

05FAQ

Questions, answered

Is there a LinkedIn API without the partner program?

Yes. Curviate gives you a documented REST API over a LinkedIn account you own, on per-seat pricing, with no partner application and no procurement. You sign up, connect the account, and authenticate with one Bearer token. The official LinkedIn API remains the sanctioned enterprise path; Curviate is the accessible one.

How do I authenticate against the Curviate API?

Send your tenant API key as a Bearer token on every request. The key is created at sign-up, shown in the dashboard topbar, and can be rotated or revoked at any time. Account-scoped operations take the acc_... account ID in the path, so one key operates all your connected accounts.

Does the API cover Sales Navigator and Recruiter?

Yes. 30+ of the 120+ actions are dedicated to Sales Navigator and Recruiter: lead lists, saved searches, hiring projects, candidate pipelines, InMail and more. Recruiter is the single deepest group in the surface at 23 actions. Every seat includes both surfaces; the LinkedIn account you connect needs the matching LinkedIn subscription.

How do webhooks work?

Register an endpoint in the dashboard and choose from 20+ event types across messaging, connections and account lifecycle. Deliveries are HMAC-SHA256 signed, retried on failure, and logged with per-webhook delivery status you can inspect. Point them at your backend, an n8n flow, or a serverless function. Every webhook event type.