Trust & Safety
Every message you send through Sent passes through a multi-layer protection pipeline before it is dispatched to any carrier or provider. This pipeline exists to protect your recipients, your account, and the platform from spam, fraud, and abuse.
None of this requires any configuration on your part. The protections operate automatically on every send request.
What the pipeline checks
Each message is evaluated against a series of independent checks, in order. Apart from account standing, which is enforced when the request arrives, the checks run inside the message pipeline, after the API has accepted your send with 202 Accepted. A message that fails a check is finalized with a terminal status and reason instead of being dispatched. No provider is contacted, and no charges are incurred.
- Account standing: Accounts under review or suspension cannot send messages until the issue is resolved.
- Recipient opt-out: Contacts who have opted out of receiving messages are automatically respected. Sends to opted-out recipients are filtered before dispatch.
- Geographic restrictions: Sending to certain destinations is restricted based on carrier fraud patterns and regulatory requirements. Your account is provisioned for the countries you declared during onboarding.
- Onboarding compliance: Accounts that have not yet completed compliance review are subject to sending limits. Completing verification removes these limits.
- Template approval: Only approved templates may be used for sending. Templates must pass provider review (WhatsApp / TCR) and any applicable platform review before they become active.
- Sender health: WhatsApp sender numbers are checked against their provider health status before each send. Numbers flagged as blocked by the provider will not be used for dispatch.
- Balance: A positive account balance is required before any message is dispatched. If the balance is exhausted, the API still accepts the send and each message is finalized as
BLOCKEDinstead of being dispatched. New sends go through once you top up. - Risk screening: New accounts undergo an automated risk and compliance assessment during onboarding to identify prohibited industries and high-risk patterns before messages are sent at scale.
How this affects your integration
Under normal operating conditions (verified account, positive balance, approved templates, opted-in recipients), you will never encounter these checks. They are invisible.
Only request-shape and account-standing problems are rejected synchronously: an unknown template returns 404, invalid template variables return 400, and send requests from a suspended account are rejected with 403 and code BUSINESS_014. Everything else is decided inside the pipeline after the API accepts the send. A message stopped by a check is finalized with a terminal status and a specific reason code rather than a generic failure. The status appears on GET /v3/messages/{id}, its activities, and message.filtered / message.blocked webhooks:
| Check | Final status | Reason code |
|---|---|---|
| Recipient opt-out or suppression list | FILTERED | ERR_CONSENT_BLOCKED |
| Routing rules, including geographic restrictions | FILTERED | ERR_ROUTE_DENIED |
| Insufficient balance | BLOCKED | ERR_INSUFFICIENT_BALANCE |
| Onboarding sending limit reached (KYC stage) | BLOCKED | ERR_KYC_COMPLETED_QUOTA_EXCEEDED |
| Onboarding sending limit reached (channel-setup stage) | BLOCKED | ERR_CHANNEL_SETUP_COMPLETED_QUOTA_EXCEEDED |
| Template not approved for sending | BLOCKED | ERR_TEMPLATE_NOT_APPROVED_FOR_SENDING |
| Light-onboarding template not published | FAILED | ERR_LOB_TEMPLATE_NOT_PUBLISHED |
| Light-onboarding template daily cap reached | FAILED | ERR_LOB_TEMPLATE_DAILY_CAP_REACHED |
| WhatsApp sender health (WABA not approved) | FAILED | ERR_WABA_DEGRADED |
FILTERED and BLOCKED are policy decisions, not delivery failures, and both are excluded from your deliverability rate. Resending without resolving the underlying issue produces the same outcome. See the Error Catalog for full remediation steps.
Opt-out handling
Sent automatically enforces recipient opt-outs. When a contact replies with a recognized opt-out keyword (such as STOP or UNSUBSCRIBE), their record is updated immediately and all future sends to that number are blocked.
You can also manage opt-out status programmatically through the Contacts API. An attempt to send to an opted-out contact is still accepted by the API; the message is then finalized as FILTERED before any provider is contacted. The contact's preference is always respected.
Geographic availability
Your account is provisioned for specific destination countries based on the information you provide during onboarding. Sending to destinations outside your approved list is blocked to protect against carrier fraud patterns that disproportionately affect certain routes.
If your business legitimately needs to reach a destination that is currently unavailable on your account, contact support@sent.dm.
Completing verification
Accounts that have not yet completed compliance review can send messages up to a limited threshold. Once that threshold is reached, further messages are finalized as BLOCKED and your account team will be notified to assist you in completing the process.
To ensure uninterrupted sending, complete KYC verification, channel setup, and template approval before going live. The account setup guide walks through each step.
Getting help
If you encounter a protection-layer error that you believe is incorrect, or if your account has been suspended in error, contact support@sent.dm with your request ID. Include the full error response. The request ID in the response body allows the support team to trace the exact check that triggered.
API Authentication
Why the Sent API v3 authenticates every request with a single API key sent as a request header, covering the security model, trade-offs, and OAuth comparison.
What is 10DLC?
Why carriers in the United States require 10DLC registration for A2P SMS, how The Campaign Registry reviews brands and campaigns, and where Sent fits in