Send a transactional message
Sends a transactional email: the referenced template is rendered with the contact’s stored attributes merged with variables (request values win) and queued for delivery through the account’s email server. Delivery is asynchronous, and the recipient contact is auto-created if unknown. A suppressed recipient still returns 200: status bounce_blocked for a hard-bounced address, complaint_blocked for one that reported an earlier message as spam. The message is recorded but never delivered.
/v2/ accounts/ {accountId}/ messagesPath parameters
accountIdstringrequired
The account the request is scoped to.
Request body
Transactional send request. variables are merged over the contact’s stored attributes for template rendering (request values win).
rcptstring (email)required
Recipient email; the contact is auto-created if unknown.
templateSlugstringrequired
Slug of the email template to render - shown on the template’s edit screen.
variablesobjectoptional
Key-value pairs for template variables; they override the contact’s stored attributes for this send.
attachmentsarray of objectsoptional
Up to 10 attachments, base64-encoded.
filenamestringrequired
File name the recipient’s email client shows.
contentstringoptional
Base64-encoded body.
Response
The created message (lean view - the rendered content is not echoed back).
Errors
400
The request body or parameters failed validation.
401
Missing or invalid token, or the token is not authorized for this account/user.
402
The account is over its plan’s send limit.
404
The requested resource does not exist.
See Errors and rate limits for what error responses look like.
curl --location --request POST 'https://api.sendstreak.com/v2/accounts/YOUR_ACCOUNT_ID/messages' \
--header 'Authorization: Bearer YOUR_API_TOKEN' \
--header 'Content-Type: application/json' \
--data-raw '{
"rcpt": "[email protected]",
"templateSlug": "sign-up-thank-you",
"variables": {
"planId": "professional",
"country": "Germany"
},
"attachments": [
{
"filename": "hello.txt",
"content": "SGVsbG8gV29ybGQhCgo="
}
]
}'
const res = await fetch('https://api.sendstreak.com/v2/accounts/YOUR_ACCOUNT_ID/messages', {
method: 'POST',
headers: {
Authorization: `Bearer ${process.env.SENDSTREAK_TOKEN}`,
'Content-Type': 'application/json'
},
body: JSON.stringify({
"rcpt": "[email protected]",
"templateSlug": "sign-up-thank-you",
"variables": {
"planId": "professional",
"country": "Germany"
},
"attachments": [
{
"filename": "hello.txt",
"content": "SGVsbG8gV29ybGQhCgo="
}
]
})
});
import os, requests
res = requests.post(
'https://api.sendstreak.com/v2/accounts/YOUR_ACCOUNT_ID/messages',
headers={'Authorization': f"Bearer {os.environ['SENDSTREAK_TOKEN']}"},
json={
"rcpt": "[email protected]",
"templateSlug": "sign-up-thank-you",
"variables": {
"planId": "professional",
"country": "Germany"
},
"attachments": [
{
"filename": "hello.txt",
"content": "SGVsbG8gV29ybGQhCgo="
}
]
},
)
{
"_id": "665f0a2b1c9d440012ab34cd",
"createDate": "2026-07-07T09:30:00.000Z",
"parentType": "transactional",
"rcpt": "[email protected]",
"status": "queued",
"subject": "Welcome to Acme!",
"templateSlug": "sign-up-thank-you"
}