API docs
Send email
Send text or HTML email to one address or many.
POST
/v1/emailSends to one address. The email is queued and the response comes back at once with 202.
Body
tostringrequired- The recipient's email address.
subjectstringrequired- The subject. Up to 255 characters, one line.
htmlstring- The HTML body. One of
htmlandtextis required. textstring- The plain-text body. When both are given, clients that cannot show HTML show the text.
from_namestring- The sender name. Defaults to the project's brand name, or the project name.
reply_tostring- Where replies go. Defaults to the address set in the project's settings.
curl -X POST https://api.wesend.mn/v1/email \
-H "Authorization: Bearer $WESEND_API_KEY" \
-H "Content-Type: application/json" \
-d '{
"to": "[email protected]",
"subject": "Таны захиалга баталгаажлаа",
"html": "<h1>Баярлалаа!</h1><p>Таны #1042 захиалга баталгаажлаа.</p>",
"text": "Баярлалаа! Таны #1042 захиалга баталгаажлаа.",
"from_name": "Shop.mn",
"reply_to": "[email protected]"
}'Response202 Accepted
{
"id": "0b9c1a52-6f0e-4d8b-9a3c-2f1e5d7c8a90",
"status": "queued",
"channel": "email",
"to": "[email protected]",
"credits": 5,
"batch_id": null,
"error": null,
"created_at": "2026-10-06T08:15:30.000Z",
"sent_at": null,
"balance": 4995
}- Emails are sent from WeSend's shared domain. You set the sender name and the reply-to address.
htmlandtexttogether may not exceed 256 KB. Beyond that the answer is422 message_too_long.- Read the final status with
GET /messages/{id}:sentorfailed. A failed email is refunded.
Send to many addresses
POST
/v1/email/bulkSends one email to up to 1,000 addresses. Each recipient gets a separate email and never sees the others.
The fields are those of /email, except that to is a list of addresses.
curl -X POST https://api.wesend.mn/v1/email/bulk \
-H "Authorization: Bearer $WESEND_API_KEY" \
-H "Content-Type: application/json" \
-d '{
"to": [
"[email protected]",
"[email protected]"
],
"subject": "Шинэ бараа ирлээ",
"html": "<p>Намрын цуглуулга худалдаанд гарлаа.</p>"
}'Response202 Accepted
{
"id": "5d2a7c1e-93b4-4f6a-8e0d-b1c2d3e4f5a6",
"status": "processing",
"channel": "email",
"total": 2,
"sent": 0,
"failed": 0,
"credits": 10,
"created_at": "2026-10-06T08:15:30.000Z",
"completed_at": null,
"balance": 4985
}