https://api.reallyquickemails.com
How to send bulk emails
There are two ways to send bulk emails:
Learn more in
POST /v1/send-batch.
POST /v1/campaigns
Creates a bulk sending campaign.Body parameters
Request example
Requires a Bearer token (Authorization: Bearer sk_proj_...). Learn more in Authentication.
- cURL
200 OK
initializing status. The recipient records are created in the background (2-30 seconds depending on audience size) and the campaign moves to pending. Sending starts automatically.
The campaign object includes the full row (also created_at, next_batch_at, select_all_recipients, send_over_hours, variable_config, scheduled_for, etc.).
Learn more in Campaign statuses.
Duplicate detection (409)
To prevent duplicate sends, the API responds409 in two cases:
subject_match_60min— a campaign with the same subject was already created in the last 60 minutes.name_template_24h— a campaign with the same name and template already exists in the last 24 hours in a non-completed state (pending,paused,processing,initializing).
"confirmDuplicate": true.
Error codes
GET /v1/campaigns
Lists the project’s campaigns.Query params
- cURL
200 OK
status takes the values from Campaign statuses: initializing, pending, processing, rate_limited, paused, completed, failed, cancelled.
GET /v1/campaigns/:id
Returns a campaign’s detail with its metrics. Response200 OK
campaign object carries the same fields as the GET /v1/campaigns list.
POST /v1/campaigns/:id/cancel
Cancels a scheduled or in-progress campaign.- cURL
200 OK
Cancellation is a soft cutoff: a campaign in mid-send stops on the engine’s next cycle, and a handful of emails already materialized in the queue may still go out in that window. A scheduled campaign that has not started yet sends nothing.
Campaigns from the Dashboard
The Dashboard offers a 5-step wizard to create and send campaigns without code.Full flow
Step 1: Create a template
From Templates → New Template, design your email in the visual editor. Templates support dynamic variables with Handlebars syntax:
Available helpers:
Built-in variables: each recipient automatically receives
{{name}}, {{email}}, and {{unsubscribe_url}}, plus the contact’s fields. Top-level keys also work in lowercase: if your data brings NOMBRE, the template can use {{nombre}}. If the template does not include {{unsubscribe_url}}, an unsubscribe footer is added automatically and the emails include List-Unsubscribe headers.
Step 2: Create the campaign
From Campaigns → New Campaign, the wizard guides you through 5 steps:- Recipients — Select manually, use “Select all”, or filter by segment.
- Template and Sender — Choose the created template and the sender profile (verified domain).
- Variables (optional) — Configure default values, map recipient fields to template variables, or upload a CSV with custom per-email values.
- Send configuration — Enable batch mode, define batch size and interval, or distribute the send over N hours.
- Review and Send — Confirm everything and launch the campaign.
Step 3: Automatic processing
Once the campaign is created:- The recipient records are created (status:
pending) - The campaign moves from
initializingtopending - Recipients are processed asynchronously in the background: each one’s variables are prepared, they are queued for sending, and they move to
queuedstatus - Each email is rendered with Handlebars, sent through our sending infrastructure, and moves to
sentstatus - Delivery/bounce/complaint events update the final status and trigger your webhooks
Advanced configuration
Batch mode
Split the send into batches with intervals usingbatchMode, batchSize, and batchIntervalHours. Useful for domain warming or to avoid overwhelming your recipients.
Example: 50,000 recipients with batches of 10,000 every 24 hours = 5 days of gradual sending.
Learn more in POST /v1/campaigns.
Hourly distribution
Distribute the send evenly over a period withsendOverHours.
Example: 3,000 emails distributed over 6 hours = ~500 emails per hour.
Per-recipient variables (CSV)
Personalize each email by uploading a CSV with columns:Domain warming
From a new domain or one with little history, raise volume gradually. Reference ramp:
From there, roughly 1.4x per day until you reach your target volume. For tens of thousands per day, plan for four to six weeks of ramp.
Use batch mode to automate this. Sending everything at once from a cold domain can flag you as spam on Gmail, Outlook, and other providers.
Learn more in Deliverability and authentication.