---
title: "Send an SMS through one eSIM"
method: POST
path: "/numbers/esims/{id}/messages"
tags: ["Messages", "Esims"]
---

# Send an SMS through one eSIM

`POST /numbers/esims/{id}/messages`

## Path parameters

- `id` string, uuid, required

## Request body

- SendEsimMessageInput
  - `to` string, required — Recipient phone number — normalized to E.164 (spaces/dashes/dots stripped); rejected with 400 if it doesn't validate as E.164 afterward.
  - `body` string, required — SMS body text (max 320 chars — smaller than the admin tier's cap; see the schema's own doc comment for why)
  - `clientRequestId` string — Client-supplied idempotency key, scoped to (owner, esimId, key). Replaying the same key + identical payload returns the original send; the same key with a DIFFERENT payload is a 409 conflict.
  - `deliveryReport` boolean — Wait for physedge to confirm carrier delivery before completing the send (adds executor-side latency, never on this request — sends are always async/202). Defaults to false for the public tier (opt-in, unlike the admin tier's default-true).

## Response `202`

Outbound message queued

- object
  - `data` PublicMessageRow, required
    - `id` string, uuid, required
    - `esimId` string, uuid, nullable, required
    - `direction` 'inbound' | 'outbound', required
    - `status` 'received' | 'queued' | 'claimed' | 'sending' | 'sent' | 'sent_unconfirmed' | 'delivered' | 'failed', required
    - `peerNumber` string, nullable, required
    - `peerKey` string, nullable, required
    - `body` string, nullable, required
    - `deliveryStatus` string, nullable, required
    - `detectedSender` string, nullable, required
    - `providerCode` string, nullable, required
    - `occurredAt` string, date-time, required
    - `createdAt` string, date-time, required

## Other responses

- `400` — Bad Request
- `401` — Unauthorized
- `403` — Forbidden
- `404` — Not Found
- `409` — Conflict
- `429` — Too many requests
- `500` — Internal Server Error
- `503` — Service Unavailable — esims are disabled for this deployment (see `reason`)

---

[API](https://skmtc.dev/droidrun/apis/droidrun-cloud.md) · [All operations](https://skmtc.dev/droidrun/apis/droidrun-cloud/llms.txt) · [OpenAPI document](https://skmtc-service-production.skmtc.workers.dev/v1/apis/droidrun/droidrun-cloud/revisions/a1453ac769d4/schema)
