# POST /sms/send

**Resource:** [SMS](./sms.md)  
**Scopes:** `sms:send`  
**Write operation:** yes

Send an SMS message. If the recipient contact has sms_unsubscribed: true the send is silently suppressed and a 200 response is returned with status: "suppressed". The message is NOT delivered and does NOT appear in the conversation thread. To audit opted-out contacts use GET /contacts?sms_unsubscribed=true.

## Parameters

| Name | In | Type | Required | Description |
|------|----|------|----------|-------------|
| `to_number` | body | string | yes | Recipient phone number in E.164 format (e.g. +61412345678) |
| `message` | body | string | yes | SMS message body |
| `phone_number_id` | body | uuid | no | Sender phone number ID. Uses company default if omitted. |

## Response example

```json
// Normal send
{
  "data": {
    "id": "msg-uuid-...",
    "status": "sent",
    "to_number": "+61412345678",
    "message": "Hello from TrustPager"
  },
  "meta": { "credits_remaining": 9490 }
}

// Suppressed send (contact has sms_unsubscribed: true)
{
  "data": {
    "status": "suppressed",
    "suppressed": true,
    "contact_id": "contact-uuid-...",
    "reason": "sms_unsubscribed"
  },
  "meta": { "credits_remaining": 9490 }
}
```

---
Base URL: `https://api.trustpager.com/functions/v1/api/v1` — Auth: `Authorization: Bearer YOUR_API_KEY`