openapi: 3.0.1 info: title: Retell AI API description: >- REST API for building, testing, and deploying AI voice agents that make and receive phone and web calls. Configure a response engine (Retell LLM, a custom LLM, or a Conversation Flow), attach a voice, provision phone numbers, place outbound and web calls, run batch campaigns, ground agents with knowledge bases, and read back transcripts, recordings, and call analysis. All endpoints are authenticated with a Bearer API key. termsOfService: https://www.retellai.com/terms-of-service contact: name: Retell AI Support url: https://docs.retellai.com version: '2.0' servers: - url: https://api.retellai.com security: - api_key: [] tags: - name: Agent - name: Retell LLM - name: Conversation Flow - name: Phone Call - name: Web Call - name: Call - name: Phone Number - name: Voice - name: Knowledge Base - name: Batch Call - name: Concurrency paths: /create-agent: post: operationId: createAgent tags: - Agent summary: Create a new voice agent. description: >- Creates an agent that pairs a response engine (retell-llm, custom-llm, or conversation-flow) with a voice and call-behavior settings. requestBody: required: true content: application/json: schema: $ref: '#/components/schemas/AgentRequest' responses: '201': description: Agent created. content: application/json: schema: $ref: '#/components/schemas/AgentResponse' /get-agent/{agent_id}: get: operationId: getAgent tags: - Agent summary: Retrieve an agent. parameters: - $ref: '#/components/parameters/AgentId' - $ref: '#/components/parameters/Version' responses: '200': description: OK content: application/json: schema: $ref: '#/components/schemas/AgentResponse' /list-agents: get: operationId: listAgents tags: - Agent summary: List all agents. responses: '200': description: OK content: application/json: schema: type: array items: $ref: '#/components/schemas/AgentResponse' /update-agent/{agent_id}: patch: operationId: updateAgent tags: - Agent summary: Update an agent. parameters: - $ref: '#/components/parameters/AgentId' requestBody: required: true content: application/json: schema: $ref: '#/components/schemas/AgentRequest' responses: '200': description: OK content: application/json: schema: $ref: '#/components/schemas/AgentResponse' /delete-agent/{agent_id}: delete: operationId: deleteAgent tags: - Agent summary: Delete an agent. parameters: - $ref: '#/components/parameters/AgentId' responses: '204': description: Agent deleted. /create-retell-llm: post: operationId: createRetellLLM tags: - Retell LLM summary: Create a Retell LLM response engine. description: >- Creates a Retell-managed LLM response engine (prompt, model, tools, states, and knowledge base references) that an agent can use to drive the conversation. requestBody: required: true content: application/json: schema: $ref: '#/components/schemas/RetellLLMRequest' responses: '201': description: Retell LLM created. content: application/json: schema: $ref: '#/components/schemas/RetellLLMResponse' /get-retell-llm/{llm_id}: get: operationId: getRetellLLM tags: - Retell LLM summary: Retrieve a Retell LLM. parameters: - $ref: '#/components/parameters/LlmId' - $ref: '#/components/parameters/Version' responses: '200': description: OK content: application/json: schema: $ref: '#/components/schemas/RetellLLMResponse' /list-retell-llms: get: operationId: listRetellLLMs tags: - Retell LLM summary: List all Retell LLMs. responses: '200': description: OK content: application/json: schema: type: array items: $ref: '#/components/schemas/RetellLLMResponse' /update-retell-llm/{llm_id}: patch: operationId: updateRetellLLM tags: - Retell LLM summary: Update a Retell LLM. parameters: - $ref: '#/components/parameters/LlmId' requestBody: required: true content: application/json: schema: $ref: '#/components/schemas/RetellLLMRequest' responses: '200': description: OK content: application/json: schema: $ref: '#/components/schemas/RetellLLMResponse' /delete-retell-llm/{llm_id}: delete: operationId: deleteRetellLLM tags: - Retell LLM summary: Delete a Retell LLM. parameters: - $ref: '#/components/parameters/LlmId' responses: '204': description: Retell LLM deleted. /create-conversation-flow: post: operationId: createConversationFlow tags: - Conversation Flow summary: Create a conversation flow. description: >- Creates a node/edge conversation flow response engine for visually structured, deterministic agent conversations. requestBody: required: true content: application/json: schema: $ref: '#/components/schemas/ConversationFlowRequest' responses: '201': description: Conversation flow created. content: application/json: schema: $ref: '#/components/schemas/ConversationFlowResponse' /get-conversation-flow/{conversation_flow_id}: get: operationId: getConversationFlow tags: - Conversation Flow summary: Retrieve a conversation flow. parameters: - $ref: '#/components/parameters/ConversationFlowId' - $ref: '#/components/parameters/Version' responses: '200': description: OK content: application/json: schema: $ref: '#/components/schemas/ConversationFlowResponse' /list-conversation-flows: get: operationId: listConversationFlows tags: - Conversation Flow summary: List all conversation flows. responses: '200': description: OK content: application/json: schema: type: array items: $ref: '#/components/schemas/ConversationFlowResponse' /update-conversation-flow/{conversation_flow_id}: patch: operationId: updateConversationFlow tags: - Conversation Flow summary: Update a conversation flow. parameters: - $ref: '#/components/parameters/ConversationFlowId' requestBody: required: true content: application/json: schema: $ref: '#/components/schemas/ConversationFlowRequest' responses: '200': description: OK content: application/json: schema: $ref: '#/components/schemas/ConversationFlowResponse' /delete-conversation-flow/{conversation_flow_id}: delete: operationId: deleteConversationFlow tags: - Conversation Flow summary: Delete a conversation flow. parameters: - $ref: '#/components/parameters/ConversationFlowId' responses: '204': description: Conversation flow deleted. /v2/create-phone-call: post: operationId: createPhoneCall tags: - Phone Call summary: Create an outbound phone call. description: >- Places an outbound PSTN call from a number you own to a destination number, handled by the agent bound to the from_number (or an override agent). requestBody: required: true content: application/json: schema: $ref: '#/components/schemas/CreatePhoneCallRequest' responses: '201': description: Phone call registered. content: application/json: schema: $ref: '#/components/schemas/PhoneCallResponse' /v2/create-web-call: post: operationId: createWebCall tags: - Web Call summary: Create a web call. description: >- Registers a browser-based (WebRTC) call and returns an access_token to hand to the Retell Web Client SDK in your frontend. requestBody: required: true content: application/json: schema: $ref: '#/components/schemas/CreateWebCallRequest' responses: '201': description: Web call registered. content: application/json: schema: $ref: '#/components/schemas/WebCallResponse' /get-call/{call_id}: get: operationId: getCall tags: - Call summary: Retrieve a call. description: >- Returns the full call object including status, transcript, recording URL, call analysis, and cost breakdown. parameters: - name: call_id in: path required: true schema: type: string responses: '200': description: OK content: application/json: schema: $ref: '#/components/schemas/Call' /list-calls: post: operationId: listCalls tags: - Call summary: List calls. description: >- Lists calls with optional filter criteria (agent, status, direction, timestamp ranges), sort order, and pagination. requestBody: required: false content: application/json: schema: $ref: '#/components/schemas/ListCallsRequest' responses: '200': description: OK content: application/json: schema: type: array items: $ref: '#/components/schemas/Call' /create-batch-call: post: operationId: createBatchCall tags: - Batch Call summary: Create a batch call. description: >- Queues an outbound calling campaign to many recipients from a single from_number, subject to available concurrency. requestBody: required: true content: application/json: schema: $ref: '#/components/schemas/CreateBatchCallRequest' responses: '201': description: Batch call created. content: application/json: schema: $ref: '#/components/schemas/BatchCallResponse' /create-phone-number: post: operationId: createPhoneNumber tags: - Phone Number summary: Buy a phone number. description: >- Provisions (purchases) a new phone number and optionally binds inbound and outbound agents to it. requestBody: required: true content: application/json: schema: $ref: '#/components/schemas/CreatePhoneNumberRequest' responses: '201': description: Phone number provisioned. content: application/json: schema: $ref: '#/components/schemas/PhoneNumberResponse' /import-phone-number: post: operationId: importPhoneNumber tags: - Phone Number summary: Import an existing phone number. description: >- Connects a number you already own via your own SIP trunk / elastic SIP trunking for use with Retell agents. requestBody: required: true content: application/json: schema: $ref: '#/components/schemas/ImportPhoneNumberRequest' responses: '201': description: Phone number imported. content: application/json: schema: $ref: '#/components/schemas/PhoneNumberResponse' /get-phone-number/{phone_number}: get: operationId: getPhoneNumber tags: - Phone Number summary: Retrieve a phone number. parameters: - $ref: '#/components/parameters/PhoneNumber' responses: '200': description: OK content: application/json: schema: $ref: '#/components/schemas/PhoneNumberResponse' /list-phone-numbers: get: operationId: listPhoneNumbers tags: - Phone Number summary: List phone numbers. responses: '200': description: OK content: application/json: schema: type: array items: $ref: '#/components/schemas/PhoneNumberResponse' /update-phone-number/{phone_number}: patch: operationId: updatePhoneNumber tags: - Phone Number summary: Update a phone number. parameters: - $ref: '#/components/parameters/PhoneNumber' requestBody: required: true content: application/json: schema: $ref: '#/components/schemas/UpdatePhoneNumberRequest' responses: '200': description: OK content: application/json: schema: $ref: '#/components/schemas/PhoneNumberResponse' /delete-phone-number/{phone_number}: delete: operationId: deletePhoneNumber tags: - Phone Number summary: Delete (release) a phone number. parameters: - $ref: '#/components/parameters/PhoneNumber' responses: '204': description: Phone number released. /list-voices: get: operationId: listVoices tags: - Voice summary: List all available voices. responses: '200': description: OK content: application/json: schema: type: array items: $ref: '#/components/schemas/Voice' /get-voice/{voice_id}: get: operationId: getVoice tags: - Voice summary: Retrieve a voice. parameters: - name: voice_id in: path required: true schema: type: string responses: '200': description: OK content: application/json: schema: $ref: '#/components/schemas/Voice' /create-knowledge-base: post: operationId: createKnowledgeBase tags: - Knowledge Base summary: Create a knowledge base. description: >- Creates a knowledge base from texts, files, and/or URLs that agents can retrieve from (RAG) during calls. requestBody: required: true content: multipart/form-data: schema: $ref: '#/components/schemas/CreateKnowledgeBaseRequest' responses: '201': description: Knowledge base created. content: application/json: schema: $ref: '#/components/schemas/KnowledgeBaseResponse' /get-knowledge-base/{knowledge_base_id}: get: operationId: getKnowledgeBase tags: - Knowledge Base summary: Retrieve a knowledge base. parameters: - $ref: '#/components/parameters/KnowledgeBaseId' responses: '200': description: OK content: application/json: schema: $ref: '#/components/schemas/KnowledgeBaseResponse' /list-knowledge-bases: get: operationId: listKnowledgeBases tags: - Knowledge Base summary: List all knowledge bases. responses: '200': description: OK content: application/json: schema: type: array items: $ref: '#/components/schemas/KnowledgeBaseResponse' /delete-knowledge-base/{knowledge_base_id}: delete: operationId: deleteKnowledgeBase tags: - Knowledge Base summary: Delete a knowledge base. parameters: - $ref: '#/components/parameters/KnowledgeBaseId' responses: '204': description: Knowledge base deleted. /add-knowledge-base-sources/{knowledge_base_id}: post: operationId: addKnowledgeBaseSources tags: - Knowledge Base summary: Add sources to a knowledge base. parameters: - $ref: '#/components/parameters/KnowledgeBaseId' requestBody: required: true content: multipart/form-data: schema: $ref: '#/components/schemas/AddKnowledgeBaseSourcesRequest' responses: '200': description: OK content: application/json: schema: $ref: '#/components/schemas/KnowledgeBaseResponse' /delete-knowledge-base-source/{knowledge_base_id}/source/{source_id}: delete: operationId: deleteKnowledgeBaseSource tags: - Knowledge Base summary: Delete a knowledge base source. parameters: - $ref: '#/components/parameters/KnowledgeBaseId' - name: source_id in: path required: true schema: type: string responses: '200': description: OK content: application/json: schema: $ref: '#/components/schemas/KnowledgeBaseResponse' /get-concurrency: get: operationId: getConcurrency tags: - Concurrency summary: Get current and maximum call concurrency. description: >- Returns the organization's current number of ongoing calls, base and purchased concurrency limits, burst settings, and reserved inbound concurrency. responses: '200': description: OK content: application/json: schema: $ref: '#/components/schemas/ConcurrencyResponse' components: securitySchemes: api_key: type: http scheme: bearer bearerFormat: apiKey description: 'Retell API key, sent as: Authorization: Bearer ' parameters: AgentId: name: agent_id in: path required: true schema: type: string LlmId: name: llm_id in: path required: true schema: type: string ConversationFlowId: name: conversation_flow_id in: path required: true schema: type: string KnowledgeBaseId: name: knowledge_base_id in: path required: true schema: type: string PhoneNumber: name: phone_number in: path required: true description: Phone number in E.164 format. schema: type: string Version: name: version in: query required: false description: Specific version (integer) or version tag to retrieve. schema: type: string schemas: ResponseEngine: type: object description: The engine that produces agent responses during a call. required: - type properties: type: type: string enum: - retell-llm - custom-llm - conversation-flow llm_id: type: string description: Retell LLM id when type is retell-llm. llm_websocket_url: type: string description: >- Your WebSocket URL when type is custom-llm. Retell connects to `{this-url}/{call_id}` at call start. conversation_flow_id: type: string description: Conversation flow id when type is conversation-flow. version: type: integer AgentRequest: type: object required: - response_engine - voice_id properties: response_engine: $ref: '#/components/schemas/ResponseEngine' voice_id: type: string example: 11labs-Adrian agent_name: type: string voice_model: type: string voice_speed: type: number minimum: 0.5 maximum: 2 voice_temperature: type: number minimum: 0 maximum: 2 language: type: string default: en-US webhook_url: type: string responsiveness: type: number minimum: 0 maximum: 1 interruption_sensitivity: type: number minimum: 0 maximum: 1 ambient_sound: type: string end_call_after_silence_ms: type: integer stt_mode: type: string enum: - fast - accurate AgentResponse: allOf: - $ref: '#/components/schemas/AgentRequest' - type: object properties: agent_id: type: string version: type: integer is_published: type: boolean last_modification_timestamp: type: integer RetellLLMRequest: type: object properties: general_prompt: type: string description: General prompt appended to the system prompt in every state. model: type: string default: gpt-4.1 model_temperature: type: number minimum: 0 maximum: 1 s2s_model: type: string begin_message: type: string description: First utterance said by the agent. start_speaker: type: string enum: - agent - user general_tools: type: array items: $ref: '#/components/schemas/Tool' states: type: array items: type: object starting_state: type: string knowledge_base_ids: type: array items: type: string default_dynamic_variables: type: object additionalProperties: type: string RetellLLMResponse: allOf: - $ref: '#/components/schemas/RetellLLMRequest' - type: object properties: llm_id: type: string version: type: integer is_published: type: boolean last_modification_timestamp: type: integer Tool: type: object properties: type: type: string enum: - end_call - transfer_call - check_availability_cal - book_appointment_cal - press_digit - custom name: type: string description: type: string url: type: string description: Webhook URL for a custom tool. ConversationFlowRequest: type: object properties: global_prompt: type: string nodes: type: array description: Flow nodes (conversation, function, transfer, end, etc.). items: type: object start_node_id: type: string model: type: string knowledge_base_ids: type: array items: type: string ConversationFlowResponse: allOf: - $ref: '#/components/schemas/ConversationFlowRequest' - type: object properties: conversation_flow_id: type: string version: type: integer is_published: type: boolean CreatePhoneCallRequest: type: object required: - from_number - to_number properties: from_number: type: string description: E.164 number you own. example: '+14157774444' to_number: type: string description: E.164 destination number. example: '+12137774445' override_agent_id: type: string override_agent_version: type: integer metadata: type: object retell_llm_dynamic_variables: type: object additionalProperties: type: string custom_sip_headers: type: object additionalProperties: type: string PhoneCallResponse: type: object properties: call_id: type: string call_type: type: string enum: - phone_call agent_id: type: string agent_version: type: integer call_status: $ref: '#/components/schemas/CallStatus' from_number: type: string to_number: type: string direction: type: string enum: - inbound - outbound telephony_identifier: type: object CreateWebCallRequest: type: object required: - agent_id properties: agent_id: type: string agent_version: type: integer metadata: type: object retell_llm_dynamic_variables: type: object additionalProperties: type: string WebCallResponse: type: object properties: call_id: type: string call_type: type: string enum: - web_call access_token: type: string description: Token to pass to the Retell Web Client SDK in your frontend. agent_id: type: string agent_version: type: integer call_status: $ref: '#/components/schemas/CallStatus' ListCallsRequest: type: object properties: filter_criteria: type: object properties: agent_id: type: array items: type: string call_status: type: array items: $ref: '#/components/schemas/CallStatus' direction: type: array items: type: string sort_order: type: string enum: - ascending - descending limit: type: integer pagination_key: type: string CallStatus: type: string enum: - registered - ongoing - ended - error Call: type: object properties: call_id: type: string call_type: type: string enum: - phone_call - web_call agent_id: type: string call_status: $ref: '#/components/schemas/CallStatus' from_number: type: string to_number: type: string direction: type: string start_timestamp: type: integer end_timestamp: type: integer duration_ms: type: integer transcript: type: string transcript_object: type: array items: type: object recording_url: type: string public_log_url: type: string disconnection_reason: type: string call_analysis: $ref: '#/components/schemas/CallAnalysis' call_cost: $ref: '#/components/schemas/CallCost' metadata: type: object CallAnalysis: type: object properties: call_summary: type: string user_sentiment: type: string enum: - Negative - Positive - Neutral - Unknown call_successful: type: boolean in_voicemail: type: boolean custom_analysis_data: type: object CallCost: type: object properties: combined_cost: type: number description: Total cost of the call in cents. total_duration_seconds: type: integer product_costs: type: array items: type: object properties: product: type: string description: e.g. retell_platform, tts, llm, telephony. unit_price: type: number cost: type: number CreateBatchCallRequest: type: object required: - from_number - tasks properties: from_number: type: string name: type: string trigger_timestamp: type: integer description: Unix ms at which to start the campaign; omit to start immediately. tasks: type: array items: type: object required: - to_number properties: to_number: type: string retell_llm_dynamic_variables: type: object additionalProperties: type: string BatchCallResponse: type: object properties: batch_call_id: type: string name: type: string from_number: type: string scheduled_timestamp: type: integer total_task_count: type: integer CreatePhoneNumberRequest: type: object properties: area_code: type: integer nickname: type: string inbound_agent_id: type: string outbound_agent_id: type: string number_provider: type: string enum: - twilio - telnyx ImportPhoneNumberRequest: type: object required: - phone_number properties: phone_number: type: string termination_uri: type: string description: SIP termination URI for outbound. sip_trunk_auth_username: type: string sip_trunk_auth_password: type: string inbound_agent_id: type: string outbound_agent_id: type: string nickname: type: string UpdatePhoneNumberRequest: type: object properties: inbound_agent_id: type: string outbound_agent_id: type: string nickname: type: string PhoneNumberResponse: type: object properties: phone_number: type: string phone_number_pretty: type: string nickname: type: string inbound_agent_id: type: string outbound_agent_id: type: string area_code: type: integer last_modification_timestamp: type: integer Voice: type: object properties: voice_id: type: string example: 11labs-Adrian voice_name: type: string provider: type: string enum: - elevenlabs - openai - deepgram - play_ht - cartesia accent: type: string gender: type: string enum: - male - female age: type: string preview_audio_url: type: string CreateKnowledgeBaseRequest: type: object required: - knowledge_base_name properties: knowledge_base_name: type: string maxLength: 40 knowledge_base_texts: type: array items: type: object properties: title: type: string text: type: string knowledge_base_files: type: array items: type: string format: binary knowledge_base_urls: type: array items: type: string enable_auto_refresh: type: boolean AddKnowledgeBaseSourcesRequest: type: object properties: knowledge_base_texts: type: array items: type: object knowledge_base_files: type: array items: type: string format: binary knowledge_base_urls: type: array items: type: string KnowledgeBaseResponse: type: object properties: knowledge_base_id: type: string knowledge_base_name: type: string status: type: string enum: - in_progress - complete - error - refreshing_in_progress enable_auto_refresh: type: boolean last_refreshed_timestamp: type: integer knowledge_base_sources: type: array items: type: object properties: source_id: type: string type: type: string enum: - document - text - url filename: type: string url: type: string ConcurrencyResponse: type: object properties: current_concurrency: type: integer description: Number of ongoing calls in the org. concurrency_limit: type: integer base_concurrency: type: integer description: Free concurrency limit of the org. purchased_concurrency: type: integer concurrency_purchase_limit: type: integer remaining_purchase_limit: type: integer reserved_inbound_concurrency: type: integer concurrency_burst_enabled: type: boolean concurrency_burst_limit: type: integer Error: type: object properties: error_message: type: string error_type: type: string required: - error_message