messageId out, with its own lifecycle — as distinct from an audience send, where the platform resolves a segment and returns a job.type is required and has no default. transactional waives marketing consent, frequency capping and quiet hours; marketing honours them like any other send. Neither waives hard bounces, spamtraps, the account block list or a soft-deleted contact — consent is a legal question, deliverability is a reputation one.GET /messages/{messageId} or delivery webhooks.type: transactional additionally requires the transactional entitlement on the website (422 not_entitled) and is rate-limited separately from campaign volume.templateId (+ variables, + language) OR inline content. Both is a 422.GET /messages/{messageId} once reported, and as a clearly-flagged estimate from /messages/sms/validate. They are deliberately absent from this 201.curl --location '/messages/sms' \
--header 'Authorization: Bearer <token>' \
--header 'Idempotency-Key: 0f3e2b1a-7c4d-4e2a-9b11-2f6d8c1a5e30' \
--header 'Content-Type: application/json' \
--data '{
"type": "transactional",
"basis": "contract_performance",
"to": {
"contactId": "string",
"clientContactId": "string",
"phoneNumber": "string"
},
"from": "string",
"templateId": 0,
"content": "string",
"language": "string",
"variables": {},
"tags": [
"string"
],
"metadata": {},
"sendAt": "string",
"createContact": true,
"retainBody": true,
"event": "string",
"permId": "string"
}'{
"messageId": "string",
"channel": "email",
"type": "transactional",
"basis": "string",
"status": "queued",
"contactId": "string",
"to": "string",
"scheduledFor": "string",
"links": {
"self": "string"
}
}