Skip to main content

TypeScript SDK

Installation

npm install @nexspace/sdk

Quick Start

import { NexSpace } from '@nexspace/sdk';

const client = new NexSpace({
  apiKey: process.env.NEXSPACE_API_KEY!,
});

// List facilities
const facilities = await client.facilities.list();

// Search staff
const staff = await client.staff.search({
  query: 'Jane',
  specialty: 'RN',
  facilityId: 12,
});

// Get shift details
const shift = await client.shifts.get(456);

Configuration

const client = new NexSpace({
  apiKey: 'nex_live_...',
  baseUrl: 'https://api.nexspace365.com',  // default
  version: '2026-05-10',                // pin API version
  maxRetries: 3,                        // default
  timeout: 30_000,                      // 30s default
});

Resources

Facilities

const facilities = await client.facilities.list();
const facility = await client.facilities.get(12);

Staff

const results = await client.staff.search({ query: 'Smith', limit: 10 });
const member = await client.staff.get(789);

Shifts

const shifts = await client.shifts.list({ facilityId: 12, status: 'open' });
const assigned = await client.shifts.assign(456, { staffIds: [789] });

API Keys

const keys = await client.apiKeys.list();
const newKey = await client.apiKeys.create({
  name: 'CI Pipeline',
  scopes: ['shifts:read', 'staff:read'],
});

Credentials

const expiring = await client.credentials.listExpiring({ daysAhead: 30 });

Error Handling

import { NexSpaceError } from '@nexspace/sdk';

try {
  await client.shifts.assign(456, { staffIds: [789] });
} catch (err) {
  if (err instanceof NexSpaceError) {
    console.error(err.code);       // 'FORBIDDEN'
    console.error(err.suggestion); // 'Rotate your API key to include...'
    console.error(err.retryable);  // false
  }
}

Idempotency

Mutation methods automatically generate idempotency keys. Override with:
await client.shifts.assign(456, { staffIds: [789] }, {
  idempotencyKey: 'my-custom-key-123',
});