Skip to content

Content rules

Xash SMS carries service messages. Every message body is checked before send, automatically and synchronously. A rejected message is never billed.

Allowed

Messages a recipient expects because of something they did:

  • OTPs and verification codes
  • Notifications — order shipped, payment received, ticket updated
  • Reminders — appointments, renewals, due dates
  • Transaction confirmations
  • Account updates — password changed, profile updated, plan expiring

Rejected

  • Marketing and promotions, including "specials", discount codes, and sales
  • Political messages
  • Solicitation of any kind
  • Messages to purchased or scraped lists
  • Any campaign the recipient did not sign up for

How the check works

The first time you send a new message template, an AI classifier reads it and stores a verdict. Repeats of the same template (an OTP with a different code, a reminder with a different date) reuse the stored verdict instantly, so steady-state sending adds no latency.

A rejection comes back as 422 MESSAGE_REJECTED with the category and a one-line reason:

json
{
  "error": {
    "code": "MESSAGE_REJECTED",
    "message": "Promotional offer.",
    "docs_url": "https://docs.sms.xash.network/errors#message_rejected",
    "category": "marketing",
    "reason": "Promotional offer."
  }
}

If the classifier cannot be reached for a brand-new template, the send is refused with 503 MODERATION_UNAVAILABLE. That error is retryable. Templates with a stored allow keep sending regardless.

Wrongly rejected?

Classifiers make mistakes. If a legitimate service message is rejected, contact support with the message text; a reviewer can approve the template permanently, and the approval outranks the AI.

Repeated rejections flag your account for review and can lead to suspension. The same rules appear at signup, on the dashboard, and in every rejection response, so nobody trips them by accident.