Opt-outs you can see

  • recipient_opted_out: a send to an opted-out number now answers 403 with its own code (it was the generic forbidden) and says when and how the person opted out, in the message and as opted_out_at, opted_out_via and opted_out_method. failure.code is still opted_out. If you matched on forbidden for this case, match the new code.
  • message.blocked: every refused send emits an event and webhook, is noted in the number's consent history, and is counted on GET /v1/consent/{phone} (blocked_sends, last_blocked_at).
  • message.help_requested: emitted when a recipient texts HELP.
  • Replies in your name: STOP, START and HELP replies now name your business, and a registered number sends exactly the replies its registration filed, with your support contact. They used to name Delivered.
  • START is confirmed: someone who was opted out gets one "you are resubscribed" reply. A repeat STOP no longer sends a second confirmation.
  • consent.get() is also available as contacts.consent(phone) in the Node and Python SDKs.
  • The suppression list fails closed: if it cannot be read, a send answers 503 with Retry-After instead of going out unchecked.

All changes