Skip to content

Folders and files

NameName
Last commit message
Last commit date

Latest commit

 

History

3 Commits
 
 
 
 
 
 
 
 
 
 

Repository files navigation

@therapreneur/signal-sdk

Official JavaScript/TypeScript SDK for Signal by TheraPreneur — AI Clinical Intelligence & Practice Management API.

Installation

npm install @therapreneur/signal-sdk

Quick Start

import { 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',
});

Configuration

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)
});

Resources

Clients

// 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');

Appointments

// 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');

Sessions

// 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');

Claims

// 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',
});

Insurance

// Check client eligibility
const eligibility = await signal.insurance.checkEligibility('client-123');

Practitioners

// 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');

Webhooks

// 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');

Error Handling

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;
    }
  }
}

TypeScript Types

The SDK exports all relevant interfaces:

import type {
  SignalConfig,
  Client,
  CreateClientParams,
  Appointment,
  CreateAppointmentParams,
  WebhookConfig,
} from '@therapreneur/signal-sdk';

Webhook Verification

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));
}

Documentation

Full API documentation is available at https://signal.therapreneur.app/api/docs.

License

MIT

About

Official JavaScript/TypeScript SDK for SignalEHR — AI clinical intelligence + practice management for therapists. Real-time emotion analysis, AI clinical notes, Amelia AI receptionist, US + Canadian insurance billing.

Topics

Resources

Stars

Watchers

Forks

Releases

Packages

Contributors

Languages