Agent-readable docs index: /docs/llms.txt. Full docs in one file: /docs/llms-full.txt. Download /docs/docs.zip to grep all markdown files locally.

Quickstart

Make your first call with Ruut Voice in under five minutes. You'll need a carrier account with an available phone number and API credentials.

1. Get your credentials

Log in to the dashboard, open the Account Settings page for your carrier, and copy the Account SID and Auth Token. These authenticate every API request.
Treat your Auth Token like a password. Never commit it to source control or expose it in client-side code. Use the server SDK or scoped API keys for production.

2. Install the SDK

Ruut Voice ships a typed TypeScript SDK with a server client and a browser softphone. Or use plain curl — the REST API is standard.
npm install @ruut/voice-sdk
import { RuutVoice } from "@ruut/voice-sdk"; const client = new RuutVoice({ accountSid: process.env.RUUT_ACCOUNT_SID, authToken: process.env.RUUT_AUTH_TOKEN, baseUrl: "https://voice.ruut.chat", });

3. Make your first call

Create an outbound call with inline TwiML. The call answers and reads a greeting:
import { VoiceResponse } from "@ruut/voice-sdk"; const twiml = new VoiceResponse() .say("Hello from Ruut Voice!") .toXml(); const call = await client.calls.create({ to: "+2348000000001", from: "+2348000000002", twiml, statusCallback: "https://app.example.com/calls/status", }); console.log(call.sid, call.status); // CA… queued
The same request with curl:
curl -X POST "https://voice.ruut.chat/2010-04-01/Accounts/$RUUT_ACCOUNT_SID/Calls" \ -u "$RUUT_ACCOUNT_SID:$RUUT_AUTH_TOKEN" \ --data-urlencode "To=+2348000000001" \ --data-urlencode "From=+2348000000002" \ --data-urlencode "Twiml=<Response><Say>Hello from Ruut Voice!</Say></Response>"

4. Receive an inbound call

Buy a number in the dashboard and set its Voice URL to an endpoint on your server that returns TwiML. When someone calls the number, Ruut Voice fetches that URL and executes the returned TwiML:
<Response> <Say voice="alice">Thanks for calling Ruut Voice!</Say> </Response>
Build the same response with the SDK:
import { VoiceResponse } from "@ruut/voice-sdk"; const response = new VoiceResponse() .say("Thanks for calling Ruut Voice!", { voice: "alice" }) .toXml();

5. Receive status callbacks

Set a statusCallback URL to receive call state changes. The current call-status delivery job does not add an X-Twilio-Signature header or retry failed requests. Restrict access to the callback endpoint and confirm important state through the authenticated Calls API. See call status webhooks.

Next steps