Send campaign
POST /campaigns/:id/send — send a draft now or schedule it.
/campaigns/:id/sendSends a draft campaign. With no body it begins sending immediately (status → queued). Pass a future scheduled_at to schedule it (status → scheduled). A campaign that has a recurrence becomes a template instead (status → recurring) and each occurrence is sent as its own child campaign. The campaign must be a draft with a from, a subject, a body, and a verified from-domain.
idstringrequiredThe campaign ID.
scheduled_atstringoptionalOptional. Schedule the send for later. Accepts an ISO 8601 timestamp (e.g. 2026-07-01T09:00:00Z) or natural language (e.g. in 1 min, in 1 hour). If in the future, the campaign is scheduled rather than sent now. Cannot be more than 30 days in the future.
schedule_timezonestringoptionalOptional. IANA timezone name (e.g. America/New_York) the scheduled_at wall-clock time is interpreted in — also the zone daily batches roll over in. A scheduled_at that already carries a UTC offset (e.g. a trailing Z) is used as-is. Defaults to your account timezone for batch rollover; while it is unset, an offset-less scheduled_at is read as UTC.
import { Mailblastr } from 'mailblastr';
const mb = new Mailblastr('mb_xxxxxxxxx');
const { data, error } = await mb.campaigns.send('8f5c2a1e-7b3d-4f9a-9c12-2e6d4a7b8c90', { "scheduled_at": "2026-07-01T09:00:00Z" });
console.log({ data, error });Response
{
"id": "8f5c2a1e-7b3d-4f9a-9c12-2e6d4a7b8c90"
}not_found if the campaign is not yours; validation_error if it is already queued/scheduled/sent, is missing a from/subject/body, has an unverified from-domain, or scheduled_at is not a valid timestamp.