Typed methods for every operation. Works in Node.js and any TypeScript project.
npm install nondual # or pnpm add nondual
import { Nondual } from 'nondual'; const nd = new Nondual({ apiKey: process.env.NONDUAL_API_KEY, });
If apiKey is omitted the SDK reads NONDUAL_API_KEY from the environment automatically.
Resolve an email or LinkedIn URL to a full contact profile.
const { contact } = await nd.resolve({ email: 'jane@acme.com' }); console.log(contact.name); // "Jane Smith" console.log(contact.profile.role); // "VP of Engineering" console.log(contact.company.name); // "Acme Corp" console.log(contact.identifiers.linkedin_url); console.log(contact.profile.about); // written summary console.log(contact.next.action); // recommended next step
| Input field | Required | Description |
|---|---|---|
email | one of | Email to resolve |
linkedin_url | one of | LinkedIn URL to resolve |
Get relationship context — full interaction history across all agents, open follow-ups, and recommended next step.
const { context } = await nd.context( { contact: 'jane@acme.com' }, { agent: 'research-bot' }, ); console.log(context.relationship_summary); console.log(context.recent_interactions); // [{ channel, occurred_at, summary, details }, ...]; console.log(context.open_followups); // [{ id, action, due }, ...]; console.log(context.recommended_next_action);
Record an interaction after outreach. Pass agent in options so history is attributed.
await nd.record( { contact: 'jane@acme.com', channel: 'email', direction: 'outbound', summary: 'Sent intro about partnership', }, { agent: 'sales-bot' }, );
| Field | Required | Values |
|---|---|---|
contact | yes | Email or contact ID |
channel | yes | email call linkedin slack meeting sms other |
direction | yes | inbound outbound |
summary | yes | What happened |
await nd.followup( { contact: 'jane@acme.com', action: 'Follow up in 3 days', due: '2026-07-25', }, { agent: 'sales-bot' }, );
import { Nondual, NondualError } from 'nondual'; try { const { contact } = await nd.resolve({ email }); } catch (err) { if (err instanceof NondualError) { console.error(err.status, err.message); } }