variables against the ones the template references. Nothing is sent and no message record is created.variables.missing is the value here: template-variable typos are the most common transactional integration bug.type: marketing it answers "would this actually go out?" before you send. With type: transactional it reports consent.required=false and shows you exactly which check you are exempting yourself from.curl --location '/messages/email/validate' \
--header 'Authorization: Bearer <token>' \
--header 'Content-Type: application/json' \
--data '{
"type": "transactional",
"basis": "contract_performance",
"to": {
"contactId": "string",
"clientContactId": "string",
"email": "string",
"name": "string"
},
"cc": [
{
"email": "string",
"name": "string"
}
],
"bcc": [
{
"email": "string",
"name": "string"
}
],
"from": {
"email": "string",
"name": "string"
},
"replyTo": {
"email": "string",
"name": "string"
},
"templateId": 0,
"subject": "string",
"htmlContent": "string",
"textContent": "string",
"language": "string",
"variables": {},
"attachments": [
{
"name": "string",
"content": "string",
"url": "string"
}
],
"headers": {},
"tracking": {
"opens": true,
"clicks": true
},
"tags": [
"string"
],
"metadata": {},
"sendAt": "string",
"createContact": true,
"retainBody": true,
"event": "string",
"permId": "string"
}'{
"channel": "email",
"type": "transactional",
"recipient": {
"contactId": "string",
"resolved": "string",
"deliverable": true
},
"suppression": {
"suppressed": true,
"reason": "string"
},
"consent": {
"required": true,
"granted": true,
"lists": [
"string"
]
},
"sender": {
"from": "string",
"verified": true,
"domainId": 0
},
"template": {
"templateId": 0,
"language": "string",
"resolved": true
},
"variables": {
"missing": [
"string"
],
"unused": [
"string"
]
}
}