Logo
Search
API Docs

Scheduling Outbound Calls

Outbound Calling

Scheduling Future Outbound Calls

Overview

Creating a Single Outbound Call via API covers placing an immediate one-off call, and Outbound Campaigns covers the Dashboard-managed, CSV-driven way to run a large recipient list. This page covers a capability layered on top of both: scheduling a call (or a batch of calls) to go out at a future time instead of immediately, using the schedulePlan parameter on the /call endpoint.


The schedulePlan Parameter

Add a schedulePlan object to your /call request body to schedule it for a future time instead of dialing immediately:

FieldRequiredDescription
earliestAtYesISO 8601 date-time string — the earliest time the core system will attempt to place the call
latestAtNoISO 8601 date-time string — the latest time the core system will attempt to place the call
{
  "assistantId": "assistant-id",
  "phoneNumberId": "phone-number-id",
  "customer": {
    "number": "+11231231234"
  },
  "schedulePlan": {
    "earliestAt": "2026-08-15T14:00:00Z"
  }
}

assistantId vs. a Transient assistant: Live vs. Static Version

This is the detail most worth understanding before you schedule anything: when you schedule a call, the platform saves references to the Assistant, Phone Number, and Customer Number resources at the time you make the request, but it refetches them at the actual time the call goes out, not when you scheduled it.

  • Using assistantId (a reference to a saved assistant): the scheduled call will pick up the most current version of that assistant at the moment it's actually placed — including any edits made after you scheduled it. If the saved assistant is deleted before the scheduled time arrives, the call will fail.
  • Using a transient assistant object (a full assistant configuration passed inline in the request, instead of assistantId): this locks in a static, point-in-time version of the assistant configuration. Later edits to any saved assistant have no effect on it, since the full configuration was captured at scheduling time.

Choose assistantId when you want scheduled calls to always reflect your latest assistant configuration (for example, a system prompt fix should apply retroactively to everything still queued). Choose a transient assistant object when you need the scheduled call to run with exactly the configuration you had in mind when you scheduled it, regardless of what happens to your saved assistants afterward.


Scheduling a Batch with the customers Array

schedulePlan can be combined with the customers array to schedule a whole batch of calls for the same future time in a single request:

{
  "assistantId": "assistant-id",
  "phoneNumberId": "phone-number-id",
  "customers": [
    { "number": "+11231231234" },
    { "number": "+12342342345" }
  ],
  "schedulePlan": {
    "earliestAt": "2026-08-15T14:00:00Z"
  }
}

Every call in the batch shares the same schedulePlan window and the same assistantId/assistant resolution behavior described above — if you used assistantId, every call in the batch picks up the assistant's most current version at its scheduled time.

In summary: schedulePlan.earliestAt (required) and latestAt (optional) let you delay a call to a future time window instead of dialing immediately; the platform refetches your referenced resources at call time, so assistantId tracks live edits (and fails if deleted) while a transient assistant object locks in a static snapshot; and pairing schedulePlan with the customers array lets you schedule an entire batch in one request.