Skip to main content
A campaign can be run entirely from your system (a CRM, a lead database) and report each person’s outcome back to it, filed under your own ids.

1. Create it, with somewhere to send results

result_callback_url needs your organisation’s callback secret to exist, because results are signed with it.

2. Load people, with your ids and data

  • A number FireTone doesn’t know becomes a new contact.
  • variables are the call’s own:
    • {{plan}} in the message or in the campaign’s workflow;
    • what an AI agent knows about the person;
    • and they come back with the result.
  • Do-not-call contacts are loaded as suppressed and never rung.
  • Up to 10,000 items per request. Send more in batches, each with its own Idempotency-Key.

3. Start, pause, resume, stop

  • Wrong status: 409 wrong_status, naming the status the campaign must be in.
  • Can’t run: 422 not_ready, saying why (for example, no message or nobody left to call).

4. Results

A contact’s outcome is final when nothing more will be done. Either the call reached an end, or every attempt was used. Each final outcome is sent once, as campaign.contact.completed, to result_callback_url and to any webhook subscribed to it:
disposition gives the exact result. An agent’s disposition form answers arrive as disposition_answers, and for an AI agent the conversation summary.
  • When nobody is left to call, the campaign completes and sends campaign.completed with the totals by outcome and by disposition.
  • Missed a callback? GET /campaigns/{id}/results pages through the same results, filtered by outcome, disposition, reference or since.