Create your first Retell AI voice agent and make a test phone call.
retellai-install-auth
import Retell from 'retell-sdk';
const retell = new Retell({ apiKey: process.env.RETELL_API_KEY! });
// Create LLM configuration (what the agent says)
const llm = await retell.llm.create({
model: 'gpt-4o',
general_prompt: `You are a friendly receptionist for Acme Corp.
- Greet callers warmly
- Ask how you can help
- Take messages if needed
- Be concise and professional`,
});
console.log(`LLM created: ${llm.llm_id}`);
const agent = await retell.agent.create({
response_engine: {
type: 'retell-llm',
llm_id: llm.llm_id,
},
voice_id: '11labs-Adrian', // Choose from available voices
agent_name: 'Acme Receptionist',
});
console.log(`Agent created: ${agent.agent_id}`);
// Outbound call (requires a registered phone number)
const call = await retell.call.createPhoneCall({
from_number: '+14155551234', // Your Retell number
to_number: '+14155555678', // Destination
override_agent_id: agent.agent_id,
});
console.log(`Call initiated: ${call.call_id}`);
// Web call (no phone number needed — great for testing)
const webCall = await retell.call.createWebCall({
agent_id: agent.agent_id,
});
console.log(`Web call URL: ${webCall.call_id}`);
// Use retell-client-js-sdk to connect from browser
const callDetail = await retell.call.retrieve(call.call_id);
console.log(`Status: ${callDetail.call_status}`);
console.log(`Duration: ${callDetail.end_timestamp - callDetail.start_timestamp}ms`);
if (callDetail.transcript) {
console.log(`Transcript: ${callDetail.transcript}`);
}
| Error | Cause | Solution |
|---|---|---|
422 Invalid voice_id |
Unknown voice | List available voices in Dashboard |
400 No phone number |
Number not registered | Register number in Dashboard first |
| Call not connecting | Destination unreachable | Try web call for testing |
Configure agent behavior: retellai-core-workflow-a