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:

bash
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.

bash
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:

json
{
  "id": "507f1f77bcf86cd799439011",
  "object": "agent",
  "type": "phone",
  "name": "Appointment reminder",
  "createdAt": "2026-01-01T10:00:00.000Z"
}

3. Place a call

bash
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:

bash
curl "https://api.rabbitt.ai/api/v1/calls/CALL_ID" \
  -H "Authorization: Bearer $RABBITT_API_KEY"

status moves createdactivecompleted. Once it is completed, the report is generated asynchronously — usually within a few seconds.

5. Read the report

bash
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:

json
{
  "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

Dashboard Welcome