Send transactional campaign (with template)
Send a transactional campaign message using a predefined template. You can override the template’s content by providing ‘text’, ‘html’, or ‘headers’.
Endpoint
Section titled “Endpoint”HTTP method: POST
https://api.sender.net/v2/message/{id}/send
Parameters
Section titled “Parameters”| Parameter | Type | Description |
|---|---|---|
id | string required | ID of the transactional campaign to send. |
to | object required | Recipient object containing ‘email’ (required) and optional ‘name’. This replaces ‘recipient_email’, which is still supported for backward compatibility. |
variables | object | A key-value list of dynamic variables to personalize the content. |
attachments | object | A list of files to attach, where keys are filenames and values are publicly accessible URLs. |
text | string | Optional plain-text version of the email. Overrides the template’s text content. |
html | string | Optional HTML version of the email. Overrides the template’s HTML content. |
headers | object | Optional headers to include (e.g., custom X- headers or charset). Overrides template headers if provided. |
Request Examples
Section titled “Request Examples”const url = new URL("https://api.sender.net/v2/message/{id}/send");
let headers = { "Authorization": "Bearer [your-token]", "Content-Type": "application/json", "Accept": "application/json",};
let bodyContent = { "to": { "name": "Sender Support" }, "variables": { "firstname": "Sender", "lastname": "Support" }, "attachments": { "FILE_NAME_1": "https://ATTACHMENT_URL/", "FILE_NAME_2": "https://ATTACHMENT_URL/" }, "text": "Hello from Sender", "html": "Hello from <b>Sender</b>.", "headers": { "X-smth-custom": "custom_value_1", "charset": "utf-8" }};
fetch(url, { method: "POST", headers, body: JSON.stringify(bodyContent)}).then(response => response.json()).then(data => console.log(data)).catch(error => console.error('Error:', error));$client = new \GuzzleHttp\Client();
$json = [ "to" => { "name" => "Sender Support" }, "variables" => { "firstname" => "Sender", "lastname" => "Support" }, "attachments" => { "FILE_NAME_1" => "https =>//ATTACHMENT_URL/", "FILE_NAME_2" => "https =>//ATTACHMENT_URL/" }, "text" => "Hello from Sender", "html" => "Hello from <b>Sender</b>.", "headers" => { "X-smth-custom" => "custom_value_1", "charset" => "utf-8" }];
$response = $client->post( 'https://api.sender.net/v2/message/{id}/send', [ 'headers' => [ 'Authorization' => 'Bearer [your-token]', 'Content-Type' => 'application/json', 'Accept' => 'application/json', ], 'json' => $json ]);
$body = $response->getBody()->getContents();$data = json_decode($body, true);print_r($data);import requestsimport json
url = "https://api.sender.net/v2/message/{id}/send"
headers = { "Authorization": "Bearer [your-token]", "Content-Type": "application/json", "Accept": "application/json",}
payload = { "to": { "name": "Sender Support" }, "variables": { "firstname": "Sender", "lastname": "Support" }, "attachments": { "FILE_NAME_1": "https://ATTACHMENT_URL/", "FILE_NAME_2": "https://ATTACHMENT_URL/" }, "text": "Hello from Sender", "html": "Hello from <b>Sender</b>.", "headers": { "X-smth-custom": "custom_value_1", "charset": "utf-8" }}
response = requests.request('POST', url, headers=headers, json=payload)
print(response.json())curl -X POST \"https://api.sender.net/v2/message/{id}/send" \-H "Authorization: Bearer [your-token]" \-H "Content-Type: application/json" \-H "Accept: application/json" \-d '{"to":{"email":"[email protected]","name":"Sender Support"},"variables":{"firstname":"Sender","lastname":"Support"},"attachments":{"FILE_NAME_1":"https://ATTACHMENT_URL/","FILE_NAME_2":"https://ATTACHMENT_URL/"},"text":"Hello from Sender","html":"Hello from <b>Sender</b>.","headers":{"X-smth-custom":"custom_value_1","charset":"utf-8"}}'Response
Section titled “Response”{ "success": true, "message": "Email sent", "emailId": "ep2W4y-7pn8o21-YPpLY9PR5Jy9-x7GYQ"}