Skip to main content
The minimum is two fields:
Everything else has a default. The complete table is on /secure/send — this page is about the ones that matter in practice.

The common fields

Quote the destination

An unquoted number is an integer by the time the parser sees it, so any leading zero is already gone. The gateway cannot recover it, and the message goes to a different number or nowhere.

The four fields that change an outcome

Omitting it uses your login name, which on an enforcing account is usually not approved. So “it worked without from in testing” and “it fails in production” are the same fact seen twice.See Sender IDs.
0 gives you 160 characters. 8 gives you 70. One curly apostrophe in your text forces UCS-2 anyway, so setting coding does not protect you from the cost — normalising your punctuation does.See Encoding and segments.
Not free text. It prices the message against a different product, drawn from an allow list your provider maintains per login — and most logins are allowed none. Naming one you are not allowed is 403.The same allow list governs /secure/rate, so a quote and a send cannot disagree about what you may name.
Minutes the carrier should keep trying. A whole number, not a duration string — an older specification types it as a string, and the gateway refuses that.

Asking for a receipt

Two fields, and both are needed — setting one without the other does nothing:
dlr_level chooses which receipts you get: 1 progress only, 2 the outcome (default), 3 both.
Level 1 alone does not send the outcome. A client asking for 1 and waiting for a final state waits forever. If you want progress and the answer, ask for 3.

Sending binary

hex_content takes the body as hex octets, decoded with the charset for your coding. An odd number of characters is a 400. Send content or hex_content — never both.

Every field

Defaults, refusals, and the advanced parameters.

Batches

Many messages in one call, and scheduling.