Skip to main content

Sender identities

A verified domain cannot send on its own. The thing that sends is a sender identity: the From address, plus the compliance information that goes in every footer. Create them under Email > Senders. An identity activates only when both conditions hold: its domain is active, and the compliance fields are filled in. Try to activate one on a domain that is still verifying and you get a plain error saying so rather than a silent failure. If you later edit an active identity in a way that removes a required address or disclaimer, the identity is paused rather than left sending non-compliant mail. The save succeeds and sending stops, which is the safe direction: a paused identity is a problem you notice today, while non-compliant mail is one you find out about from a regulator.

Each sender is isolated

Every sender identity gets its own isolated reputation on our sending infrastructure. Practically, this means a committee that sends both a high-volume fundraising program and a careful volunteer-coordination program can keep them apart: if the fundraising sender runs into trouble, the volunteer sender is not dragged down with it. It is the reason to create a second identity rather than reuse one, whenever two programs have genuinely different audiences or risk profiles.

When sending is paused for you

Our sending infrastructure can disable an individual sender on its own judgment, usually for a complaint rate it considers unacceptable. When that happens the platform does not let campaigns keep failing message by message. Every in-flight campaign on that identity is paused automatically, the reason is recorded on the identity, and your organization is notified. Because identities are isolated, this stops at the one sender. Your other identities keep sending.

Building a campaign

A campaign is one message, from one sender identity, to one or more lists. Pick the audience, write the subject and body, and the platform deduplicates recipients across lists and removes anyone suppressed before it counts your audience. A campaign sends to every subscribed contact on its lists that is not suppressed. Each message is also screened at send time: an address rated as likely undeliverable is not sent to, is not counted as a bounce, and shows in the report as Screened as invalid. The builder is organized in five groups: When the campaign is built, choose Save and continue. The campaign opens on its own page and moves to the next step it needs: Awaiting test, Awaiting approval, or Ready. Scheduling is not part of the builder. Once a campaign is ready, choose Start on the campaign page or on its row in the Campaigns dashboard, then pick when it sends and in which time zone. The time starts at right now, so choosing it as is sends the campaign straight away. A scheduled campaign can be unscheduled from the same places, which returns it to ready. The send window is worth setting deliberately. It keeps a send from starting outside civilized hours in the recipient’s time zone, rather than arriving at 3 AM. Templates are built separately, under Email > Templates, and the builder picks from your saved ones. That is where the document editor, Import HTML, and Draft with Lincoln live. See Templates below. Link domain. Every link in a campaign is rewritten to a tracked URL, the open pixel is added for you, and pasted bare URLs become links too, so click metrics are never optional. Choose which host those URLs use under Link domain in the builder: any active tracking domain the organization owns or shares (the links. host created with your sending domain under Admin > Domains), or the shared platform link host. Branding the host keeps link reputation with your domain and matches what recipients see. If the chosen domain is not active yet the checklist says so and the send falls back to the platform link host. The platform link host is e.txtplatform.app, a neutral hostname that carries no product name. Whichever host a campaign uses serves everything a recipient can reach: every tracked link, the open pixel, view in browser, the unsubscribe and preferences page, and the one-click unsubscribe the mailbox provider calls. A recipient on a branded campaign never leaves your domain.

No A/B testing, and what to do instead

There is no A/B split test. One campaign is one message to one audience. The supported equivalent is Duplicate campaign plus Compare campaigns: duplicate a campaign, change the one thing you want to test, send both to comparable segments, and then compare up to four campaigns side by side on the campaign page. It takes one more step than a split test and gives you a result you can read a week later, rather than a winner picked automatically on an hour of early opens.

Templates

Templates live under Email > Templates and are reusable across campaigns. There are three ways to make one:
  • The document editor. Write the email like a document. Type / for a menu of blocks (text, headings, lists, buttons, donate buttons, images, columns, sections, dividers, spacers, quotes, footer text, a compliance footer, and a raw HTML block), and @ to insert a merge tag as an editable pill. Paste from Google Docs or Notion and the formatting carries over. A Design rail sets the background, card color, font, and heading, text, link, and button colors, and a Checks panel shows live compliance checks, server lint, and the size against Gmail’s 102 KB clip, alongside a desktop and mobile preview.
  • Import HTML. Paste HTML or upload a file, for a design your team already has or one exported from another tool. An HTML template is edited as text, and a document template can be converted to one, one way, with confirmation.
  • Draft with Lincoln. Describe the email and the platform’s AI agent writes it, returning editable blocks in the document editor. See below.
Every save returns a lint result. Read it: a template with lint errors will save, but a campaign built on it will not schedule. Warnings do not block. They include any image over 600 KB and a message whose images add up to more than 2 MB, for images in your email library. Links are not checked for whether they load, so click each one in your test send.

Draft with Lincoln

Lincoln, the AI agent already drafting your text replies, writes email designs too. The Draft with Lincoln button sits in the template editor’s toolbar and on the templates page. Describe the email you want, optionally pick up to six images and your brand colors, and Lincoln returns a finished design: a subject, a preheader, and editable blocks that load straight into the document editor for you to edit. Four things worth knowing before you use it:
  • It costs $3.00 per draft, at your organization’s own price, and you are charged only when a draft comes back ready. A draft that fails, or that comes back invalid, is never billed.
  • It is not instant. Generation runs in the background and usually finishes in under two minutes. Leaving the page does not lose the draft.
  • Images must already be in your email library. Add them on the Upload tab of the image picker, or at Assets > File Uploads with the Email images kind. Picking a texting image copies it into the email library for you.
  • It replaces the document. If the template already has content, you are asked to confirm before the draft overwrites it.
Every draft is a starting point, not a send. It lands in the editor, and the same checklist, test send, and approval rules below apply to whatever you do with it.

Drafting in the dashboard

Drafting runs in the dashboard, not over the API. It is paid, asynchronous, and non-deterministic, so it stays a product feature rather than a versioned API contract: Email > Templates > Draft with Lincoln. If the wallet cannot cover the draft, generation does not start. If the balance runs out mid-generation the draft finishes failed and is not billed.

The checklist

A campaign will not schedule until its checklist is clear. The single-campaign API read returns a blocked array naming exactly what is unresolved, so an integration never has to guess: Some items appear as warnings rather than blockers, including sunset holds, frequency-cap holds, and warm-up ceilings. They tell you the send will reach fewer people than the list total, without stopping it.

Test sends

Send a real message to up to 10 addresses before committing. Test sends use sample merge data so you see what a recipient sees. Every campaign requires a successful test send before it can be submitted or scheduled. There is no setting to turn this off. If you edit a campaign after its test, the test is invalidated and you need to send another one before you can submit or schedule. A campaign that was only waiting on its test moves on by itself once the test is accepted: to ready, or to awaiting approval if it requires one. “Editing,” for this purpose, means changing the body or content, the subject or preheader, the sender identity, the lists, the suppression lists, or the template. Changing the name, schedule, timezone, send window, or TTL does not invalidate the test. Two more things to know: test sends are real sends and are billed at the normal per-recipient rate, and they are excluded from campaign statistics and never fire webhooks, because they are your traffic rather than your audience’s. They are also exempt from the warm-up ceiling, so a test never consumes your daily allowance. A test send skips any address on your suppression list and does not charge for it, and test sends are not available while sending is paused for your organization.

Approval

A campaign can require a sign-off before it sends. Turn on Require approval before sending in the campaign builder, which sets require_approval on the campaign (false by default). This is a per-campaign choice, not an organization-wide setting: some campaigns can require approval while others send as soon as their test is clear. When it’s on, the campaign needs both a current test send and an approval before it can be submitted or scheduled. Editing the campaign after approval invalidates the approval the same way it invalidates the test, using the same definition of “editing” above.

Warm-up

A brand-new domain that sends 200,000 messages on its first day gets filtered, not delivered. Mailbox providers build reputation from a sending history, and no history plus sudden volume looks exactly like a compromised account. New domains ramp through a daily ceiling: The ramp advances one step per sending day, but only if yesterday went well. The step-up is checked each night against your own numbers, and it is held if the previous day’s bounce rate was 2% or higher or the complaint rate was 0.05% or higher. The complaint rate divides by messages to providers that report complaints; Gmail reports none, so Gmail sends are not in it, which is how mailbox providers and the sending account measure it too. A handful of events on a small day is not a rate, so a step is never held on fewer than 5 bounces or fewer than 2 complaints. A held step needs nothing from you: the domain keeps sending at its current ceiling, the addresses that bounced or complained are already suppressed, and the ramp resumes after the next clean sending day. The hold is shown with the domain’s warm-up on the domain’s page under Email > Domains. This is the point of a ramp: a schedule that climbs regardless of results is a countdown, not a warm-up. A day on which the domain sent nothing does not count in either direction: it neither advances the ramp nor holds it. Reputation is built from a sending history, so a day with no history is no evidence. In practice this means the ten steps are ten days of sending, not ten days on the calendar: a domain that mails twice a week takes about five weeks to reach the top step. Two further points:
  • Acquired lists ramp on half steps. Every ceiling above is halved.
  • The ramp belongs to the domain, not the sender. Every sender identity on a domain shares the domain’s step and its daily ceiling, and so does every campaign sending from it. A new identity on a warm domain is warm from its first send. Warm-up progress is shown on the domain, under Email > Domains.
The platform also has a daily sending limit shared by everyone. If it is reached, campaigns wait and resume on their own as capacity frees, usually within the hour; the campaign shows a waiting line while this happens. Nothing is lost and nothing is charged for messages that have not gone out.

A campaign larger than today’s ceiling

It is not rejected. It goes out over several sending days. Before you send or schedule it, the Start dialog shows the schedule day by day. One million recipients from a brand-new domain looks like this: What to expect while it runs:
  • Later days start at the same time of day as the first. A campaign started at 9 AM in its time zone sends each later day’s share at 9 AM.
  • The schedule is a projection. Each step up still depends on the previous sending day’s bounce and complaint rates, so it can take longer than shown. It does not go faster.
  • Campaigns on the same domain take turns, in the order they joined the line. A campaign joins at its scheduled start time; a resumed campaign joins again at its resume time. Campaigns at 11:00, 11:02 and 11:04 send in that order, whether each one is new or resumed. The campaign first in line gets each day’s allowance first and finishes out before the next one starts. A later campaign sends whatever is left that day, and starts the moment the earlier one finishes. If the earlier campaign is waiting until tomorrow, today’s leftover goes to the later one. The schedule shows days on which a campaign sends nothing as 0 and names the campaigns ahead of it.
  • Pausing gives up your place. A paused or unscheduled campaign stops holding the allowance, so the next campaign in line can use it the same day. Resuming it puts it at the back of the line, behind anything that started or resumed before it; what the other campaigns already sent stays sent. To let smaller campaigns go first, resume a large one at a later time.
  • The campaign stays in sending between days. The campaigns dashboard and the campaign page show when the next batch starts, in the campaign’s time zone, and which sending day it is. The campaign page also shows what went out each day. The Email tab of Scheduled Sends (the calendar icon in the header) puts every sending day on the calendar: what went out on past days, and an estimate, marked “est.”, for each day still ahead.
  • You can pause at any time. Later days do not send while it is paused. Resume works like Start: send now, or pick a date and time and the campaign shows as Scheduled until then, then resumes on its own. The resume time becomes its daily start time for the days after. It says how many recipients are still queued and shows the schedule again, updated for what has already gone out and where the domain is on the ramp. Unschedule calls a planned resume off and leaves the campaign paused.
  • You can change it part-way. Pause, then choose Edit. Changing the sender, lists, or content stops the paused send; send a new test and start it again to reach everyone else on the new setup. People who already received it are not sent it again, and anyone no longer on its lists is dropped. Other changes, like the name or send window, keep it paused so you can resume.
Mailbox providers do not publish a daily reset time. Gmail counts bulk volume over a rolling 24 hours and asks senders for a consistent rate, which is why a multi-day send keeps one daily start time.

Deliverability breakers

If a send is going badly, continuing makes it worse. Three breakers pause a campaign automatically: The bounce and complaint rates are measured across the campaign (since its last resume, see below). The complaint rate divides by messages to providers that report complaints, which leaves Gmail out (it reports none), so it matches the rate the sending account is held to. Neither is judged until at least 500 messages have been sent. A complaint pause also needs at least 3 complaints: one or two spam clicks on a small send are noise, not a rate, so they cannot stop a campaign on their own. Rates are re-evaluated on a rolling sweep. For reference, our sending infrastructure begins suspending senders near 5% bounce and 0.1% complaint; these thresholds sit deliberately below that. Gmail does not report individual spam complaints to senders, so the complaint rate above cannot see Gmail. The Gmail spam rate fills that gap: it is read daily from Google Postmaster Tools for any domain connected there, and when the latest reported day is at 0.10% or more, every scheduled or sending campaign on that domain pauses with pause_reason gmail_spam_rate and the domain’s warm-up step is held. Google reports this rate about two days late, and it is the domain’s rate, not one campaign’s. Gmail begins filtering a domain to spam around 0.30%. When a breaker trips, the campaign pauses and pause_reason records which one. Fix the underlying problem, which is usually list quality, then resume. After a resume, the breaker judges only the mail sent after it: the campaign gets a fresh 500 sends before its rates are checked again. Separately, if overall sending quality across the platform rises toward the level where mailbox providers act, campaigns sending to acquired lists or from sending domains under 30 days old are held before their next batch, then continue on their own once it recovers. Nothing is paused or charged while held, and the campaign page shows the hold. Our team is told the moment a hold starts and can let a specific campaign continue while it lasts; contact support if a held campaign matters to you. Every other safeguard on this page still applies to a campaign let through. A campaign that has been auto-paused twice cannot be resumed over the API. It returns 409 EMAIL_CAMPAIGN_RESUME_REQUIRES_SUPPORT and needs a person to look at it. There is no override, because the breaker exists precisely to stop an integration retrying through a real deliverability problem. For what happens to the individual addresses behind those rates, see Bounces, complaints, and suppressions.

Frequency cap

An optional organization-level cap limits how often any one person is mailed across all your campaigns, with separate 24-hour and 7-day limits. It is off by default; turning it on suggests one message per 24 hours and three per 7 days, which you can change. When enabled, recipients already over the limit are held out of the send rather than the send being rejected, and the campaign reports how many were held. It is the cheapest protection against the most common self-inflicted deliverability wound: three committees, one shared list, one bad week. A re-permission campaign is exempt, since a message asking whether someone still wants your mail is useless if the frequency cap stops it from arriving.

Sender requirements scorecard

Gmail and Yahoo publish bulk-sender requirements. The scorecard, on the sender identity page, checks your domain against them continuously so you find out before a mailbox provider tells you:
  • SPF passes, DKIM signs every message, and both pass together
  • A DMARC policy is published, and messages align with it
  • Messages are properly formatted
  • Valid forward and reverse DNS, and mail sent over TLS
  • Spam complaints under 0.10%
  • Bounce rate under 2%
  • A physical mailing address is present
Where Google Postmaster Tools is verified for your domain, Gmail’s own verdicts take precedence over our measurements for the categories it covers, since Gmail’s opinion of your mail is the one that decides where it lands.

DMARC progression

DMARC tells mailbox providers what to do with mail that fails authentication. Starting at enforcement would bounce your own legitimate mail from any sending service you had forgotten about, so the policy moves in stages: p=none → p=quarantine at 10% → p=quarantine at 100% → p=reject Leaving p=none requires all of the following over a 30-day window:
  • 98% or better aligned pass rate
  • At least 1,000 reported messages
  • At least 2 independent reporting sources
Every later step additionally requires 14 consecutive clean days at the current setting. If a new unaligned sending source appears at 1% or more of your volume, the policy backs off one step rather than dropping straight to none. We generate the record; you publish it. The record carries a reporting address where mailbox providers send their aggregate reports, which is what these thresholds are measured from. If you set your domain up before it did, see Sending domains and DNS. If your root domain already has a DMARC record we do not manage, we will not stage an edit to it and the API returns DMARC_ROOT_DOMAIN_NOT_MANAGED. Make that change yourself.

Dedicated sending

Most senders should use shared sending, where reputation is pooled and warm from day one. A dedicated managed sending pool is worth it only at sustained high volume, where your own reputation is an asset rather than a liability. Dedicated sending is per sending domain, because sending reputation lives on the domain. Each pool is $35.00 per month, one pool per sending domain, billed to the organization that owns the domain. An organization can turn it on for several of its domains, and each is billed separately. If you send for several clients on several domains, this also keeps one client’s list problem from affecting the others’ IPs. Turn it on from Email > Domains, on the domain’s row or its page. The domain must be verified (active) first. It is recommended for domains sending roughly 100,000 or more emails a week on a steady schedule; below that, shared sending usually delivers better. Warm-up usually takes up to about six weeks, and the pace depends on how much you send to each mailbox provider. The domain’s campaigns keep sending through shared IPs until warm-up ends, then switch automatically. Plan it well ahead of an election deadline, not during one. Dedicated IPs need steady sending afterwards to stay healthy. Turning it off stops billing at the end of the current month, with no mid-month refund, and the domain goes back to shared sending. Turning it on again later starts a new pool and a new warm-up. A domain with dedicated sending on cannot be removed until you turn it off. If the monthly renewal cannot be charged before the grace period ends, the pool is released, the domain returns to shared sending, and your organization is notified with how to turn it back on. Three conditions you may hit: DOMAIN_NOT_ACTIVE means the domain is not verified yet, POOL_ALREADY_ACTIVE means the domain already has a pool and the request did nothing, and POOL_CAPACITY_EXHAUSTED means the capacity cap has been reached and you should contact support. Two conditions you may hit: POOL_ALREADY_ACTIVE means your organization already has one and the request did nothing, and POOL_CAPACITY_EXHAUSTED means the capacity cap has been reached and you should contact support.

Tracking

Tracking is not optional and does not need configuring. On every send:
  • Every link is rewritten to a tracked URL on your link domain. That includes bare URLs you pasted into the text without making them links.
  • An open pixel is added, an invisible one-pixel image that loads when the message is displayed.
  • A view-in-browser link is available, which renders the message as a web page for recipients whose client mangles it. The browser version does not count as an open, though its links are still tracked.

Opens are approximate

Take open rates as a trend, not a count. Two things distort them in opposite directions, and neither is fixable by any sender:
  • Apple Mail Privacy Protection loads the pixel for every message, whether or not the recipient looked at it, which inflates opens.
  • Recipients who never load images never register an open, even after reading and acting on the message, which deflates them.
The platform filters what it can identify: known privacy proxies including Apple’s and Gmail’s image proxy, known bots, prefetching clients, and opens that arrive implausibly fast after the send. A filtered open is discarded: it is not counted and does not appear in your reports. A filtered click is kept and marked as automated, so link reports can still separate machine traffic from human traffic, but it is not counted either. A human open or click counts as engagement. So does an open seen through Gmail’s or Yahoo’s image proxy, even though that open is not counted in your reports. Engagement updates the contact’s last-engaged date on every list in your organization, which is what resets the sunset policy clock. Apple’s proxy and other automated opens do not count. Clicks are the number to trust. A click is a deliberate act that no proxy performs on the recipient’s behalf. Where open rate and click rate disagree, believe the click rate, and use click-to-open with the same caution you would apply to any ratio with a soft denominator.

Reporting

Each campaign has one page, and that page is its report. Open it from the campaign’s name or Report on the Campaigns dashboard. The top of the page carries the same actions as the dashboard row, anything holding the campaign back (waiting for approval, paused, warming up), and Campaign details: the sender, subject, preview text, lists, and schedule. Details stay open until the campaign starts sending, and the results below them appear once it does. The report opens on tiles covering sent, delivered, opened, clicked, click-to-open, bounced, complaints, unsubscribed, and cost, with the corresponding rates. Below them: CSV export builds the full recipient-level file in the background and gives you a download link valid for seven days. Figures on the page are cached for 60 seconds. Test sends and seed addresses are excluded from every number, though they are still billed, because they are your traffic rather than your audience’s. Seed addresses are the inboxes you list under Email settings, up to 25. Every campaign also goes to them, sent with the first batch, so your own team can see where it lands. A seed address that is on your suppression list is not sent to. They are not part of the audience count and never fire webhooks. Compare campaigns puts up to four campaigns side by side, which is the supported way to evaluate a change in subject line, sender, or creative.