Quickstart
This walks through the whole outbound flow in test mode: nobody is phoned and nothing is billed.
1. Get a test key and install the CLI
In the console open Numbers and developers → API keys and create a key in test mode. Then:
npm install -g https://api.allerto.cloud/cli/allerto-cli.tgz
allerto login # paste the alt_test_… key
allerto whoami # Your account · TEST
Prefer HTTP? Every step below shows the equivalent request.
2. Write an agent
Save this as reminder.json:
{
"type": "outbound",
"name": "Payment reminder",
"persona": "Giulia",
"language": "en",
"opening": "Hello, this is Giulia, the virtual assistant of Example Ltd. Am I speaking with {{name}}?",
"instructions": "Remind them that the {{month}} instalment of {{amount}} euros is still open and ask when they expect to pay.",
"inputs": [
{ "key": "name", "label": "Name", "type": "text", "required": true },
{ "key": "amount", "label": "Amount", "type": "number", "required": true },
{ "key": "month", "label": "Month", "type": "text", "required": true }
],
"result": [
{
"key": "answer",
"label": "Answer",
"type": "select",
"required": true,
"options": ["will_pay", "disputes", "already_paid"]
},
{
"key": "pay_by",
"label": "Promised date",
"type": "date",
"when": { "field": "answer", "equals": "will_pay" }
}
],
"delivery": { "mode": "webhook", "url": "https://your-app.example/allerto" }
}
allerto agents validate reminder.json
allerto webhook-secret rotate # once per account; store the secret
allerto agents push reminder.json --publish
POST /v1/agents {"config": { …reminder.json… }}
POST /v1/webhook-secret
POST /v1/agents/{id}/publish {"revision": 1}
push writes the new id and revision back into the file, so the next push updates the same agent.
3. Preview what it will say
allerto agents preview <agent-id> --input name="Luca Galli" --input amount=250 --input month=January
You get the first sentence and the full prompt, including the platform rules. No call is placed.
4. Place a test call
allerto calls create --agent <agent-id> --to +390000000001 \
--input name="Luca Galli" --input amount=250 --input month=January \
--ref invoice-42 --wait
POST /v1/calls
Idempotency-Key: invoice-42
{"agent": "<agent-id>", "to": "+390000000001", "reference": "invoice-42",
"inputs": {"name": "Luca Galli", "amount": 250, "month": "January"}}
+390000000001 always completes. Try …02 (no answer), …05 (callback requested) or …06 (do not call): see Test mode.
5. Receive the result
Your webhook receives one call.completed event, signed with your secret:
{
"type": "call.completed",
"livemode": false,
"call": {
"id": "…",
"direction": "outbound",
"reference": "invoice-42",
"outcome": "completed",
"result": {
"data": { "answer": "will_pay", "pay_by": "2026-10-05" },
"issues": [],
"summary": "Simulated call (test mode)."
}
}
}
Verify the signature as shown in Webhooks. No webhook yet? allerto calls get <id> or GET /v1/calls/{id} return the same object.
6. Go live
Create a live key, check the agent's calling.hours, and call real numbers. Live calls use one of your account's numbers as caller ID and respect the calling window, the do-not-call list and the daily cap automatically.