Skip to content
Coritan Docs

Set up your sending domain and warm-up

Choose the domain marketing email comes from, add its DNS records, watch the daily limit rise, set the postal address and fix a setup that is not ready.

View as Markdown

Sending is where you set up the domain that marketing email comes from, and how fast it may go. Marketing email leaves from a domain of its own, usually news. in front of your own domain, through Coritan's mail platform. It never uses the sender that carries your order emails. No campaign or automation can send until this page says your domain is set up and its records are in place.

  • You need Tier 3 support or higher to open Sending, and an owner or admin to change anything on it.
  • Know the domain you will send from. You need to change its DNS records, or have the zone on Coritan DNS, which publishes them for you (Add, edit and delete DNS records).
  • Have your organization's postal address. Every marketing email shows it, and a campaign cannot start without it.

A sending domain is a name of its own, such as news.example.com, that marketing email comes from. Keeping it apart protects the reputation of the address your order emails use.

  1. In the dashboard, open the organization, then Commerce, then Email, then Sending.
  2. Under Sending domain, leave Domain empty to use news. in front of your organization's custom domain, or in front of your storefront's host. Or enter a domain such as news.example.com.
  3. Select Set up domain.

The status badge on the card moves from Not set up to Waiting for DNS. The page now lists the records the domain needs.

  • The domain must be a subdomain, such as news.example.com, so the email you already use on example.com keeps working.
  • It cannot be one that another organization uses.
  • You can change the domain until its records have been verified. After that it is locked, and Coritan support has to move it.
  • Setting up is safe to repeat. It allows 30 calls an hour.

DKIM, SPF and DMARC are three records that prove an email really comes from you. DKIM signs each message, SPF lists the servers allowed to send it, and DMARC says what a receiver should do with a message that fails. Mail apps trust a sender more, and filter it less, when all three are in place.

The DNS records card lists each record with its Record (what it is for and its type), its Name, its Value and its Status. Copy each Name and Value to your DNS provider. When your DNS zone is on Coritan DNS, we publish them and you add nothing.

Record Type What it is for
Domain ownership TXT at _mailverify on your sending domain Proves the domain is yours. It is listed only when your DNS is not on Coritan DNS.
SPF TXT at your sending domain Lists the servers allowed to send for the domain. A name has one SPF record, so if your sending domain already has one, add our include: to it.
DKIM TXT or CNAME, one or more The key receivers use to check each message's signature.
DMARC TXT at _dmarc on your sending domain Tells receivers what to do with mail that fails SPF and DKIM.
Click tracking CNAME at click on your sending domain Lets the links in your emails run on your own domain. Sending does not wait for it.

There is no separate record for the return path. Bounces come back to a bounce+ address on your sending domain itself, which the SPF record covers.

A record's Status reads In place when DNS answers with the right value, Different value when the name holds something else, and Not found when nothing is there. The click tracking record reads Waiting when its name is in place and the host does not answer yet. DNS changes can take a while to spread.

Select Check records after you add them. It checks again and answers how many records are in place. When the ownership, SPF, DKIM and DMARC records are all In place, the domain is verified and the warm-up starts at once. Click tracking is Waiting until https://click.<your domain> answers with a valid certificate. Until it does, links in your emails run on Coritan's own address. Check records allows 30 checks an hour.

The Status card shows the Domain, the address emails are sent from (Sends from), the Tracking host and when it was Verified.

Set the sender and the postal address

Section titled Set the sender and the postal address

Under Sender and limits, set what readers see and the address every email shows:

Field What it takes
Sender name What readers see before the address, up to 100 characters on one line.
Address before the @ Letters, numbers, dots, dashes and underscores, up to 64. It defaults to hello. The address ends with your sending domain.
Reply to Where replies go. Leave it empty to use your store's support address.
Postal address One line of 10 to 500 characters. Every marketing email shows it, as the law asks. A campaign cannot start without one. A line break becomes a space.
Emails each minute The top speed, from 1 to 5,000. It is 300 until you change it. A campaign can set a lower one.

Select Save changes. A campaign can use its own sender name, address and reply-to (Write, test and send email campaigns).

A new domain has no sending history, so mail apps are careful with it. The warm-up starts the daily limit low and raises it each day your sending stays clean. The Daily limit card shows how much of today's limit you used, the Stage, Today's limit, Left today, and what the limit becomes Tomorrow, if all goes well.

Stage Emails a day
1 50
2 100
3 200
4 400
5 800
6 1,500
7 2,500
8 4,000
9 6,000
10 9,000
11 13,000
12 20,000
13 30,000
14 50,000
Finished No daily limit. Only Emails each minute limits sending.

The limit counts emails sent since midnight UTC, for campaigns and automations together. A stage moves up once a day, when the day before met all three conditions:

  • You sent at least half of that stage's limit. A quiet day proves nothing to mail apps.
  • Fewer than 3% of the emails sent that day bounced.
  • Fewer than 0.1% of them were reported as spam.

The day is judged an hour after midnight UTC, so late bounces count. A stage that does not meet the conditions repeats the next day. The warm-up does not move while sending is paused. The status reads Warming up until stage 14 is passed, then Ready.

A campaign larger than the day's room sends what fits and continues the next day. The rest wait as Waiting to go in its report. An email that would go to a mailbox provider the mail platform has not sent to before can be held for a while, and goes out later. If Coritan staff set a fixed daily cap for your organization, it replaces the stage limit and sending reads Ready.

Under Sender and limits, you set the limits at which auto-pause acts. After at least 200 emails of a campaign are delivered, the campaign pauses if its bounce rate or its spam report rate goes over your limits:

Setting What it does Default Allowed
Bounces go over Pauses a campaign when more than this share of its emails bounced. 5% 0.5% to 10%
Spam reports go over Pauses a campaign when more than this share of its emails were reported as spam. 0.3% 0.05% to 0.5%

The campaign shows why it paused, such as Paused automatically: 6.2% of this campaign's emails bounced, over your limit of 5%. Remove old or mistyped addresses from your lists, then resume. If two campaigns in a row pause this way, all your marketing email pauses. Clean your lists, check how people join them, and then resume.

The Overview badge reads Watch above 2% bounces or 0.1% spam reports, and Critical over your limits or while sending is paused (Set up email marketing for your store).

Select Pause sending…, add a Reason if you like, and confirm with Pause sending. Every campaign and automation stops now. Emails already queued wait and go out after you resume. Resume sending starts it again, whether you paused it or an automatic pause did.

If Coritan staff paused your sending, the page says Coritan staff paused your sending, gives their reason and shows no way to resume. Only staff can lift their own pause. Open a ticket from the page to find out why.

The mail platform tells us what happened to each email after it left, and we act on it once for each email:

  • A hard bounce, a permanent failure such as a mailbox that does not exist, suppresses the address and sets the contact to Bounced.
  • An email the platform gave up on after temporary failures, such as a full mailbox, counts as a bounce. It suppresses the address only after three of them in 30 days.
  • A spam report suppresses the address and sets the contact to Marked as spam.

The contact leaves every list, and the suppression list used by the store's flows holds the address too. Nobody can lift a bounce or a spam report. Each is also sent as a webhook event, and campaign reports list bounces by reason.

An email that fails because the platform could not take it right away is tried again after 2, then 10, then 30 minutes. After the fourth failure it is marked Failed. An email is never sent twice: when we cannot tell whether one went out, it is marked Failed and not tried again.

A campaign that cannot start answers with a reason. The same reasons show as Sending is not ready in the schedule dialog.

Reason What it means What to do
not_set No sending domain. Select Set up domain.
pending_dns Some required records are not in place. Add them, then select Check records. A record that reads Different value holds something else at that name, such as a second SPF record.
no_address No postal address. Fill in Postal address and select Save changes.
paused You or an automatic pause paused sending. Select Resume sending.
staff_paused Coritan staff paused sending. Open a ticket. Only staff can resume.
daily_limit Today's limit is used up. Wait for tomorrow. A send that did not fit continues, and the limit rises as your history builds.

daily_limit stops a campaign from starting now. A scheduled campaign and a resume go ahead, and the emails that do not fit wait for the next day.

A setup call can also answer 422 with invalid_domain or use_subdomain, 409 with domain_unavailable or domain_locked, and 503 with mail_unavailable when the mail platform cannot take a new domain yet. Try again later in the last case.

  • The status badge reads Warming up once the required records are In place, then Ready.
  • Daily limit shows the stage and how many emails you can still send today.
  • A campaign you schedule starts instead of answering that sending is not ready.
A record stays Not found
DNS has not spread yet, or the record is at another name. Compare the Name on the page with the one at your DNS provider, wait a while and select Check records again.
A record reads Different value
The name holds another value. For SPF, a name can have only one record: merge our include: into it. For DKIM, copy the whole value, which is long.
The domain cannot be changed
Its records were verified, so it is locked. Ask support to move it.
The page is read-only
Changing the setup needs an owner or admin. Tier 3 support can read it.
A campaign paused by itself
Its bounce or spam report rate went over your limits. Clean your lists, then resume.
Sending is slower than I expected
The warm-up limit, Emails each minute or the campaign's own speed holds it back. Read the Daily limit card and the campaign's speed under Sending speed.

The routes are under https://api.coritan.com/api/v1/orgs/{org_slug}/marketing/sending. Reading takes marketing.settings:read and changing takes marketing.settings:write (API key scopes).

GET /sending answers {sending}:

Field What it holds
status not_set, pending_dns, verified, warming, ready or paused.
domain, tracking_host, verified_at The domain, its tracking host once verified, and when the records were verified.
from_name, from_local, from_address, reply_to, physical_address The sender and the postal address.
warmup {stage, started_at, daily_limit}, with stage from 0.
daily_cap, per_minute A fixed cap set by Coritan staff, and the speed in emails a minute.
quota {daily_limit, sent_today, remaining}. daily_limit and remaining are null without a daily limit.
thresholds {bounce_pause_pct, complaint_pause_pct}.
paused, paused_by_staff, paused_reason, paused_at The pause.
dns {records, checked_at}. Each record is {type, name, value, purpose, status}. purpose is ownership, spf, dkim, dmarc or tracking, and status is verified, pending, mismatch or missing.
  1. POST /sending/setup sets up the domain. Send {"domain": "news.example.com"}, or no body for news. in front of your own domain. It answers {sending} with the records to add.

    Shell
    curl -X POST "https://api.coritan.com/api/v1/orgs/acme/marketing/sending/setup" \
      -H "X-API-Key: $ORG_API_KEY" -H "Content-Type: application/json" \
      -d '{"domain": "news.example.com"}'
    
  2. Add the records, then POST /sending/verify checks them and answers {sending}. It moves pending_dns to warming once every required record is in place. Without a domain, it answers 409 with not_set.

  3. PUT /sending changes the sender and the limits. Send only what changes:

    Shell
    curl -X PUT "https://api.coritan.com/api/v1/orgs/acme/marketing/sending" \
      -H "X-API-Key: $ORG_API_KEY" -H "Content-Type: application/json" \
      -d '{"from_name": "Acme Games", "physical_address": "12 Dock Road, Hamburg 20095, Germany",
           "per_minute": 300, "thresholds": {"bounce_pause_pct": 5, "complaint_pause_pct": 0.3}}'
    

    A value outside its range answers 422 with invalid and the field, such as per_minute or bounce_pause_pct.

  4. POST /sending/pause takes an optional reason of up to 500 characters and stops all marketing email. POST /sending/resume starts it again, and answers 409 with staff_paused when Coritan staff paused it.

Setup and verify each allow 30 calls an hour per organization, and answer 429 with rate_limited beyond that.

API operations on this page

MethodPathWhat it does
GET/api/v1/orgs/{org_slug}/marketing/sendingGet sending
PUT/api/v1/orgs/{org_slug}/marketing/sendingUpdate sending
POST/api/v1/orgs/{org_slug}/marketing/sending/pauseStop all marketing email now
POST/api/v1/orgs/{org_slug}/marketing/sending/resumeStart sending again after a pause, yours or an automatic one
POST/api/v1/orgs/{org_slug}/marketing/sending/setupSet up the sending domain
POST/api/v1/orgs/{org_slug}/marketing/sending/verifyCheck the DNS records again