Official JavaScript/TypeScript SDK for Signal by TheraPreneur — AI Clinical Intelligence & Practice Management API.
npm install @therapreneur/signal-sdkimport { Signal } from '@therapreneur/signal-sdk';
const signal = new Signal({ apiKey: 'sk_live_xxx' });
// List active clients
const { data: clients } = await signal.clients.list({ status: 'active' });
console.log(`Found ${clients.length} active clients`);
// Create an appointment
const appointment = await signal.appointments.create({
clientId: 'client-123',
scheduledAt: '2026-04-01T10:00:00Z',
duration: 50,
type: 'individual',
});const signal = new Signal({
apiKey: 'sk_live_xxx', // Required — your API key
baseUrl: 'https://...', // Optional — override API base URL
timeout: 30000, // Optional — request timeout in ms (default: 30000)
});// List clients with optional filters
const result = await signal.clients.list({ status: 'active', search: 'Jane', limit: 20 });
// Get a single client
const client = await signal.clients.get('client-123');
// Create a client
const newClient = await signal.clients.create({
name: 'Jane Doe',
email: 'jane@example.com',
phone: '555-0100',
dateOfBirth: '1990-05-15',
diagnosis: ['F41.1'],
insurance: { payer: 'Aetna', memberId: 'AET123456' },
});
// Update a client
await signal.clients.update('client-123', { phone: '555-0200' });
// Delete a client
await signal.clients.delete('client-123');// List appointments in a date range
const appts = await signal.appointments.list({
startDate: '2026-04-01',
endDate: '2026-04-07',
status: 'scheduled',
});
// Get a single appointment
const appt = await signal.appointments.get('appt-456');
// Create an appointment
const newAppt = await signal.appointments.create({
clientId: 'client-123',
scheduledAt: '2026-04-01T10:00:00Z',
duration: 50,
type: 'individual',
format: 'telehealth',
practitionerId: 'pract-789',
notes: 'Follow-up session',
});
// Update an appointment
await signal.appointments.update('appt-456', { notes: 'Rescheduled' });
// Cancel an appointment
await signal.appointments.cancel('appt-456', 'Client requested reschedule');// List sessions for a client
const sessions = await signal.sessions.list({ clientId: 'client-123' });
// Get session details
const session = await signal.sessions.get('session-789');
// Get the clinical note for a session
const note = await signal.sessions.getNote('session-789');// List claims
const claims = await signal.claims.list({ status: 'pending', clientId: 'client-123' });
// Get claim details
const claim = await signal.claims.get('claim-001');
// Create a claim
const newClaim = await signal.claims.create({
client_id: 'client-123',
session_id: 'session-789',
diagnosis_codes: ['F41.1'],
cpt_code: '90837',
});// Check client eligibility
const eligibility = await signal.insurance.checkEligibility('client-123');// List all practitioners
const practitioners = await signal.practitioners.list();
// Get practitioner details
const practitioner = await signal.practitioners.get('pract-789');
// Get availability for a specific date
const availability = await signal.practitioners.getAvailability('pract-789', '2026-04-01');// List webhooks
const webhooks = await signal.webhooks.list();
// Create a webhook
const webhook = await signal.webhooks.create({
url: 'https://your-app.com/webhooks/signal',
events: ['appointment.created', 'appointment.cancelled', 'session.completed'],
secret: 'whsec_your_secret',
});
// List available webhook events
const events = await signal.webhooks.listEvents();
// Delete a webhook
await signal.webhooks.delete('wh-001');import { Signal, SignalAPIError } from '@therapreneur/signal-sdk';
const signal = new Signal({ apiKey: 'sk_live_xxx' });
try {
const client = await signal.clients.get('nonexistent');
} catch (err) {
if (err instanceof SignalAPIError) {
console.error(`API Error ${err.status}: ${err.message}`);
console.error('Response body:', err.body);
switch (err.status) {
case 401: console.error('Invalid API key'); break;
case 403: console.error('Insufficient permissions'); break;
case 404: console.error('Resource not found'); break;
case 429: console.error('Rate limited — slow down'); break;
}
}
}The SDK exports all relevant interfaces:
import type {
SignalConfig,
Client,
CreateClientParams,
Appointment,
CreateAppointmentParams,
WebhookConfig,
} from '@therapreneur/signal-sdk';When receiving webhook events, verify the signature using the secret you provided:
import crypto from 'crypto';
function verifyWebhook(payload: string, signature: string, secret: string): boolean {
const expected = crypto.createHmac('sha256', secret).update(payload).digest('hex');
return crypto.timingSafeEqual(Buffer.from(signature), Buffer.from(expected));
}Full API documentation is available at https://signal.therapreneur.app/api/docs.
MIT