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.
export RYMI_API_KEY="your_api_key_here"2. Create an Agent
Install a client library first (skip if you're using curl):
npm install @rymi/nodepip install rymiThen create the agent:
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."
}'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.'
});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
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:
curl -X POST https://api.rymi.live/v1/numbers \
-H "Authorization: Bearer $RYMI_API_KEY" \
-H "Content-Type: application/json" \
-d '{ "number": "+15551234567" }'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
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" }
}'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); // queuedcall = 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?
- Set up webhooks to receive real-time call events
- Add DNC compliance to stay within regulations
- Monitor costs with the analytics endpoint
- Create publishable keys for frontend-safe WebRTC calls
- Learn about Telephony Integration for advanced configuration

