***

title: REST Client
sidebar-title: Overview
subtitle: TypeScript API reference for RestClient and resource namespaces
slug: /reference/typescript/rest
description: HTTP client for SignalWire REST API resource management.
max-toc-depth: 3
position: 0
---------------------

For a complete index of all SignalWire documentation pages, fetch https://signalwire.com/docs/llms.txt

[client]: /docs/server-sdks/reference/typescript/rest/client

[phone-numbers]: /docs/server-sdks/reference/typescript/rest/phone-numbers

[fabric]: /docs/server-sdks/reference/typescript/rest/fabric

[calling]: /docs/server-sdks/reference/typescript/rest/calling

[video]: /docs/server-sdks/reference/typescript/rest/video

[datasphere]: /docs/server-sdks/reference/typescript/rest/datasphere

[logs]: /docs/server-sdks/reference/typescript/rest/logs

[registry]: /docs/server-sdks/reference/typescript/rest/registry

[compat]: /docs/server-sdks/reference/typescript/rest/compat

[mfa]: /docs/server-sdks/reference/typescript/rest/mfa

The REST namespace provides an HTTP client for the SignalWire platform
APIs. It organizes every HTTP endpoint into namespaced resource objects with
standard CRUD operations, letting you manage phone numbers, fabric resources,
call logs, video rooms, datasphere documents, and more from TypeScript.

## Example

Search for available phone numbers, purchase one, and assign it to a fabric
AI agent resource:

```typescript {10}
import { RestClient } from "@signalwire/sdk";

const client = new RestClient({
  project: "your-project-id",
  token: "your-api-token",
  host: "your-space.signalwire.com"
});

// Search for available numbers in area code 512
const available = await client.phoneNumbers.search({ areaCode: "512", quantity: 3 });
for (const number of available.data ?? []) {
  console.log(`${number.number} - ${number.region}`);
}

// Purchase the first available number
const purchased = await client.phoneNumbers.create({ number: available.data[0].number });
console.log(`Purchased: ${purchased.number}`);

// List your AI agent resources
const response = await client.fabric.aiAgents.list();
for (const agent of response.data ?? []) {
  console.log(`Agent: ${agent.name} (${agent.id})`);
}

// Query recent voice call logs
const logs = await client.logs.voice.list({ pageSize: 5 });
for (const log of logs.data ?? []) {
  console.log(`Call from ${log.from} to ${log.to}`);
}
```

<Note>
  All three constructor arguments can also be provided via environment variables:
  `SIGNALWIRE_PROJECT_ID`, `SIGNALWIRE_API_TOKEN`, and `SIGNALWIRE_SPACE`.
  When those are set, you can instantiate with `new RestClient()` and no arguments.
</Note>

## Error Handling

REST errors throw `RestError`:

```typescript {6}
import { RestClient, RestError } from "@signalwire/sdk";

const client = new RestClient();

try {
  await client.phoneNumbers.get("nonexistent-id");
} catch (e) {
  if (e instanceof RestError) {
    console.log(`HTTP ${e.statusCode}: ${e.body}`);
    console.log(`URL: ${e.method} ${e.url}`);
  }
}
```

## Resources

<CardGroup cols={2}>
  <Card title="RestClient" href="/docs/server-sdks/reference/typescript/rest/client">
    Constructor, authentication, and all namespace properties.
  </Card>

  <Card title="Phone Numbers" href="/docs/server-sdks/reference/typescript/rest/phone-numbers">
    Search, purchase, and manage phone numbers.
  </Card>

  <Card title="Fabric" href="/docs/server-sdks/reference/typescript/rest/fabric">
    AI agents, SWML scripts, [subscribers](/docs/platform/subscribers), call flows, and tokens.
  </Card>

  <Card title="Calling" href="/docs/server-sdks/reference/typescript/rest/calling">
    REST-based call control with 37+ commands.
  </Card>

  <Card title="Video" href="/docs/server-sdks/reference/typescript/rest/video">
    Rooms, conferences, sessions, recordings, and streams.
  </Card>

  <Card title="Datasphere" href="/docs/server-sdks/reference/typescript/rest/datasphere">
    Document management and semantic search.
  </Card>

  <Card title="Logs" href="/docs/server-sdks/reference/typescript/rest/logs">
    Message, voice, fax, and conference log queries.
  </Card>

  <Card title="Registry" href="/docs/server-sdks/reference/typescript/rest/registry">
    10DLC brand and campaign registration.
  </Card>

  <Card title="Compatibility" href="/docs/server-sdks/reference/typescript/rest/compat">
    Twilio-compatible LAML API for migration.
  </Card>

  <Card title="MFA" href="/docs/server-sdks/reference/typescript/rest/mfa">
    Multi-factor authentication via SMS and voice.
  </Card>
</CardGroup>