Skip to content

API Reference

Build, deploy, and manage AI voice agents through REST endpoints under /v1.

Base URL

https://api.rymi.live

All endpoints are prefixed with /v1. For example, https://api.rymi.live/v1/agents.

Authentication

Rymi uses Bearer token authentication via the Authorization header.

bash
curl https://api.rymi.live/v1/agents \
  -H "Authorization: Bearer YOUR_API_KEY" \
  -H "Content-Type: application/json"
HeaderValue
AuthorizationBearer <YOUR_API_KEY>
Content-Typeapplication/json

Key Types

Key TypePrefixUse Case
Secret Keyrymi_Full management API access. Use only on your backend
Publishable Keysb_publishable_Frontend-safe, scoped to call creation flows

TIP

Legacy rymi_pk_ publishable keys remain accepted, but new keys use the sb_publishable_ format. Refer to Publishable Keys for scope details.

Rate Limits

The API applies a flat, env-configurable rate limit — by default 100 requests per 60-second window, with no burst allowance and no per-plan tiers. The limit is counted independently per API key and per client IP, so whichever runs out first triggers throttling.

Specific flows add their own limits on top of this — notably, PSTN calls created with a publishable key are capped at one call per 10 minutes per key + IP.

When a rate limit is exceeded, the API returns 429 Too Many Requests with a JSON body ({ "error": "Rate limit exceeded (...)" }). No Retry-After header is sent.

Pagination

List endpoints return paginated responses. Most resources use limit plus offset. Call history also supports cursor-based pagination.

bash
curl "https://api.rymi.live/v1/agents?limit=10&offset=20" \
  -H "Authorization: Bearer YOUR_API_KEY"
ParameterTypeDefaultDescription
limitinteger50Maximum number of records to return. The default is 50, but the accepted maximum varies per endpoint — see each endpoint's reference (e.g. agents list caps at 500, calls list defaults to 200 and caps at 1000)
offsetinteger0Number of records to skip before starting to collect the result set

Calls additionally accept:

ParameterTypeDefaultDescription
cursorstringResume from a previous call ID when traversing call history
statusstringFilter calls by status: queued, ringing, in_progress, completed, or failed

Example paginated response:

json
{
  "agents": [ ... ],
  "total": 142,
  "limit": 10,
  "offset": 20
}

Error Format

All errors return a JSON body with at least an error field:

json
{
  "error": "Human-readable error message"
}

Write endpoints may include additional context:

json
{
  "error": "Insufficient credits to start this call",
  "code": "insufficient_credits",
  "detail": "tenant_balance_exhausted"
}

HTTP Status Codes

CodeMeaning
200Success
201Resource created
202Accepted — queued for async processing
400Bad request or validation error
401Missing or invalid API key
402Insufficient credits
403Authenticated but not allowed for this token scope
404Resource not found
409Conflict with current resource state
429Rate limit exceeded — the response body carries the error message
500Internal server error
502Upstream provider error (e.g., telephony or voice provider failure)

API Surface

These are the public APIs available for self-serve users. Admin routes, internal queue dashboards, and carrier number purchase/search APIs are intentionally excluded.

AreaEndpointsDescription
AgentsGET POST /v1/agents, PUT PATCH DELETE /v1/agents/:id, GET /v1/agents/:id/calls, POST /v1/agents/generate, GET /v1/agents/llm-optionsCore configuration for voice personas, provider routing, and prompt/playbook structure
Knowledge SourcesPOST GET /v1/agents/:id/knowledge-sources, DELETE /v1/agents/:id/knowledge-sources/:sourceId, POST /v1/agents/:id/knowledge-sources/uploadGround agents in your own documents with full-text or embedding retrieval
CallsPOST /v1/calls, GET /v1/calls, GET /v1/calls/active, GET /v1/calls/:id, POST /v1/calls/:id/participants, POST /v1/calls/:id/end, GET /v1/calls/:id/events, GET /v1/calls/:id/summary, GET /v1/calls/:id/transcript, GET /v1/calls/:id/recording, POST /v1/calls/:id/reprocess, GET /v1/calls/queue/statsWebRTC and PSTN call lifecycle, post-call inspection, and queue monitoring
Queue & FanoutPOST /v1/calls/batchHigh-throughput outbound dialing for up to 500 PSTN recipients per request
NumbersPOST /v1/numbers, GET /v1/numbers, POST /v1/numbers/:number/attach, DELETE /v1/numbers/:numberBYOC phone number registration and agent assignment
TelephonyPOST /v1/telephony/connect, POST /v1/telephony/disconnect, GET /v1/telephony/status, GET /v1/telephony/numbersCarrier abstraction for Plivo, Twilio, and Vonage
BYO ProvidersGET POST /v1/providers, DELETE /v1/providers/:provider, GET /v1/providers/fields, POST /v1/providers/:provider/validateBring your own keys for 25+ LLM, speech-to-text, and voice providers
Publishable KeysGET POST /v1/keys/publishable, DELETE /v1/keys/publishable/:idFrontend-safe, scoped keys for SDK call creation
WebhooksPOST GET /v1/webhooks, PATCH DELETE /v1/webhooks/:idEvent delivery for transcripts, post-call intelligence, and automation hooks
CompliancePOST GET /v1/dnc, DELETE /v1/dnc/:phone, POST /v1/dnc/batch, POST /v1/dnc/checkDo-Not-Call registry with bulk import and pre-flight checks
AnalyticsGET /v1/analytics/spendUsage, spend, call-quality, and agent performance reporting
NotificationsGET /v1/notifications, PUT /v1/notifications/read-all, PUT /v1/notifications/:id/read, GET PUT /v1/notifications/preferencesIn-app notification feed and delivery preferences
LanguagesGET /v1/languagesSupported language catalog for agent configuration
AuthGET /v1/auth/me, POST /v1/auth/regenerate-key, GET POST /v1/auth/api-keys, DELETE /v1/auth/api-keys/:idAccount profile, secret key rotation, and multi-key management

Client Libraries

LibraryDescription
Browser SDKAdd AI voice to any website with @rymi/web
React SDKReact provider and hooks with @rymi/react
Node.js SDKServer-side SDK with @rymi/node
Python SDKServer-side SDK with rymi