Follow-up types
A type sets the rhythm of its follow-ups./follow-up-types:
active to false to stop new ones only.
Set a follow-up
POST /follow-ups on a conversation:
If a follow-up of the same type is already scheduled on the conversation, that one is returned instead of a second one.
When follow-ups are sent
- Each follow-up uses the interval and the maximum of the type, or of its override for the sender of the conversation.
- The contact replies: follow-ups stop (
resolved, closed bycustomer_replied). - The maximum is reached without a reply:
exhausted. - A send is refused by the channel: it is not counted as a follow-up and is retried at the next interval; after as many failures as the maximum, the follow-up is
failed(send_failed).failedandlast_errortell you why.
On WhatsApp, outside the 24-hour window, a free text would be refused: the follow-up is sent inside an approved utility template instead, so it still reaches the contact.
Change or stop a follow-up
GET /follow-ups lists follow-ups, the next one first, filterable by status (scheduled, resolved, exhausted, cancelled, failed), conversation_id, type_id and campaign_id. Each follow-up tells who set it (set_by: ai, agent or api), how many were sent, the next scheduled_at, and, once closed, closed_at and closed_by (customer_replied, agent, ai, api, max_followups_reached, expired, cancelled, send_failed).
With campaigns
A campaign can name the follow-up types the agent follows after the send (follow_up_intention_ids), and you can attach a follow-up to a campaign with campaign_id. The campaign report counts the recipients with a follow-up intention, and GET /campaigns/{id}/recipients?filter=read_no_reply lists the contacts worth following up.