120+ LinkedIn actions.
One typed client.
@curviate/sdk is the open-source TypeScript client for Curviate. Every LinkedIn action on the platform is a typed method: request bodies, responses and error codes all carry their own types, pagination is an async iterable, and webhook signatures verify in one call.
import { Curviate } from "@curviate/sdk"; const curviate = new Curviate({ apiKey: process.env.CURVIATE_API_KEY! }); // List the LinkedIn accounts connected to your workspace const page = await curviate.accounts.list(); for (const account of page.items ?? []) { console.log(account.account_id); }
How do I install the SDK?
Install from npm, construct the client with your API key, and make a call. The SDK ships its own TypeScript types; there is no separate types package.
$ npm install @curviate/sdk
Works with pnpm, yarn and bun too.
Your API key comes from the Curviate dashboard topbar after sign-up; run the hero snippet above for your first call. Full setup, including connecting a LinkedIn account: authentication and accounts in the docs.
No account yet? Sign up in about a minute and your free trial key is waiting in the dashboard.
How do I work with several LinkedIn accounts?
Bind an account once with curviate.account(id) and every resource on the returned scope acts as that account. One client, one API key, any number of connected accounts; this is how an agency runs each client's outreach from its own LinkedIn identity, cleanly separated.
const alice = curviate.account("acc_ALICE_ACCOUNT_ID"); const bob = curviate.account("acc_BOB_ACCOUNT_ID"); // Same code path, different LinkedIn identities const aliceChats = await alice.messaging.listChats(); const bobChats = await bob.messaging.listChats();
Root-scoped resources need no account: curviate.accounts.* manages the accounts themselves and curviate.webhooks.* manages tenant-wide webhooks.
What can you do with it?
All 120+ LinkedIn actions on the platform are typed methods, grouped into resource namespaces that read the way you think; the premium surfaces are first-class, with 30+ actions dedicated to Sales Navigator and Recruiter alone.
The full inventory, one row per action: the LinkedIn actions catalogue.
What does the SDK handle for you?
| Concern | What the SDK does |
|---|---|
| Types | Request bodies, query params and responses fully typed from the OpenAPI document; no @types/ package |
| Pagination | curviate.paginate() wraps any cursor method as an async iterable that fetches pages on demand |
| Errors | CurviateError carries a stable code you can branch on exhaustively |
| Rate limits | rate-limit errors carry retry_after_ms and a structured retry hint your program backs off on |
| Webhooks | Signature verification for HMAC-signed events in one call |
for await (const account of curviate.paginate(curviate.accounts.list, {})) { console.log(account.account_id); }
Where the SDK fits
| @curviate/sdk | Raw HTTP against Curviate | |
|---|---|---|
| Getting access | npm install + per-seat Curviate account | Same Curviate account |
| Types | Full TypeScript, generated from OpenAPI | Bring your own from the OpenAPI document |
| Sales Navigator and Recruiter | Available: 30+ dedicated actions | Same surface, untyped |
| Pagination and errors | Async iterables, stable error codes | Hand-rolled |
| Editor experience | Autocomplete, inline docs, compile-time safety | None; mistakes surface at runtime |
The SDK talks to the REST API underneath; the same surface drives the CLI built on this SDK and the MCP server.
Questions, answered
Yes. @curviate/sdk is an open-source, typed TypeScript client covering 120+ LinkedIn actions across Classic, Sales Navigator and Recruiter, published on npm and developed on GitHub at github.com/curviate/curviate-sdk. It talks to Curviate's REST API with one API key.
No. The SDK works over your Curviate workspace: sign up, connect a LinkedIn account you own, copy the API key. There is no LinkedIn partner application, no OAuth app review, and no enterprise contract in the path.
Rate-limited calls fail with a typed CurviateError carrying a stable code, retry_after_ms and a structured retry hint. Your code (or your agent) branches on those fields and backs off precisely, instead of parsing error strings or guessing.
Yes. It is a standard npm package; plain Node.js works. You lose the compile-time types but keep everything else: pagination, stable error codes and webhook verification.