fallback_text, which Oliver sends as an SMS when RCS isn’t available.
Messages appear in the practice’s Oliver inbox like any other text, so staff see what was sent and can pick up the client’s reply.
How it works
- Send: POST to
/messageswith arecipient, thefallback_textand thecontent. - Delivery: with
channel: "auto"(the default), Oliver sends RCS when the practice’s RCS sender is live and the client’s phone supports it, andfallback_textas an SMS otherwise. The client gets one or the other, never both. - Status: follow the message through
sent→delivered→read(RCS only) withGET /messages/{id}, or pass acallback_urlto get a status webhook on each change.
An RCS message is either a text bubble or a card, never both. To open with a sentence like “Hi! Millie has preventive care coming due”, put it in the card’s
description.Content types
Sending with cURL
Buttons and suggestions
Calendar and share-location actions aren’t supported by our RCS provider; requests that use them return
400.
Limits
Invalid content returns
400 with every offending field:
Statuses
Statuses only move forward. A message that falls back from RCS to SMS can report a delivery error for the RCS attempt and still end
delivered.
Sending hours
Messages are sent immediately; Oliver doesn’t queue them for later. Send during the practice’s sending hours, 8am to 9pm clinic time, the same window as the practice’s own reminders. Outside them the request returns400 and nothing is sent:
Errors that mean nothing was sent
A
400 stores nothing, so you can fix the request and reuse its reference_id.
Opt-outs
Clients who replied STOP are never texted. The response is200 with status: "suppressed" and no text is sent.
Idempotency
Setreference_id to a unique value per message. Re-sending the same reference_id returns the existing message instead of texting the client again, so retries are safe, including after a 502 or a timeout. reference_id is echoed in every response and webhook.
Rate limits
Each practice is limited to 120 messages per minute. Exceeding the limit returns429 Too Many Requests.
