Skip to content
QuickSend

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.