Send Email with Sendar
Send a single email. The domain in the from address must be added and verified in your account first.
POST /emails
Send a single email. The domain in the from address must be added and verified in your account first.
const response = await fetch("https://sendar.app/api/emails", {
method: "POST",
headers: {
Authorization: "Bearer sndr_xxxxxxxxxxxx",
"Content-Type": "application/json",
},
body: JSON.stringify({
"from": "Acme <hello@acme.com>",
"to": [
"delivered@example.com"
],
"subject": "Hello World",
"html": "<p>It works!</p>"
}),
});
const data = await response.json();
console.log(data);Usage note 1
Provide html, text, or both — at least one is required (or pass templateId instead, see Send with a Template).
Usage note 2
Add scheduledAt (ISO 8601, up to 30 days ahead) to schedule the send instead of delivering immediately. Scheduled sending is available on the Growth plan and above.
Usage note 3
Attach files with attachments: up to 5 files, 1.3MB total, content base64-encoded.
Usage note 4
Set trackOpens / trackClicks (booleans) to record opens and link clicks for this email — omit them to use your account defaults from Settings. Tracking only works on HTML bodies: opens use an invisible pixel, clicks rewrite links through a redirect.
Usage note 5
Every plan includes a monthly sending quota (3,000 emails per month on Free — see the Pricing page); requests over the limit return a 429 error. Canceled emails don't count toward the quota.
Example response
The response below is illustrative. Provider acceptance is not proof of delivery to the inbox.
{
"id": 42,
"providerEmailId": "0100019a7f3d2c8e-…",
"fromAddress": "Acme <hello@acme.com>",
"toAddresses": [
"delivered@example.com"
],
"subject": "Hello World",
"status": "sent",
"errorMessage": null,
"scheduledAt": null,
"trackOpens": false,
"trackClicks": false,
"openedAt": null,
"clickedAt": null,
"openCount": 0,
"clickCount": 0,
"createdAt": "2026-07-15T16:00:00.000Z",
"updatedAt": "2026-07-15T16:00:01.000Z"
}