Email Sender Go-Live Checklist
This is the email-channel launch runbook for taking a transactional sender live on Devotel Orbit, including the migration case: bringing a sender off a previous ESP with its reputation and suppression history intact. The platform-wide Production go-live checklist owns the shared gates — KYC, live keys, webhook hygiene, wallet — and the voice runbooks own telephony (CCaaS, PSTN). This page owns what is specific to email: domain authentication, sender identity, the first transactional send, suppression, and the deliverability surface you watch from day two. Work sections 1 through 5 in order; each proves the previous one. Then run section 6 as the sign-off. Put an owner on every checkbox before launch day — an unnamed line is an unowned risk.1. The email-sender shape
Four pieces make a sender live:- Verified domain. The sending domain with every DNS record graded
valid, published manually at your DNS provider or created by the Cloudflare auto-configure lane (section 2). - Sender identity. A registered sender row that binds your
fromaddress to that domain so the platform can sign and present it (section 2). - Transactional template. The body you dispatch. The send endpoint takes finished
htmlortext, rendered from your template with every merge tag resolved (section 3). - Live API key with send permission. A
dv_live_sk_key minted under Settings → API Keys for the service that sends. Itsdv_test_sk_sandbox twin runs the identical request shapes, so the integration code you prove in sandbox runs unchanged on the live key (section 3).
2. Verify the domain
Add the domain under Channels → Email → Domains. The domain row lists the exact record set to publish — the DKIM signing record, the SPF record, the DMARC policy, and the Return-Path CNAME — with names and values taken from the console; this page links the DNS lanes rather than re-teaching DNS. Manual DNS lane. Publish the records at your DNS provider, allow for propagation, then run Verify DNS on the domain row (or its API equivalent) and read the per-record traffic-light view until every record gradesvalid:
valid. Re-run Verify DNS after any manual change.
Cloudflare auto-configure lane. If the zone sits on Cloudflare, the auto-configure guide creates the missing records from the same domain row; run Verify DNS afterwards to confirm the green board.
- The domain row is fully green. DKIM, SPF, DMARC, and the Return-Path CNAME all grade
validon a Verify DNS run performed today. Owner: Operations.
3. First transactional send through the API
With a green domain and a registered sender, make the one-shot send. The dispatch endpoint takes a finished body —html or text, at least one non-empty — and a clean dispatch returns 202 with data.succeeded carrying one row per recipient, plus meta.request_id to correlate with the webhooks in section 5.
Read the 202 precisely. Accepted means Orbit validated the request and queued the send. Delivered is the later message.delivered webhook, fired when the recipient’s mail server accepts the message. A 202 is not inbox placement; never build success or retry logic on it alone.
POST /api/v1/messages/email-builder/render, resolve every {{...}} merge tag in the returned HTML, then dispatch the rendered body through the same endpoint; an unresolved tag ships to the recipient as the literal string. The full walkthrough, including the sandbox path and the first-send error catalog, is Send your first transactional email.
- A live send returns 202 and the inbox receives it. The
data.succeededrow and the latermessage.deliveredwebhook agree. Owner: Engineering.
4. The suppression and reputation surface
Hard bounces, exhausted soft bounces, complaints, and unsubscribes are held out of future sends automatically, and the quota slot a held send would have spent is refunded at the pre-send gate. Manage the list under Channels → Email → Suppressions: search it, export it, add manual entries, or bulk-import it from your previous ESP on migration day so the suppression posture you built there carries over. Suppression is also an event stream, not just a table. Bounces and complaints fire on your webhook endpoint insidemessage.failed, held sends surface as suppression events, and a direct send to a suppressed address answers 422 RECIPIENT_OPTED_OUT with the slot refunded. The field-by-field payload reference is Email suppression event payloads; read it before writing the handler so a hard bounce and a complaint are distinguishable in your logs.
Removal from the list is a deliberate act: a re-bounce or a re-complaint re-suppresses the address. For a per-contact reachability read before routing a send, use contact deliverability health.
- The previous ESP’s suppression list is imported. Every hard bounce and complaint from the old platform is on the Orbit list before the first live send. Owner: Operations.
- The handler distinguishes bounce classes. The webhook consumer parses
message.failedand the suppression payloads per the payload reference and records them. Owner: Engineering.
5. Day two — delivery logs, bounce-rate alarm, DLR webhook
Launch day is the easy day. The surface you watch afterwards is what keeps the sender healthy. Watch Delivery Logs. The Delivery Logs view is the per-message event trail — accepted, delivered, bounced, opened — and the first place to look when a recipient domain starts misbehaving. Correlate rows with themeta.request_id from your sends.
Set the bounce-rate alarm. Arm an alarm over the hard-bounce stream — your webhook consumer, or a Delivery Logs export, computing the hard-bounce share per sender — and page the sender owner when it crosses your threshold inside the launch window. The Email channel lifecycle guide covers the warm-up ramps and deliverability posture the threshold protects.
Wire the DLR webhook. Subscribe the receipt family — message.delivered, message.failed, plus email.opened and email.clicked if you track engagement — on one HTTPS endpoint that verifies X-Orbit-Signature, dedupes on the delivery id, and acks inside the window. Signature and replay rules live in webhook security; the receiver pattern is in Receive your first webhook.
- The DLR webhook is live and verified. Duplicated deliveries produce exactly one side effect in your system. Owner: Engineering.
- The bounce-rate alarm pages a named owner. A test hard bounce trips it during the drill, not for the first time during an incident. Owner: Operations.
6. Go-live checklist
The sign-off. Check a box only when the evidence exists, and only the named owner checks it.- DNS live. DKIM, SPF, DMARC, and the Return-Path CNAME grade
validon a Verify DNS run performed today. Owner: Operations. - Sender approved. The sender row binds the intended
fromaddress to the verified domain, withisDefaultset on the fallback sender. Owner: Operations. - Template approved. The transactional body renders with every merge tag resolved,
htmlortextnon-empty, and the compliance owner has signed off the content. Owner: Compliance. - First send proven. A live send returned 202, the inbox received it, and
message.deliveredfired. Owner: Engineering. - Suppression webhook tested. A send to a suppressed address returned
422 RECIPIENT_OPTED_OUTwith the slot refunded, and the bounce and complaint handler records payloads per the reference. Owner: Engineering. - Bounce-rate alarm armed. The alarm pages the sender owner, and Delivery Logs are on the launch-day screen. Owner: Operations.
- Streams split where needed. Marketing mail, if any, sends on its own sender per stream isolation. Owner: Operations.
- Wallet funded. The balance covers launch volume plus headroom, and low-balance alerts reach the on-call owner. Owner: Operations/Finance.
Related reading
- Send your first transactional email — the one-shot first-send walkthrough this checklist stacks on
- Email channel lifecycle guide — day one to at-scale: warm-up ramps, bulk patterns, deliverability posture
- Auto-configure email DNS on Cloudflare — the automated DNS lane
- Email suppression event payloads — the payload reference for the suppression stream
- Delivery Logs — the per-message event trail
- Production go-live checklist — the platform-wide gates this page stacks on
- PSTN voice go-live checklist — the voice sibling of this runbook