Quickstart
This walks you from nothing to a completed AI phone call and its report. It takes about five minutes and costs a few credit minutes.
1. Create an API key
Open API keys in your dashboard and create one. Give it the
agents:manage, campaigns:manage, and executions:read scopes — enough to create an
agent, place a call, and read the result.
Keep it in an environment variable rather than in source:
export RABBITT_API_KEY="rb_live_xxxxxxxxxxxxxxxx_xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx"2. Create a phone agent
An agent is the reusable definition of who the AI is and what it should accomplish.
The instructions field is the whole personality and objective — write it the way you
would brief a new colleague.
curl -X POST "https://api.rabbitt.ai/api/v1/agents" \
-H "Authorization: Bearer $RABBITT_API_KEY" \
-H "Content-Type: application/json" \
-d '{
"type": "phone",
"name": "Appointment reminder",
"instructions": "You are a friendly assistant from Bright Dental. Confirm the caller still wants their appointment on Thursday at 3pm. If they cannot make it, ask what day suits them better. Keep it under a minute.",
"language": "english",
"phone": {
"direction": "outbound",
"greeting": "Hi, this is Bright Dental calling about your appointment."
}
}'The response contains the agent id. Hold on to it:
{
"id": "507f1f77bcf86cd799439011",
"object": "agent",
"type": "phone",
"name": "Appointment reminder",
"createdAt": "2026-01-01T10:00:00.000Z"
}3. Place a 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",
"contactName": "Asha Menon",
"externalRef": "booking-8842"
}'The phone rings within a few seconds. externalRef is yours to use — put your own
booking or candidate id there and it comes back on the call and its report, so you never
have to keep a mapping table.
4. Wait for the outcome
The call returns immediately with status: "created". Poll it until it completes:
curl "https://api.rabbitt.ai/api/v1/calls/CALL_ID" \
-H "Authorization: Bearer $RABBITT_API_KEY"status moves created → active → completed. Once it is completed, the report is
generated asynchronously — usually within a few seconds.
5. Read the report
curl "https://api.rabbitt.ai/api/v1/calls/CALL_ID/report" \
-H "Authorization: Bearer $RABBITT_API_KEY"You get 202 with status: "pending" while the analysis is still running, and 200
with the full report once it is ready:
{
"id": "507f1f77bcf86cd799439033",
"object": "report",
"type": "phone",
"outcome": "confirmed",
"summary": "Asha confirmed the Thursday 3pm appointment.",
"capturedFields": [
{
"field": "confirmed",
"value": "true",
"confidence": 0.94,
"sourceQuote": "yes that still works for me"
}
],
"sentiment": "positive"
}The full transcript is available separately at
GET /v1/calls/{id}/transcript.
What next
- Place an outbound call — variables, retries, and campaigns
- Embed an interview — run interviews inside your own product
- API reference — every endpoint