PUT /sms/drafts/{draftId}
Save a draft
| Scope | sms:write |
| Cost | Free |
PUT, because you name the resource: the request is idempotent and safe
to send on a keystroke timer, where two saves racing is the normal case
rather than an edge case.
An empty message is legal — it is how you store "the user cleared the
box" without deleting the draft.
Path parameters
| Name | Type | Required | Example | Description |
|---|---|---|---|---|
draftId | string | yes | 12125550188:13475550123 | The key you chose for this draft. At most 128 characters. |
Request body
| Field | Type | Required | Description |
|---|---|---|---|
message | string | yes | The unsent text. An empty string is legal — it stores "the user cleared the box" without deleting the draft. |
{
"message": "Hi Dana — checking in about"
}
Responses
200
The saved draft.
| Field | Type | Description |
|---|---|---|
draftId | string | The key YOU chose, not one this API minted. |
message | string |
Errors
| Status | Meaning |
|---|---|
400 | invalid_request — a missing or malformed field, an unknown enum value, or an unknown field in the body. Nothing was charged. |
401 | unauthenticated — no credential, or one that is invalid, revoked or expired. The WWW-Authenticate header names the scope the endpoint wanted. |
403 | Two different failures share this status, and the type tells them apart: |
500 | internal_error — something failed on our side. For a send, nothing was charged, guaranteed, which is what makes a retry safe. |
See Errors for the full catalog and what to do about each.
Example
curl -X PUT 'https://api.account.telebroad.com/api/public/v1/sms/drafts/12125550188:13475550123' \
-H "Authorization: Bearer $TB_KEY" \
-H 'Content-Type: application/json' \
-d '{"message":"Hi Dana — checking in about"}'