<Intro>

<EndpointHeader />

<Description>

Stops a sender's messages to a subscriber, with reason `manual`, blocking every category including transactional. Both ends are required: a suppression covers a sender-and-subscriber pair, so stopping all of your senders means one call per sender.

Adding is idempotent. A `201` means a new suppression was recorded, and a `200` means a `manual` one for that pair was already in place and is returned unchanged. A pair already stopped for another reason, such as the subscriber having texted a stop keyword, still gets its own `manual` record, and messages stay stopped until every one of them has ended.

</Description>

</Intro>

<Payload kind="request">

<Field name="destination" type="string" required>

<Description>

The subscriber to stop messaging, in E.164 format.

</Description>

</Field>

<Field name="originator" type="string" required>

<Description>

The sender to stop. Your other senders keep reaching this subscriber, so stopping every one of them means one call per sender.

</Description>

</Field>

</Payload>

<Payload kind="response">

<Field name="id" type="string" required />

<Field name="destination" type="string" required>

<Description>

The subscriber, in E.164 format.

</Description>

</Field>

<Field name="originator" type="string" required>

<Description>

The sender this stops. A suppression covers one sender, so your other senders still reach this subscriber. Opting out of one of your programmes is not opting out of all of them.

</Description>

</Field>

<Field name="reason" type="string" required />

<Field name="origin" type="string" required />

<Field name="applies_to" type="string" required />

<Field name="blocking" type="boolean" required>

<Description>

Whether this is stopping messages right now. Always true in a list, which carries only the suppressions in force; false when you fetch one by ID that has since ended, which is also when `ended_at` is set.

</Description>

</Field>

<Field name="source_sms_id" type="nullable string">

<Description>

The inbound message the subscriber opted out with, or the outbound message whose delivery report reported the opt-out. Null when neither applies.

</Description>

</Field>

<Field name="effective_at" type="string" required>

<Description>

When the subscriber opted out, as reported by whoever reported it. This is what orders one subscriber's history, and it can be earlier than `created_at` when a message reached us late.

</Description>

</Field>

<Field name="ended_at" type="nullable string">

<Description>

When this stopped applying. Null while it is still stopping messages.

</Description>

</Field>

<Field name="ended_reason" type="nullable string">

<Description>

What ended it. Null while it is still stopping messages.

</Description>

</Field>

<Field name="ended_effective_at" type="nullable string">

<Description>

When the subscriber opted back in, as reported. Null while it is still stopping messages.

</Description>

</Field>

<Field name="source_end_sms_id" type="nullable string">

<Description>

The inbound message the subscriber opted back in with, when there was one. Null while it is still stopping messages, and when something other than a start keyword ended it.

</Description>

</Field>

<Field name="created_at" type="string" required>

<Description>

When we recorded it.

</Description>

</Field>

<Field name="last_asserted_at" type="string" required>

<Description>

When we last recorded the subscriber opting out of this sender. Later than `created_at` when they texted a stop keyword again while already suppressed, which adds no new record but does earn another confirmation reply.

</Description>

</Field>

</Payload>