Submit a ready registration for carrier review (or resubmit after a rejection)
The body must carry fees_acknowledged: true: your acceptance of the registration fee terms (Terms §4.3).
Path Parameters
- idstringrequired
Body Parameters
- fees_acknowledgedtruerequired
Must be true. Confirms the registration fee terms above.
- attestationBusinessAttestation
Signed by someone authorized to act for the business, once per business: that they are authorized, that the details match the business's IRS records, and that the business will text only people who agreed to it and will follow the Messaging Policy. Kept as signed, with the exact wording, who sent it (the API key), the IP address, the user agent and the date of our legal documents.
Details
Carrier registration fees (brand, vetting, the monthly campaign fee) are separate from the per-message rate and billed at twice what the registry or carrier charges us; a campaign is billed for a minimum of 3 months; the fees are non-refundable, including if the registration is rejected. The acknowledgment is recorded on the filed copy with its wording, the time and your IP; without it the request is refused with 400 invalid_request (param fees_acknowledged) and nothing is filed.
The first submit for a business also carries the signed business attestation; without one on file the submit answers 400 attestation_required (param attestation). The submission is then held while our team verifies the business (guidance.next_actor delivered), and filed once it is verified.
Later submits for the same business details need no attestation. A business we could not verify returns the registration as rejected with reason code business_unverified; the next submit is signed again.
Responses
- 200Registration
Registration, status submitted
- 400Error
invalid_request: fees_acknowledged missing or not true (param fees_acknowledged), or a missing business detail or attestation field; attestation_required: the business has no signature on file for these details
- 401Error
Missing, malformed, or revoked API key
- 402Error
Billable live calls only: the prepaid credit balance cannot cover the call (insufficient_credits); nothing was done or charged
- 409Error
invalid_state: not ready (message says what to do)
- 429Error
Rate limit or quota exceeded
Response Fields
- idstring
Example:
reg_a1B2c3D4e5F6. - objectregistration
- statusdraft, checks_failed, ready, submitted, in_review, approved, rejected
- business_namestring
- websitestring
- use_casestring
- opt_in_urlstring
Nullable.
- privacy_urlstring
Nullable.
- terms_urlstring
Nullable.
- support_emailstring
Nullable.
- brandobject
The business details as saved (the brand object of RegistrationInput, including the authorized representative: contact_name, contact_title, contact_email, contact_phone).
- sample_messagesarray of string
The examples as they stand: yours, or starter drafts (see samples_source). These are what a submission files.
- samples_sourcestarter, customer
starter: our drafts, not yet edited or confirmed; the registration cannot be ready. customer: yours.
- descriptionstring
Your own description; null when the generated one (generated.campaign.description) is filed Nullable.
- opt_in_flowstring
Your own account of how people opt in; null when the standard sentence is filed Nullable.
- stop_replystring
Your wording of the opt-out confirmation; null when the standard wording (generated.stop_reply) is filed and sent Nullable.
- help_replystring
Your wording of the HELP reply; null when the standard wording (generated.help_reply) is filed and sent Nullable.
- includes_linksboolean
- includes_phone_numbersboolean
- age_gatedboolean
- direct_lendingboolean
- marketing_pausedobject
Set while marketing from this registration is paused because more than 4% of recipients opted out in 24 hours; our team resumes it. Transactional messages are not paused. Nullable.
- marketing_paused.paused_atstring (date-time)
- marketing_paused.opt_out_ratenumber
Opt-outs divided by messages sent, over the 24 hours that tripped it
- marketing_paused.sentinteger
- marketing_paused.opt_outsinteger
- sample_checkobject
The example-message check. Fixed rules. Recomputed on every read.
- sample_check.passedinteger
- sample_check.failedinteger
- sample_check.warningsinteger
- sample_check.okboolean
- sample_check.findingsarray of SampleFinding
- guidanceobject
The five answers every state gives
- guidance.what_happenedstring
- guidance.whystring
- guidance.next_actoryou, delivered, carriers, nobody
- guidance.next_stepstring
- guidance.afterstring
- checkobject
Nullable.
- check.checked_atstring (date-time)
- check.passedinteger
- check.failedinteger
- check.warningsinteger
- check.urlsobject
- check.findingsarray of Finding
- rejectionobject
Nullable.
- rejection.codestring
- rejection.titlestring
- rejection.explanationstring
- rejection.fixstring
- rejection.notestring
Nullable.
- rejection.related_findingsarray of string
- rejection.rejected_atstring (date-time)
- generatedobject
Deterministic compliant copy and the registry draft
- generated.opt_in_ctastring
- generated.privacy_clausestring
- generated.sms_termsstring
- generated.sample_messagesarray of string
Starter drafts from templates. What is filed is the top-level sample_messages (also in generated.campaign.sample_messages). At most 5 items. At least 2 items.
- generated.help_replystring
- generated.stop_replystring
- generated.opt_in_confirmationstring
- generated.brandobject
- generated.brand.missingarray of string
- generated.campaignobject
- generated.campaign.use_casestring
- generated.campaign.descriptionstring
- generated.campaign.message_flowstring
- generated.campaign.sample_messagesarray of string
- generated.campaign.opt_in_keywordsarray of string
- generated.campaign.opt_in_messagestring
- generated.campaign.opt_out_keywordsarray of string
- generated.campaign.opt_out_messagestring
- generated.campaign.help_keywordsarray of string
- generated.campaign.help_messagestring
- generated.campaign.embedded_linkboolean
- generated.campaign.embedded_phoneboolean
- generated.campaign.number_poolingboolean
- generated.campaign.direct_lendingboolean
- generated.campaign.age_gatedboolean
- generated.campaign.affiliate_marketingboolean
- generated.campaign.privacy_policy_urlstring
- generated.campaign.terms_urlstring
- submissionsinteger
- historyarray of object
- history[].atstring (date-time)
- history[].statusstring
- history[].actorcustomer, delivered, system
- history[].labelstring
- history[].reason_codestring
- history[].notestring
- created_atstring (date-time)
- updated_atstring (date-time)
Errors
Every error has the same JSON shape, and request_id matches the X-Request-Id response header. Errors lists every code and what to do about it.
- 400
invalid_request: fees_acknowledged missing or not true (param fees_acknowledged), or a missing business detail or attestation field; attestation_required: the business has no signature on file for these details
- 401
Missing, malformed, or revoked API key
- 402
Billable live calls only: the prepaid credit balance cannot cover the call (insufficient_credits); nothing was done or charged
- 409
invalid_state: not ready (message says what to do)
- 429
Rate limit or quota exceeded