Skip to content

Quickstart

Get your first AI voice agent making a call in a few minutes.

1. Get Your API Key

Sign up at studio.rymi.live and grab your API key from the dashboard.

bash
export RYMI_API_KEY="your_api_key_here"

2. Create an Agent

Install a client library first (skip if you're using curl):

bash
npm install @rymi/node
bash
pip install rymi

Then create the agent:

bash
curl -X POST https://api.rymi.live/v1/agents \
  -H "Authorization: Bearer $RYMI_API_KEY" \
  -H "Content-Type: application/json" \
  -d '{
    "name": "Alex - Sales Agent",
    "system_prompt": "You are Alex, a friendly sales assistant for TechCorp. Your goal is to qualify inbound leads by asking about their company size and budget. Be warm, concise, and professional."
  }'
typescript
import { Rymi } from '@rymi/node';

const rymi = new Rymi(); // reads RYMI_API_KEY from the environment

const agent = await rymi.agents.create({
  name: 'Alex - Sales Agent',
  system_prompt:
    'You are Alex, a friendly sales assistant for TechCorp. ' +
    'Your goal is to qualify inbound leads by asking about their company size and budget. ' +
    'Be warm, concise, and professional.'
});
python
from rymi import Rymi

rymi = Rymi()  # reads RYMI_API_KEY from the environment

agent = rymi.agents.create(
    name="Alex - Sales Agent",
    system_prompt=(
        "You are Alex, a friendly sales assistant for TechCorp. "
        "Your goal is to qualify inbound leads by asking about their company size and budget. "
        "Be warm, concise, and professional."
    ),
)

A raw system_prompt is the fastest way to start — Rymi auto-extracts the structured persona and playbook from it. When you want finer control (openers, qualification flow, objection handling), switch to the structured config.

3. Connect Your Carrier

bash
curl -X POST https://api.rymi.live/v1/telephony/connect \
  -H "Authorization: Bearer $RYMI_API_KEY" \
  -H "Content-Type: application/json" \
  -d '{
    "provider": "twilio",
    "auth_id": "AC...",
    "auth_token": "..."
  }'

Rymi does not buy phone numbers. Provision a number in your carrier account first, then use that provider-owned number as from_number.

4. Optional: Register and Attach a BYOC Number

Register the carrier-owned number in Rymi if you want inbound routing or dashboard assignment:

bash
curl -X POST https://api.rymi.live/v1/numbers \
  -H "Authorization: Bearer $RYMI_API_KEY" \
  -H "Content-Type: application/json" \
  -d '{ "number": "+15551234567" }'
bash
curl -X POST https://api.rymi.live/v1/numbers/+15551234567/attach \
  -H "Authorization: Bearer $RYMI_API_KEY" \
  -H "Content-Type: application/json" \
  -d '{ "agent_id": "YOUR_AGENT_ID" }'

This requires the number to already be registered or synced in Rymi. For outbound-only calls, you can skip this and pass from_number directly.

5. Start an Outbound Call

bash
curl -X POST https://api.rymi.live/v1/calls \
  -H "Authorization: Bearer $RYMI_API_KEY" \
  -H "Content-Type: application/json" \
  -d '{
    "agent_id": "YOUR_AGENT_ID",
    "participants": [
      {
        "transport": "pstn",
        "identity": "+15559990001",
        "from_number": "+15551234567"
      }
    ],
    "variables": { "name": "Alice" }
  }'
typescript
const call = await rymi.calls.create({
  agent_id: agent.id,
  participants: [
    {
      transport: 'pstn',
      identity: '+15559990001',
      from_number: '+15551234567'
    }
  ],
  variables: { name: 'Alice' }
});

console.log(call.id, call.status); // queued
python
call = rymi.calls.create(
    agent_id=agent["id"],
    participants=[
        {
            "transport": "pstn",
            "identity": "+15559990001",
            "from_number": "+15551234567",
        }
    ],
    variables={"name": "Alice"},
)

The call is accepted with 202 and dialed from the queue. Poll GET /v1/calls/:id for status, or register a webhook and let call.completed / call.intelligence.ready come to you.

What's Next?