---
title: "Send a Single SMS"
description: "Send one SMS message to a single recipient."
---

# Send a Single SMS

Bulkit provides a dedicated single-send SMS endpoint for transactional alerts and OTPs, as well as single-recipient dispatch via the bulk endpoint.

## Primary Endpoint: Single SMS

```http
POST /api/v2/messages/sms
```

Send a single SMS using `mobile` as a single phone string.

### Authorization

Pass your API token using the standard HTTP `Authorization` header:

```http
Authorization: Bearer bk_live_8n6JQv3K1h9Lp0Md
```

### Request body

```json
{
  "sender": "BULK_IT",
  "mobile": "254700000001",
  "message": "Welcome to Bulkit. Your OTP is 584920."
}
```

<Note>
**Sender Name**: Supply your sender ID name directly via `"sender": "BULK_IT"` (or your custom brand). For backward compatibility, `"sender_id"` with your UUID or legacy integer ID is also accepted.
</Note>

### Scheduled Single SMS

To schedule delivery for a specific time, supply `scheduled_at` in ISO 8601 format:

```json
{
  "sender": "BULK_IT",
  "mobile": "254700000001",
  "message": "Your appointment is tomorrow at 9:00 AM.",
  "scheduled_at": "2026-03-10T08:00:00+03:00"
}
```

### Success Response

```json
{
  "status": "success",
  "message": "SMS queued successfully",
  "data": {
    "id": "c1f72a6b-8b5d-4f76-92f5-b3c1d94f2910",
    "cost": 0.40,
    "units": 1
  }
}
```

---

## Alternative: Single Send via Bulk Endpoint

You can also send a single message using the bulk route with one number in `mobiles`:

```http
POST /api/v2/messages/sms/bulk
```

### Request body

```json
{
  "sender": "BULK_IT",
  "mobiles": ["254700000001"],
  "message": "Welcome to Bulkit."
}
```

### Success response

```json
{
  "status": "success",
  "message": "Bulk SMS processed",
  "data": {
    "requested": 1,
    "queued": 1,
    "failed": []
  }
}
```

## Error Response

```json
{
  "status": "error",
  "message": "Invalid sender ID"
}
```

## Common Errors

- `Invalid credentials`
- `Insufficient balance`
- `Invalid number`
- `Invalid sender ID`
- `Invalid message`
- `Restricted send time`
