API Reference

Build custom integrations with Voxanne AI's REST API. Manage agents, calls, contacts, and receive real-time events via webhooks.

Base URL

https://api.voxanne.ai

Authentication

Bearer token in Authorization header

Response Format

JSON with standard HTTP status codes

Authentication

All API requests require an API key passed in the Authorization header:

// Using API key in headers
fetch('https://api.voxanne.ai/api/agents', {
  headers: {
    'Authorization': 'Bearer YOUR_API_KEY',
    'Content-Type': 'application/json'
  }
})

Get your API key: Navigate to Dashboard → Settings → API Keys

Endpoints

Agents

Create and manage AI agents

GET
/api/agents

List all agents for your organization

POST
/api/agents

Create a new AI agent

GET
/api/agents/:id

Get a specific agent by ID

PATCH
/api/agents/:id

Update an agent's configuration

DELETE
/api/agents/:id

Delete an agent

Calls

Access call logs and transcripts

GET
/api/calls

List all calls with filtering options

GET
/api/calls/:id

Get detailed call information

GET
/api/calls/:id/transcript

Get call transcript

GET
/api/calls/:id/recording

Get call recording URL

Contacts

Manage patient/customer contacts

GET
/api/contacts

List all contacts

POST
/api/contacts

Create a new contact

GET
/api/contacts/:id

Get contact details

PATCH
/api/contacts/:id

Update contact information

POST
/api/contacts/:id/call-back

Initiate outbound call to contact

Appointments

Schedule and manage appointments

GET
/api/appointments

List appointments

POST
/api/appointments

Create appointment

PATCH
/api/appointments/:id

Update appointment

DELETE
/api/appointments/:id

Cancel appointment

Webhooks

Receive real-time events

POST
/webhooks/vapi

Receive Vapi voice events

POST
/webhooks/stripe

Receive Stripe billing events

GET
/api/webhook-logs

View webhook delivery logs

Code Examples

Create Agent

// Create a new AI agent
const response = await fetch('https://api.voxanne.ai/api/agents', {
  method: 'POST',
  headers: {
    'Authorization': 'Bearer YOUR_API_KEY',
    'Content-Type': 'application/json'
  },
  body: JSON.stringify({
    name: 'Front Desk Agent',
    voice_provider: 'elevenlabs',
    voice_id: 'rachel',
    prompt: 'You are a friendly medical receptionist...',
    tools: ['book_appointment', 'check_availability']
  })
});

const agent = await response.json();
console.log('Agent created:', agent.id);

List Calls

// List recent calls with filtering
const response = await fetch('https://api.voxanne.ai/api/calls?limit=20&status=completed', {
  headers: {
    'Authorization': 'Bearer YOUR_API_KEY'
  }
});

const calls = await response.json();
calls.forEach(call => {
  console.log(`Call from ${call.from}: ${call.outcome}`);
});

Webhook Handler

// Handle webhook events (Node.js/Express)
app.post('/webhooks/vapi', async (req, res) => {
  const event = req.body;

  // Verify webhook signature (recommended)
  const signature = req.headers['x-vapi-signature'];
  if (!verifySignature(event, signature)) {
    return res.status(401).send('Invalid signature');
  }

  // Process event
  switch (event.type) {
    case 'call.started':
      console.log('Call started:', event.call.id);
      break;
    case 'call.ended':
      console.log('Call ended:', event.call.id);
      await saveCallToDatabase(event.call);
      break;
    case 'appointment.booked':
      console.log('Appointment booked:', event.appointment);
      await sendConfirmationEmail(event.appointment);
      break;
  }

  res.status(200).send('OK');
});

Rate Limits

Per Organization

1,000 req/hour

Across all API endpoints

Per IP Address

100 req/15min

For security protection

If you exceed rate limits, you'll receive a 429 Too Many Requests response. Contact sales for higher limits.

Need help with integration?

Our team can help you build custom integrations and answer technical questions.