Agents
An agent is the reusable definition of who the AI is and what it should accomplish. It holds the instructions, the language, the voice, and the model providers. Everything else in the API points at an agent: a call runs an agent, an interview runs an agent, a campaign runs an agent against a list.
Create an agent once and run it thousands of times.
Two types
| Type | Runs on | Used by |
|---|---|---|
phone | The telephone network | Calls, campaigns |
voice | A browser, over WebRTC | Interviews |
The split is real, not cosmetic. A phone agent is tuned for the latency and audio quality
of a telephone line and understands things like voicemail and retries. A voice agent runs
in a browser where audio is clean and the session is visual. Using the wrong type returns
400 INVALID_AGENT_TYPE.
Instructions are the product
instructions is the system prompt: the single field that most determines whether the
agent works. Write it the way you would brief a new colleague on their first day.
You are a friendly assistant from Bright Dental calling to confirm an appointment.
Confirm the caller still wants their appointment on {{appointmentDay}} at {{appointmentTime}}.
If they cannot make it, ask what day suits them better and note it.
If they ask about pricing, say a colleague will call back — do not quote figures.
Keep the call under a minute. Do not offer medical advice.Two things worth copying from that example:
Say what the agent must not do. Boundaries matter more than capabilities. An agent that quotes a price it invented is worse than one that defers.
Use {{variables}} for anything per-call. Declare them in the instructions and supply
them when you place the call:
curl -X POST "https://api.rabbitt.ai/api/v1/calls" \
-H "Authorization: Bearer $RABBITT_API_KEY" \
-H "Content-Type: application/json" \
-d '{
"agentId": "507f1f77bcf86cd799439011",
"phoneNumber": "+919876543210",
"variables": {
"appointmentDay": "Thursday",
"appointmentTime": "3pm"
}
}'That is one agent serving every appointment, rather than one agent per appointment.
Providers
Each agent picks its own speech-to-text, language model, and text-to-speech providers. If you do not choose, sensible defaults are applied and a fallback chain covers provider outages automatically.
{
"providers": { "llm": "groq", "stt": "deepgram", "tts": "elevenlabs" }
}Pick groq for the lowest latency on phone calls, where a pause reads as awkward. Pick
gemini when reasoning quality matters more than response speed.
Quotas
Your organization has a maxAgents quota. Creating one past it returns 409 ORGANIZATION_AGENT_LIMIT. Check your current usage with
GET /v1/usage.