@cortova/sdk
v0.1.0
Published
Official Node.js / TypeScript SDK for the Cortova CRM API.
Readme
@cortova/sdk
Official Node.js / TypeScript SDK for the Cortova CRM API.
npm install @cortova/sdkQuickstart
import { Cortova } from '@cortova/sdk';
const ctv = new Cortova({ apiKey: process.env.CORTOVA_KEY! });
// Single page
const page = await ctv.companies.list({ limit: 25 });
console.log(page.items, page.nextCursor);
// Auto-paginated iterator — handles cursors for you
for await (const lead of ctv.leads.iter()) {
console.log(lead.companyName);
}
// Create a record
const { id } = await ctv.companies.create({ name: 'Acme Corp', industry: 'SaaS' });Auth
Get an API key at https://app.cortova.ai/Admin/ApiKeys. Pick the minimum scopes for what you're doing — the in-app AI scope recommender can pick for you. Cortova API keys are prefixed ctv_.
What's covered
| Resource | Methods |
|---|---|
| companies | list, get, create, iter, contacts.list, contacts.iter |
| leads | list, get, create, iter |
| opportunities | list, get, iter (filter: status: 'open' \| 'won' \| 'lost' \| 'all') |
| activities | list, iter |
| tasks | list, get, iter |
| pipelines | list, get, iter |
Each iter() is an async generator that paginates with cursors automatically — no manual after/limit bookkeeping.
Errors
Any non-2xx response throws a CortovaError:
import { Cortova, CortovaError } from '@cortova/sdk';
try {
await ctv.companies.get('not-a-real-id');
} catch (e) {
if (e instanceof CortovaError) {
console.error(e.status, e.body); // e.g. 404, { error: 'Company not found.' }
}
}License
Apache-2.0.
