VoiceDock Docs
ApiCalls

Initiate outbound call

Initiate an outbound call from an AI assistant to a destination phone number. **Phone Number Selection (Important for Resellers):** You can specify which phone number to call from using the `number_id` parameter. This is **highly recommended** for: - **Resellers**: Ensure calls are made from numbers dedicated to specific clients - **Branding**: Always use the same caller ID for recognition - **Compliance**: Meet legal requirements for specific numbers - **Local presence**: Use local numbers for better answer rates If `number_id` is not provided, the system will automatically select an available number from your organization's pool, which may not be appropriate for reseller scenarios where numbers are client-specific. **Three Usage Modes:** 1. **Reference Mode** (`assistant_id`) - Reference an existing assistant from your dashboard - Uses the assistant's pre-configured settings - Simplest option for standard calls 2. **Transient Mode** (`assistant`) - Create a one-time assistant configuration without saving - Full control over STT/LLM/TTS configuration - Perfect for personalized or context-specific calls 3. **Hybrid Mode** (`assistant_id` + `assistant_override`) - Reference a saved assistant as the base - Override specific fields (e.g., first_message, llm_config.messages) - Best for personalization while keeping base config **⚠️ Deprecated:** `agent_id`, `agent`, and `agent_config` are deprecated. Use `assistant_id`, `assistant`, and `assistant_override` instead. **Use Cases:** - Appointment reminders with personalized greetings - Customer follow-ups with dynamic context - Survey calls with specific question flows - Delivery notifications - Payment reminders with account-specific details **Configuration Notes:** - When using `xai_realtime` provider, omit `stt_config` and `tts_config` (handled internally) - For other providers (`openai`, `mistral`), both `stt_config` and `tts_config` are required - The call will be initiated immediately and the response will include a `call_id` to track progress **Response Time:** Your call will typically connect within 2-5 seconds.

POST
/calls/outbound

Initiate an outbound call from an AI assistant to a destination phone number.

Phone Number Selection (Important for Resellers):

You can specify which phone number to call from using the number_id parameter. This is highly recommended for:

  • Resellers: Ensure calls are made from numbers dedicated to specific clients
  • Branding: Always use the same caller ID for recognition
  • Compliance: Meet legal requirements for specific numbers
  • Local presence: Use local numbers for better answer rates

If number_id is not provided, the system will automatically select an available number from your organization's pool, which may not be appropriate for reseller scenarios where numbers are client-specific.

Three Usage Modes:

  1. Reference Mode (assistant_id)

    • Reference an existing assistant from your dashboard
    • Uses the assistant's pre-configured settings
    • Simplest option for standard calls
  2. Transient Mode (assistant)

    • Create a one-time assistant configuration without saving
    • Full control over STT/LLM/TTS configuration
    • Perfect for personalized or context-specific calls
  3. Hybrid Mode (assistant_id + assistant_override)

    • Reference a saved assistant as the base
    • Override specific fields (e.g., first_message, llm_config.messages)
    • Best for personalization while keeping base config

⚠️ Deprecated: agent_id, agent, and agent_config are deprecated. Use assistant_id, assistant, and assistant_override instead.

Use Cases:

  • Appointment reminders with personalized greetings
  • Customer follow-ups with dynamic context
  • Survey calls with specific question flows
  • Delivery notifications
  • Payment reminders with account-specific details

Configuration Notes:

  • When using xai_realtime provider, omit stt_config and tts_config (handled internally)
  • For other providers (openai, mistral), both stt_config and tts_config are required
  • The call will be initiated immediately and the response will include a call_id to track progress

Response Time: Your call will typically connect within 2-5 seconds.

Authorization

BearerAuth
AuthorizationBearer <token>

API key authentication. Get your key from the dashboard.

In: header

Request Body

application/json

TypeScript Definitions

Use the request body type in TypeScript.

Response Body

application/json

application/json

application/json

application/json

curl -X POST "https://example.com/calls/outbound" \  -H "Content-Type: application/json" \  -d '{    "destination": "+31612345678",    "assistant_id": "17a0cb75-fa09-4bdd-9a44-92a70d829c88"  }'
{
  "success": true,
  "call_id": "call-outbound-abc123",
  "status": "dialing"
}
{
  "error": "Invalid API key",
  "message": "string"
}
{
  "error": "Invalid API key",
  "message": "string"
}
{
  "error": "Invalid API key",
  "message": "string"
}

Get call by ID GET

Retrieve complete details for a specific call including transcript, analysis results, and all metadata.

Send control command to active call POST

Send real-time commands to an active call. The call must be in "in-progress" status. **⚠️ IMPORTANT: xAI Realtime Model Limitations** Call control has **significant limitations** when using xAI Realtime (grok-realtime-v1) due to its speech-to-speech architecture: - ❌ `inject-context`: Limited effectiveness - context may not influence responses reliably - ❌ `say`: Does not work reliably - commands often timeout or fail to trigger speech - ✅ `end-call`: Works reliably - ⚠️ `transfer`: Partial support - announcement may not work, but transfer executes **Why the limitations?** xAI Realtime is an end-to-end audio model that processes speech directly without intermediate text. It expects continuous audio input and cannot reliably respond to text-based control commands mid-conversation. **Recommendation:** If you need full call control support (`inject-context`, `say`, `transfer` with announcements), use the traditional pipeline: - **Provider**: `openai` with `gpt-4o` or `gpt-4o-mini` - **STT**: Deepgram (`nova-3-general`) - **TTS**: ElevenLabs or OpenAI TTS - **Result**: All control commands work reliably **Command Types:** - `inject-context`: Silently add information to the agent's context (traditional models only) - `say`: Make the agent speak specific text (traditional models only) - `end-call`: End the call with an optional final message (works with all models) - `transfer`: Transfer the call to another destination (partial xAI Realtime support) **Use Cases:** - SMS verification: Inject received codes into the conversation - CRM integration: Add customer context mid-call - Human escalation: Transfer to a live agent - Emergency end: Gracefully terminate problematic calls