Documentation menu

Texting and consent

SignSealer sends texts on your behalf, from numbers registered to your business. The carriers hold you to what the person agreed to, and they ask for the exact wording. This page is what to collect and how to hand it over.

Why a text goes nowhere without this

The engine will not text a number it has no consent for. That is not a policy on a page — it is a check in the database, and a send to a number with no consent is recorded suppressed, not queued.

If you collect phone numbers on your own booking form, order page or at a counter, SignSealer never saw the person tick the box. Until you tell it, it assumes nothing, and every text you expect to go will not go. Send the consent once, when you take the number.

The four things the wording has to say

Send the exact words that were in front of the person — not a summary, not a description. It is kept verbatim, because it is what a carrier asks for when they audit your traffic. It must carry all four of these, and a disclosure missing any is refused with 422 naming which:

WhatWhy
STOP opts outThe one instruction every recipient must have.
HELP gets helpRequired alongside it, and as often forgotten.
Message and data rates may applyThe cost is theirs, and they have to know.
Message frequency"Frequency varies", or a number — "up to 4 msgs/month".

Wording that passes, and is short enough to sit beside a phone field:

Tick to get your paperwork by text. Message frequency varies.
Message and data rates may apply. Reply HELP for help, STOP to opt out.

The tick box must be the person's own act. A pre-ticked box, a checkbox bundled with your terms of service, or consent as a condition of booking are all things a carrier will take your numbers away for.

Recording it

POST /v1/sms-consents
{
  "phone": "(615) 555-0142",
  "obtained_via": "booking form, checkbox beside the phone field",
  "wording": "Tick to get your paperwork by text. Message frequency varies. Message and data rates may apply. Reply HELP for help, STOP to opt out."
}

One call covers all three things we would text about — the signing link, a reminder, and the confirmation — because somebody who agreed to those agreed to all three. It answers with the number in E.164 and the purposes recorded:

{ "phone": "+16155550142",
  "purposes": ["signing.link", "signing.reminder", "signing.completed"] }

obtained_via is for you, later. "Booking form" is enough; "the checkbox beside the phone field on /book" is what you will want when somebody asks in eighteen months.

Asking before you ask again

GET /v1/sms-consents?phone=%2B16155550142
{ "phone": "+16155550142", "may_text": true, "why_not": null,
  "obtained_via": "booking form, checkbox beside the phone field",
  "obtained_at": "2026-10-03T14:22:09Z" }

Use it to decide whether to put the tick box in front of a returning customer again. It answers for one number at a time and deliberately will not list every number you hold.

may_text is what the engine will actually do, not what one of its checks says. Consent has to be live and the number must not be suppressed — a disconnected phone keeps its consent and still cannot be reached. When it is false, why_not tells you which:

why_notWhat happenedWhat to do
no_consentNobody ever recorded one.Ask, and record it.
revokedThey replied STOP.Nothing. It is theirs to undo.
suppressedThe number could not be reached — disconnected, or a landline.Check the number with them; email in the meantime.

STOP is theirs, not yours

When somebody replies STOP, the consent is revoked, not merely suppressed — and you cannot re-consent them by calling this endpoint again. They have to opt in themselves. A door that let a business overwrite a withdrawal would make the whole record worthless, since the business is not who withdrew it.

A number is one person however it is written. (615) 555-0142, 615-555-0142 and +1 615 555 0142 are the same consent and the same STOP, so you can send numbers in whatever shape your database holds them.

What we never do

SignSealer does not send marketing texts. The only purposes that exist are the signing link, one reminder, and the confirmation; a request for anything else is refused by the engine rather than by a policy. That is worth saying to your own customers, because it is the reason this consent is narrow enough to be easy to collect.

Numbers you already hold, with no consent recorded, are visible under Texting in the portal — including every text that did not go and why.

Ready to build? An API key takes a minute in the portal, and the free plan covers the first 25 agreements a month.

Get an API key