Docs

Docs / Guides / Texting and consent

Texting and consent

SignSealer sends texts on your behalf, from your business's own toll-free or local number, registered with the carriers under your name, and every text names your business. Texting from your own number is coming soon. 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.

Watch it done: Text the link instead (2:43)

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 seven 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 seven 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".
Consent is not a condition of purchaseNobody may be made to agree to texts to buy something.
Their number is not shared or sold for marketingSaid as a promise: "we will not share or sell", "never sold".
Where the terms and the privacy policy areBoth, because a disclosure that links one is the half a reviewer asks about.

Wording that passes. It is not short, and that is the trade: every sentence in it is one a carrier checks for, and a disclosure missing any of them is refused when you try to record it (00327).

I agree to receive text messages from [Your business name] via Sign Sealer
about documents I need to read and sign: the signing link, at most one
reminder if I have not signed, and a confirmation when everyone has signed.
Message frequency may vary. Message and data rates may apply. Consent is not
a condition of purchase. We will not share or sell your mobile information
with third parties for promotional or marketing purposes. Reply HELP for
help. Reply STOP to opt out. Terms: https://signsealer.com/legal/terms
Privacy: https://signsealer.com/legal/privacy-policy

Name your own business where the placeholder is. The recipient has to be able to tell who is texting them, and "a platform they have never heard of" is not an answer a carrier accepts.

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": "I agree to receive text messages from Harbour Rentals via Sign Sealer about documents I need to read and sign: the signing link, at most one reminder if I have not signed, and a confirmation when everyone has signed. Message frequency may vary. Message and data rates may apply. Consent is not a condition of purchase. We will not share or sell your mobile information with third parties for promotional or marketing purposes. Reply HELP for help. Reply STOP to opt out. Terms: https://signsealer.com/legal/terms Privacy: https://signsealer.com/legal/privacy-policy"
}

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.

A consent on its own sends nothing. Put the number on the signer, beside the address or instead of it:

POST /v1/documents/{id}/send
{ "signers": [
    { "full_name": "Dana Reyes", "email": "dana@example.signsealer.com", "phone": "+16155550142" },
    { "full_name": "Sam Ortiz", "phone": "+16155550188" }
  ] }

Dana gets the same link twice, by mail and by text, because a person who does not check one inbox checks the other. Sam gets it once, by text, and their email comes back null in the answer.

The text goes only where may_text is true for signing.link. Where it is not, the send is not refused: the email still goes, and the reason the text did not is on the document's evidence trail as signing.link.not_texted. A signer with no email and no textable number is a different matter and is refused by name, before anything is minted — there is nowhere for their link to go.

From then on the number carries: the reminder and the completion note follow the road the link took, each under its own consent. The wording promises at most one reminder, and the engine keeps it: a signer is texted one reminder over the life of their link, whoever asks for it and however often, and every reminder after that goes by email alone — or, for a signer with no email address, is refused with 422 saying why (Limits and paging).

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 10 agreements a month.

Get an API key