Sending Emails — Batch Send
One POST, hundreds delivered. Queued.
We throttle, retry, and respect Gmail caps. You poll GET /api/batch/:id.
POST /api/batch
curl -X POST https://quicksend.elzipodev.cv/api/batch \
-H "Authorization: Bearer qs_live_..." \
-H "Content-Type: application/json" \
-d '{
"from": "\"Acme\" <you@gmail.com>",
"subject": "Hi {{name}} — update",
"html": "<p>Hi {{name}}, your plan {{plan}} expires {{date}}.</p>",
"recipients": [
{ "email": "ada@acme.co", "variables": { "name": "Ada", "plan": "Pro", "date": "Sep 20" } },
{ "email": "sam@acme.co", "variables": { "name": "Sam", "plan": "Free", "date": "Sep 21" } }
]
}'Fields: from, subject, recipients[] {email, variables}, html/text (with {{variables}}), replyTo. Max 450 personal / 2,000 Workspace per batch (deduped). No attachments — host files and link.
202 Accepted
{ "success": true, "batchId": "64f1...", "total": 2, "status": "queued" }Poll — GET /api/batch/:id
{
"success": true,
"batchId": "64f1...",
"status": "processing",
"total": 2, "sent": 1, "failed": 0, "progress": 50,
"recipients": [
{ "email": "ada@acme.co", "status": "sent", "messageId": "18b3...", "error": null },
{ "email": "sam@acme.co", "status": "pending", "messageId": null, "error": null }
]
}Statuses: queued → processing → paused_limit_reached → done (or failed). Paused resumes after UTC reset — we throttle automatically.
Why no attachments in batch?
500 × base64 uploads would be slow and burn quota. Host on S3/Drive/CDN and link in html.