Skip to content

FAQ

Common questions about shipping, operating, and paying for Rymi voice agents. If yours isn't here, the full docs or the studio chat can help.

Top questions

How do I publish my agent so it can take real calls?

Open the agent in Studio, run publish validation, then attach a phone number under Numbers. Calls route only to published agents. You can test a draft in the browser, but it won't answer a real phone call. See How Studio works.

Why are my calls not connecting?

Check your telephony connection under Numbers → Connect provider. Confirm the carrier is connected and the number is attached to a published agent. Set the carrier's answer URL to gateway.rymi.live/inbound/<provider>. See the full Telephony guide.

How is billing calculated and where do I add credits?

Calls bill per minute against your prepaid credit balance, in 30-second increments rounded up. A 20-second call costs half a minute, not a whole one. Top up from Settings → Billing & usage or the Credits chip in the sidebar. Failed calls (busy, no-answer) don't bill; only calls that connect and exchange audio do. See the Billing API for programmatic access.

My agent sounds robotic. How do I improve voice quality?

Try a different voice in the Voice section of Studio. Premium voices (ElevenLabs, Cartesia) sound more natural for production traffic than the lower-cost default voices. See the Model picker guide for the full tradeoffs.

How do I set up webhooks for call events?

Add a webhook endpoint in Settings → Webhooks. Rymi signs every payload. Verify the X-Rymi-Signature header against an HMAC-SHA256 of {X-Rymi-Timestamp}.{raw body} using your webhook secret. See Webhooks Verification for code examples.

Can I bring my own LLM or voice provider keys?

Yes. Add OpenAI, Anthropic, ElevenLabs, Cartesia, Groq, Cerebras, and 25+ other provider keys in Settings → BYO Providers, and Rymi routes calls through your accounts. Secret keys are encrypted at rest and never exposed to the browser. See BYO Providers.

Getting started

How do I create my first agent?

Open Studio, describe what you want the agent to do, and the designer assembles a starting configuration. See the Quickstart for a five-minute walkthrough.

Is there an official SDK?

Yes. Rymi is API-first, with official open-source SDKs: @rymi/node (npm) for server-side JavaScript and TypeScript, rymi (PyPI) for Python, and @rymi/mcp, an MCP server that lets Claude, Cursor, and other AI clients manage agents directly. The source lives under github.com/rymi-live. The browser and React SDKs (@rymi/web, @rymi/react) are not published yet — until they ship, create a call with transport: "webrtc" via POST /v1/calls and connect with LiveKit's browser SDK using the returned url and token, authenticating with publishable keys. You can also build against the REST API directly.

Do I need a phone number to test?

No. Test-call any agent from the studio's built-in test panel without attaching a number. Numbers are required only for inbound production calls.

Which languages are supported?

Managed stacks currently ship two: English and Hindi (including Hinglish code-mixing), each on a voice Rymi has verified as native for the language.

Custom stacks reach the full catalog — over 150 languages. Pick your own providers (or bring your own keys) and Rymi resolves a full speech-to-text, reasoning, and voice stack from its provider catalog (Azure, Google, Deepgram, ElevenLabs, Sarvam, OpenAI, and more); a language is offered only when a complete stack resolves for it. That includes all eleven Indian languages — Hindi, Bengali, Marathi, Telugu, Tamil, Gujarati, Kannada, Malayalam, Punjabi, and Odia — plus Assamese and Urdu.

Outside the two managed languages, accent quality is the provider's, not something Rymi guarantees — many "multilingual" voices are English voices reading foreign text. See Languages for the live catalog.

Pricing & billing

How is usage billed?

Per minute of call audio, billed in 30-second increments rounded up. The studio shows your current rate, and invoices itemize calls by agent. Inbound and outbound cost the same.

What's the difference between Managed and Custom agents?

Two ways to build, and they price differently:

  • Rymi Managed: a ready-made agent on a tuned, locked stack with the speech, model, and voice picked for you. You choose a managed SKU and pay its flat published per-minute rate. Browse the SKUs and their prices in the studio, or via GET /v1/managed-skus.
  • Custom: you assemble the stack yourself and control every provider, or bring your own keys. The studio shows the exact per-minute price live as you pick models, so you see what a call costs before you publish.

Carrier telephony bills separately through your phone provider either way.

Do failed calls count?

Only calls that connect and exchange audio bill. Busy signals, no-answer, and provider-side failures don't.

Can I cap spend per agent?

Set advanced.maxCallDuration (seconds per call) to bound any single call's cost, and configure spend alerts (PUT /v1/billing/alerts) to get notified at USD thresholds. Tenant-level daily-call and concurrency quotas are available on request.

Calls & telephony

How long does it take to connect a call?

Response latency depends mostly on the model stack you pick. Realtime and native-audio paths respond fastest; separate STT, LLM, and TTS stacks add a hop per stage. See the Model picker guide for the latency tradeoffs per provider.

What happens if the caller hangs up mid-sentence?

The agent finalizes any in-flight extraction, writes the transcript, and emits a call.completed webhook with the truncated duration. No audio is lost.

Can multiple callers share one number?

Yes. A number fans out to its attached agent per call, and concurrency is limited only by your tenant plan. Use Queue & Fanout for high-volume outbound.

How do I adapt the agent per caller?

Use Caller Routing: define caller types with trigger phrases and an approach for each, and the agent shifts behavior mid-call when it detects a match. Configure it in Studio under "Caller Routing".

Webhooks

What happens if my webhook endpoint fails?

Rymi makes up to 5 delivery attempts with exponential backoff (roughly 1s, 2s, 4s, 8s between retries; each attempt times out after 3 seconds). If the final attempt fails and the webhook has an alert_email set, you get an email, throttled to one per hour per webhook. Failed deliveries aren't replayed automatically, so re-fetch the call via the REST API if you missed one.

How do I verify a webhook is really from Rymi?

Compare the X-Rymi-Signature header against an HMAC-SHA256 of {X-Rymi-Timestamp}.{raw body} using your webhook secret. The timestamp is Unix milliseconds, so reject anything older than a few minutes to block replays. See the verified code examples in Webhooks.

Which events fire for a single call?

call.started fires when the call begins. After the call ends and post-call processing finishes, call.completed and call.intelligence.ready fire together. call.completed carries the transcript and metadata; call.intelligence.ready carries the summary, extraction, and evaluation. Retries can duplicate deliveries, so treat your handlers as idempotent.

Limits & quotas

What's the per-tenant call concurrency?

If your tenant has a max_concurrent_calls quota set, new dispatches are rejected with a quota_exceeded.concurrent_calls error while the cap is reached; queued and in-progress calls both count toward it. By default there's no cap. Limits are set per tenant, so contact support with your expected peak.

How long can a single call last?

The default cap is 10 minutes (maxCallDuration: 600). The allowed range is 30 seconds to 1 hour — the runtime clamps anything higher to 3600 seconds.

How much data is retained?

Call logs, transcripts, and recordings follow the active workspace retention policy. Free workspaces use the default short retention window; Enterprise workspaces can set custom retention.

Troubleshooting

My agent isn't picking up calls

Check three things: (1) the number is attached to the agent, (2) the agent is published, not a draft, (3) your tenant balance is positive. The dashboard status page shows the number's current binding.

The voice sounds different from what I picked

If you switched the agent to a managed SKU or changed the TTS provider, voice selection may have reset to a compatible default. Re-open the Voice section in the studio to confirm.

I'm seeing 401s from the REST API

Verify the Authorization: Bearer $RYMI_API_KEY header. Secret keys start with rymi_. If yours starts with sb_publishable_, it's a browser key that can only start WebRTC calls, not read account data. Revoking a key disables it immediately.

Extraction fields are empty

Extraction runs after the call, against the transcript. Check that (1) the agent has post_call.structured_extraction configured with a prompt or JSON schema, and (2) features.transcription_enabled is on. Without a transcript the whole intelligence pipeline is skipped and intelligence_status is set to skipped. A very short call may simply not contain what your schema asks for.