Merge tags & variables
wemail uses Mustache-style merge tags.
wemail uses Mustache-style merge tags. Pass values via vars on a send, or per-recipient vars in a batch.
Syntax
| Parameter | Type | Required | Description |
|---|---|---|---|
{{var}} | basic substitution | Optional | Replaces with the string value. |
{{#if var}} … {{/if}} | conditional | Optional | Renders only if var is truthy. |
{{#each items}} … {{/each}} | loop | Optional | Iterate over an array. |
{{var | upper}} | filter | Optional | Built-in filters: upper, lower, currency, date. |
Code examples
cURL
curl -X POST https://api.wemail.io/v3/messages \
-H "Authorization: Bearer afn_live_pK7…b9aF" \
-H "Content-Type: application/json" \
-d '{
"from": "noreply@updates.acme.io",
"to": ["alex@example.com"],
"subject": "Hi {{first_name}}, your balance is {{balance}}",
"html": "<p>Hi {{first_name}},</p><p>Your balance is {{balance}}.</p>",
"vars": { "first_name": "Alex", "balance": "$42.10" }
}'Node.js
import { WemailClient } from "@wemail/sdk";
const wemail = new WemailClient(process.env.WEMAIL_API_KEY);
await wemail.sendMessage({
from: "noreply@updates.acme.io",
to: ["alex@example.com"],
subject: "Hi {{first_name}}, your balance is {{balance}}",
html: "<p>Hi {{first_name}},</p><p>Your balance is {{balance}}.</p>",
vars: { first_name: "Alex", balance: "$42.10" },
});Python
from wemail.client import WemailClient
wemail = WemailClient(api_key=os.environ["WEMAIL_API_KEY"])
wemail.send_message({
"from": "noreply@updates.acme.io",
"to": ["alex@example.com"],
"subject": "Hi {{first_name}}, your balance is {{balance}}",
"html": "<p>Hi {{first_name}},</p><p>Your balance is {{balance}}.</p>",
"vars": {"first_name": "Alex", "balance": "$42.10"},
})PHP
<?php
$wemail = new \Wemail\WemailClient(getenv('WEMAIL_API_KEY'));
$wemail->sendMessage([
'from' => 'noreply@updates.acme.io',
'to' => ['alex@example.com'],
'subject' => 'Hi {{first_name}}, your balance is {{balance}}',
'html' => '<p>Hi {{first_name}}, your balance is {{balance}}.</p>',
'vars' => ['first_name' => 'Alex', 'balance' => '$42.10'],
]);Ruby
wemail = Wemail::Client.new(api_key: ENV["WEMAIL_API_KEY"])
wemail.send_message(
from: "noreply@updates.acme.io",
to: ["alex@example.com"],
subject: "Hi {{first_name}}, your balance is {{balance}}",
html: "<p>Hi {{first_name}}, your balance is {{balance}}.</p>",
vars: { first_name: "Alex", balance: "$42.10" }
)Go
client, err := wemail.NewClient(os.Getenv("WEMAIL_API_KEY"))
client.SendMessage(wemail.SendMessageRequest{
From: "noreply@updates.acme.io",
To: []string{"alex@example.com"},
Subject: "Hi {{first_name}}, your balance is {{balance}}",
Html: wemail.PtrString("<p>Hi {{first_name}}, your balance is {{balance}}.</p>"),
Vars: map[string]interface{}{"first_name": "Alex", "balance": "$42.10"},
})Java
WemailClient wemail = new WemailClient(System.getenv("WEMAIL_API_KEY"));
wemail.sendMessage(new SendMessageRequest()
.from("noreply@updates.acme.io")
.to(List.of("alex@example.com"))
.subject("Hi {{first_name}}, your balance is {{balance}}")
.html("<p>Hi {{first_name}}, your balance is {{balance}}.</p>")
.vars(Map.of("first_name", "Alex", "balance", "$42.10")));.NET
var wemail = new WemailClient(Environment.GetEnvironmentVariable("WEMAIL_API_KEY"));
await wemail.SendMessageAsync(new SendMessageRequest {
From = "noreply@updates.acme.io",
To = new List<string> { "alex@example.com" },
Subject = "Hi {{first_name}}, your balance is {{balance}}",
Html = "<p>Hi {{first_name}}, your balance is {{balance}}.</p>",
Vars = new Dictionary<string, object> { ["first_name"] = "Alex", ["balance"] = "$42.10" },
});ResponseExample response
{
"id": "msg_01HBYE7K9Z4PMQDR3W",
"status": "queued",
"created_at": "2026-05-10T09:42:18Z",
"to": ["alex@example.com"]
}