- Outbound appointment reminders, follow-ups, and renewal calls.
- After-hours callbacks scheduled by an inbound assistant.
- Automated SMS confirmations queued from a workflow.
- Re-attempting a missed call on a configurable interval until it connects.
How it works
Each scheduled event flows through a small state machine:pending— the event has been created and is waiting for its scheduled time.in_progress— the executor has dispatched the call or SMS to Telnyx.completed— the recipient was reached (call answered and ended normally, or SMS delivered).failed— the event could not be completed and no further attempts will be made.
CallStatus returned by Telnyx decides whether the event is treated as a success or a retryable failure:
If retries are configured and budget remains, the event is re-queued with an updated
scheduled_at_fixed_datetime and returned to pending. If the budget is exhausted, the event is marked failed.
Configuring retries for external failures
Two fields on the create-event request control the retry policy for recipient-side outcomes (busy, no-answer, failed, canceled).Retries are phone-call only. Setting either field on an SMS event is rejected with a 400.
Validation rules
retry_interval_secsmust be in the range60–86400(1 minute to 24 hours).max_retries_client_errorsmust be in the range0–10.- If
max_retries_client_errors > 0,retry_interval_secsmust also be set. retry_interval_secsis only meaningful whenmax_retries_client_errors > 0— supplying one without the other returns a 400.- Both fields must be omitted (or
0/null) forsms_chatevents.
How retries are scheduled
When a phone-call event finishes with a retryableCallStatus and budget remains:
- A new
CallAttemptrecord is appended to the event’scall_attemptsarray. scheduled_at_fixed_datetimeis advanced to now +retry_interval_secs(not the original time + interval — the clock starts when the previous attempt’s terminal status is received).statusreturns topendingand the executor will pick the event up again on its next sweep.
status becomes failed, and an errors entry explains that the client-error retry budget was exhausted.
Total attempts
max_retries_client_errors counts retries on top of the initial dispatch. So:
max_retries_client_errors: 0→ 1 total attempt (no retries).max_retries_client_errors: 3→ up to 4 total attempts.max_retries_client_errors: 10→ up to 11 total attempts.
Inspecting attempt history
Each phone-call event exposes acall_attempts array containing one entry per terminal dispatch:
API reference
All endpoints are scoped to a specific assistant.Create-event fields
Examples
Schedule a phone call with retries on busy / no-answer
This event will be tried up to four times total (initial + 3 retries), with a five-minute gap between attempts.Schedule a phone call without retries
Omit the retry fields (or setmax_retries_client_errors to 0) for a single-attempt call.
Schedule an SMS
Retry fields do not apply to SMS events.Inspect retry history
status, call_attempts, and (once retries finish) the final call_status and errors array.
Cancel a pending event
Deleting apending event prevents any further dispatches. Deletion has no effect on attempts that have already completed.
Choosing a retry policy
A few rules of thumb when picking values:- Short intervals (60–300s) suit time-sensitive flows where the recipient is likely to be near their phone — verification calls, urgent reminders. They burn the retry budget quickly, which is sometimes what you want.
- Medium intervals (5–30 minutes) are a good default for outreach campaigns. Long enough that a busy recipient may finish their previous call; short enough that the event still completes within an hour.
- Long intervals (1–24 hours) match daily-cadence flows: missed bill reminders, callback queues, abandoned-cart nudges.
- Total reach time =
max_retries_client_errors × retry_interval_secs. Make sure that span fits inside the time window when calling is acceptable for your use case (and your jurisdiction’s calling-hour rules). - Higher
max_retries_client_errorsis not always better — at some point the recipient is unlikely to answer regardless of how many times you try. Three to five retries is usually plenty.
Related resources
- Voice AI Assistant API Reference — Full assistant configuration.
- No-Code Voice Assistant — Get started with Voice AI Assistants in the Portal.
- Dynamic Variables — Pass per-event context into the assistant prompt.
- Voicemail Detection on Transfer — Handle voicemail on transferred calls (a separate but related feature for live calls).