Email
Marketing
SMS
- List SMS GET
- Send an SMS POST
- List suppressed numbers GET
- Add a number to the SMS suppression list POST
- Check whether a number is suppressed GET
- Retrieve an SMS suppression GET
- Remove a number from the SMS suppression list DELETE
- List received SMS GET
- Retrieve a received SMS GET
- List the organization's phone numbers GET
- Retrieve an SMS GET
- List an SMS's events GET
- Cancel a scheduled SMS POST
Hooks
Risk
Platform
Add a number to the SMS suppression list
POST
/v1/sms/suppressions
Later sends from the API key's environment to the number are skipped. Adding a number already on the list returns its entry with status 200.
bearerAuthheader
AuthorizationBearer <token>A secret API key from the dashboard: coss_live_… for production environments, coss_test_… for sandbox environments.
Coss-Version?"2026-10-10"The API version (a date) to use for this request. Defaults to your organization's version, pinned to the latest one when it first used the API and upgraded from the dashboard. The SDK always sends the version it was built for.
Value in
"2026-10-10"application/json- body
- body
- …
phone_number*stringMatch
^\+[1-9]\d{6,14}$The number already had an entry.
application/json- response
- response
- …
object*"sms_suppression"Value in
"sms_suppression"id*stringphone_number*stringreason*stringopt_out: the number replied STOP (or the carrier says it opted out). invalid_number: not a number that can receive SMS. manual: added by you.
Value in
"opt_out""manual""invalid_number"sms_id*|The message whose failure added it, if any.
created_at*stringFormat
date-timeimport { Coss } from "coss";const coss = new Coss({ apiKey: process.env.COSS_API_KEY, baseUrl: "https://api.coss.com",});const { data, error } = await coss.sms.suppressions.add({ phone_number: "+14155550199",});{ "object": "sms_suppression", "id": "smssup_01k7c8m4q2f3e9v6t5r1n0p8yz", "phone_number": "+14155550199", "reason": "opt_out", "sms_id": null, "created_at": "2026-11-10T12:05:00.000Z"}