Skip to main content

Launch Review

Every campaign send and every journey activation is checked first. Launch Review runs on the message as you wrote it - placeholders intact, no recipient rendered - and lists what it found in two severities:

  • Blockers stop the send. A workspace can let a send go out with blockers on the list (Settings → Launch review), but by default it does not. One send can still go past its blockers on purpose - see Send anyway.
  • Recommendations inform. They never stop anything.

Every finding names where it is (the variant or the journey node, and the field) and carries a Fix button that takes you there.

What the Fix button opens​

  • Edit content on a campaign opens the variant's editor - drag & drop or HTML, whichever it was written in - on the right tab: Settings for the subject or preheader, the design for the body, with the Checks tab already open beside the email (see Checks in the email editor). SMS, push, WhatsApp, Viber and in-app messages are edited on the Compose step itself, so a compact bar - "2 to fix · 1 suggestion" - shows above the message there; Review opens the list under it. Close the bar with its x.
  • Edit node or Edit content on a journey opens the journey canvas with that step selected and its editor open; an email step opens its email editor with the same bar and Checks tab.
  • Edit audience and Edit delivery go to those steps; settings findings (a sender domain, quiet time, frequency rules, a coupon program) open their settings page.

Where you see it​

  • The campaign wizard's Review and publish step, for a saved campaign, and the launch confirmation when you press Send.
  • The journey wizard's Review and publish step, the Publish dialog of a live journey, and Activate from the list or the builder. When a review is clean, Activate goes straight through; when it is not, the findings open first.

The launch confirmation, the Publish dialog and the Activate check show blockers in full, with their Fix buttons and Send anyway. Recommendations there fold into one line - "3 suggestions - review them in the Summary step" - with an Open Summary button; the full list stays on the Review and publish step. A long link or image address inside a finding shows as its file name (…/hero.png); hover it to see the whole address.

The dashboard and the server run the same review, so what you see is what the send is judged on. A scheduled campaign is reviewed again when its time comes; if a blocker appeared since (a sender lost its verification, a saved sender was deleted) the campaign lands in Failed with the reason, ready for Retry.

Blockers​

FindingWhat it meansFix
No unsubscribe linkA marketing email has no unsubscribe or preferences link, merge tag or wording, and the workspace's automatic footer is off.Add the link, or turn on the footer in Subscriptions.
Broken merge fieldA Liquid expression does not parse (an unclosed {{, a bad tag). It would fail for every recipient.Open the field it names.
No sender for the channelA channel this send uses has no provider or sender in the workspace (for email, no sending domain attached; for SMS or Viber, no number connected), so every message on it would fail.Set up sender opens that channel's settings.
Sender not verifiedThe custom From domain fails SPF or DKIM, or is not a connected sending domain. The send would be refused.Verify the domain in Email settings.
Sender not foundThe saved sender this message points at was deleted.Choose another sender.
Unusable linkA link with an empty href or # on a send with a conversion goal - it can neither be followed nor tracked. Without a goal this is a recommendation.Fix the link.
Broken linkThe live link check (below) found a link that answers 404 or 410, a host that does not resolve, or a connection that is refused, on a send with a conversion goal. A click there records nothing, so the purchase that follows is not credited. Without a goal this is a recommendation.Fix the link.

A send to everyone (subscription preference All) skips the unsubscribe check: that setting exists for transactional messages, and the review says so as a recommendation instead.

Recommendations​

FindingWhat it means
Long subjectOver 78 characters; inboxes cut it around there.
No sender for the channel (demo)In a demo workspace, a channel this send uses has no provider or sender, so its messages will be simulated for everyone - workspace members included. Nothing is delivered until a sender is set up.
Promotions-tab wordsThe subject says free, sale, discount, deal, a coupon or % off. Those words route the email to the promotions tab and teach the list to read you as sales; say what they save as an amount over a period and keep the offer wording inside.
Unverifiable adjectiveThe subject carries a claim the reader cannot check (remarkable, incredible, amazing, guaranteed…). A real number in days on their own clock, or an amount, works harder.
Preheader repeats the subjectThe preheader says the subject again instead of extending it.
Experiment ideaA single-variant email whose tone, urgency, offer, call to action or topic sits on the weaker side of a gap your own results can measure. The note names the gap and the recipients an A/B arm would need; the compose step writes the variant.
Design check: alt textAn image without alt text, or a linked image with empty alt text. Readers who block images, and screen readers, get nothing there.
Design check: text and contrastBody text under 14 px, or a text colour under 4.5:1 against the background behind it (3:1 for large text).
Design check: headings and linksMore than one top-level heading, or link text that says "click here" or "learn more" instead of where the link goes.
Design check: size and weightAn email over 102 KB (Gmail clips it), one image over 200 KB or images over 800 KB in total (measured on the dashboard review).
Design check: buttons and imagesMore than two buttons, or an email that is images with almost no words (image blockers and spam filters see nothing).
Design check: spacingTwo spacers or line breaks in a row.
Link not confirmedThe live link check could not confirm a link: the site answered an automated request with a challenge, a rate limit or a timeout. Not called broken - open it once yourself.
No linkA send with a conversion goal whose email, SMS, WhatsApp or Viber message has no link at all. A conversion sent from the API within the attribution window is still credited, but a click is how most goals are attributed.
Audience overlapA scheduled or running campaign, or a live journey, overlaps this send: it shares a segment or the identical audience on a common channel, or it fires on the same trigger to the same audience (or with no audience gate on either side) - then the same person gets both at the same moment, whatever the channel.
At the message limitHow many of the audience are at their frequency cap on this channel right now, as the send gate will judge them: "15 of 50 people (30%) are at their message limit". The rules hold the send for them; a send with ignore frequency rules on goes to them anyway, and the finding says so. One line per journey message node, named. Not shown when nobody is at the cap or the workspace has no frequency rules.
Quiet hours at send timeHow many of the audience are inside a quiet window at the moment the send goes out, grouped by each person's timezone attribute (the organization's zone for anyone without one) exactly as the queue groups them, and what the quiet-time setting does with them: their message waits, with the time the last of them gets it, or is skipped. A scheduled campaign is judged at its scheduled time and the line says so. A critical message (audience preference All, or ignore frequency rules on) with the transactional bypass on is never inside. Not shown when nobody is inside or quiet time is off for the channel.
Quiet hours ignoredThe send overrides quiet hours that are on for its channel.
Consent bypassedSubscription preference is All, so unsubscribed people receive it too.
Unreachable nodeA journey node no trigger reaches. It never runs.

Both audience findings look at up to 1,000 target people; on a larger audience the line says it was measured on a sample. A triggered journey has no audience to look at, so it gets neither. When a check could not run (the audience could not be sampled) the review says so under Not checked this time rather than staying silent.

Every email leaves with a plain-text part: when none was written, the send derives it from the HTML, so the old "no plain-text part" note is gone. The design checks also run live while you build: in a campaign's email editor on the Checks tab (below), and in the template builder as a Design check strip above the canvas, so a missing alt or a low-contrast footer is seen while building rather than at launch.

A finding about an image names the exact image: the review keeps its full address and its place in the email, and both the Checks tab and the review list show a small picture of it. A heavy-image finding lists every image over 200 KB, heaviest first (or, when only the total is over 800 KB, the three heaviest).

Checks in the email editor​

A campaign's email editor checks the email while you edit it, with the same review the Launch Review runs - the same rules, the same AI notes - so what the editor says is what the launch will say.

  • The bar. Under the editor's header one line counts what is open: "⚠ 2 to fix · ✦ 2 suggestions". Review opens the Checks tab. The bar hides with its x for the rest of the session.
  • The Checks tab sits beside Blocks and Style in the drag & drop editor (beside the code and the preview in the HTML editor), so the email stays in view. One line per issue: blockers and warnings first, then the AI review's suggestions in a calmer lavender style. A heavy image is one line per image, with a small picture of it.
  • Live. About a second and a half after you stop typing, the email is checked again: a fixed issue disappears and the counts follow. The AI notes are written once, when the editor opens - not on every keystroke.
  • Show me goes to the issue: an image is selected in the canvas, scrolled into view and outlined in orange; words the brand voice avoids are selected and every occurrence is marked; a note about the subject opens Settings with the subject field focused.

Where a fix is safe, the line offers it:

IssueFix
Heavy imageCompress makes a lighter copy at the width the email shows it (twice that for sharp screens, when it fits), as a JPEG under 200 KB when it can be - transparent images stay PNG, and never WebP, which desktop Outlook cannot show. The copy is saved as a new image in your asset library; the original stays. You see both pictures with their sizes, and the email changes only when you press Apply. The copy is made by a background worker, so it can take a few seconds.
Words the brand voice avoidsSuggest wording asks the AI, in your default brand voice, to replace just those words in their sentence. You accept or skip each suggestion. It uses your AI credits like the other writing tools.
Subject notes (long, promotions-tab words, an unverifiable adjective, or an AI note about the subject)Suggest subjects offers three subject lines; use one or keep yours.
Low contrast, text too smallFix sets a readable text colour, or 14 px.
Advice (for example "Third urgent send in two days")Dismiss.

A dismissed suggestion is kept on the campaign, per variant, so it stays dismissed the next time the editor opens and the Launch Review leaves it out too. Only the AI review's suggestions can be dismissed - a rule's finding, and above all a blocker, cannot. A journey's email steps work the same way: the step's editor has the same bar and Checks tab, is checked again while you type, and a suggestion dismissed there is kept on the journey, per step, and left out of the journey's Launch Review too. A journey that has not been saved yet shows the review it was opened from until its first save.

The review on the dashboard fetches the links in every message of the send - the <a href> targets of an email, the URLs in the text of an SMS, WhatsApp, Viber or push message - and says which are alive. Merge-field links (they only resolve per recipient) and Joryio's own unsubscribe, preference and tracking links are skipped. Each link gets one of three verdicts: reachable; broken (404, 410, a host that does not resolve, a refused connection); or could not confirm (403, 405, 429, a timeout, a site that challenges automated requests). Could-not-confirm is never reported as broken, so a site behind a bot wall does not fail every review.

Verdicts are kept for an hour, and only the dashboard review fetches. The send itself never waits on someone else's web server: at send time the gate reads the hour's verdicts and stops on a link the review already found broken, but fetches nothing - a scheduled send at 03:00 is not refused because a site was slow at 03:00. The checker refuses private and internal addresses on every redirect hop, checks at most 25 links per review, and gives the whole check 15 seconds.

Send anyway​

A transactional message without an unsubscribe line, a one-off to everyone: some sends must go out with a blocker on the list. When blockers stop the send, the review offers Send anyway (Activate anyway or Publish anyway on a journey). It asks for a reason, then sends. The reason, who gave it, when, and the blockers on the list at the time are kept with the campaign or journey and written to the audit log. On a scheduled campaign the override holds only while the campaign is unchanged: an edit after it sends the campaign back through the gate. A journey asks again on every activation and publish.

The AI review​

After the rules, one model pass reads the send the way a senior marketer on the brand would: the brand voice, the labels the content report gave this send and your last three sends on the channel, and the findings already on the list. It adds at most three notes as recommendations - never blockers - such as "urgent copy for a loyalty offer" or "the same tone as your last three sends". Each note names the variant or node it is about, and the part of the message - subject, preheader or body - when it is about one, and has a Fix button. A note you do not need can be dismissed, on the Summary step or on the editor's Checks tab; it then stays out of both.

Joryio pays for this call. It runs on Joryio's key, outside your AI budget, with a daily allowance per organization; when the allowance is used up the review says so and runs again the next day. The notes are kept for a day, so reopening the same send does not cost another call. An organization whose contract keeps its copy on its own provider can ask Joryio to route the pass to its own key instead.

The pass follows the same switch as content classification (Settings → General → Content classification): off means no copy of this workspace goes to a model, and the review says "AI review is off".

Dismiss, or "Don't suggest this again"​

An AI note can go away in two ways:

  • Dismiss hides the note on this campaign or journey only (per variant, or per step). The next email can get the same note again.
  • Don't suggest this again makes a rule for the whole workspace, for a note that is your style rather than a mistake - for example "Open question without an answer in the body" when your subjects ask a question on purpose. A small form opens under the note with one sentence, prefilled from the note's title, that you can reword (for example "A question in the subject does not need an answer in the body"). Save keeps it; Cancel keeps nothing. The note it was made from is kept with the rule as its example.

A rule works twice. Every AI review in the workspace is told not to raise notes the rules cover, and after the review a note whose title closely matches a rule's example is removed, whatever the model wrote. A rule only removes AI notes - never a blocker or a rule's finding - and it applies from the next review, including notes kept from an earlier one.

When you have dismissed the same note on three different campaigns or journeys in the last 90 days, the next time it appears it asks You've dismissed this 3 times - stop suggesting it?, with the sentence ready to edit and one button, Stop suggesting it, that saves the rule. Nothing is muted until someone saves; Not now leaves the note as it is.

The rules are listed in Settings → Launch review → Review preferences, where any of them can be deleted. Adding or deleting a rule needs the same access as dismissing a note (editing campaigns or journeys), or access to edit settings.

Your own rules and the settings page​

Settings → Launch review is the review's own page (it runs for every workspace, so it no longer sits on the Approvals add-on page). It holds four things:

  • Enforcement - Blockers stop the send, on by default. Off, the findings are still shown; the send or activation goes ahead. The review itself cannot be turned off.
  • AI review checks - two switches that widen what the AI review looks for: Spelling and typos (misspelled words with the correction, in the language of the message) and Fit with the brand voice (wording that does not match your default brand voice's tone, formality or vocabulary, and what to say instead). They run on the review panel only, never inside the send, and follow the content classification switch.
  • Review preferences - the AI notes this workspace asked not to get again, made with Don't suggest this again on a note (see Dismiss, or "Don't suggest this again"): each rule's sentence, the note it was made from, who added it and when, and Delete. A workspace keeps up to 50.
  • Your own rules - a rule looks for a piece of text in one part of the message (subject or title, preheader, body, or anywhere) and fails when it is missing, or when it is present. Each rule is a blocker or a recommendation, and can be narrowed to campaigns or journeys, to channels, or to tags; an empty choice means all. Examples: every promotional email must carry "פרסומת" in its subject; no email without "ט.ל.ח" in the body; SMS on the vip tag must not say "free". A failed rule shows under the rule's name with the sentence you wrote for it, and has a Fix button like every other finding.

Rules are plain text matches, not patterns, so a rule can never slow the send gate down. Words your default brand voice lists under vocabulary to avoid are checked on every send as a recommendation, with no rule needed.

The rule library and suggestions​

Under your rules the page shows two more lists. Suggested for you holds rules chosen from what Joryio knows about the workspace, each with its reason: an Israeli timezone suggests "פרסומת" in a promotional subject and "ט.ל.ח" in the body; a North American one suggests a postal address line; SMS sending suggests a "STOP" line; the industry your default brand voice names suggests its legal line (a risk disclaimer for finance, "consult your doctor" for health, an age line for alcohol); and up to three of the brand voice's phrases to weave in become recommendation rules. Rule library holds the ready-made rules for your market - a rule bound to a market (the Israeli pair, the North American postal address) shows only in workspaces whose timezone is there - grouped as legal, deliverability, quality and brand: no leftover "lorem", "TBD", "XXX" or a "test" subject; no double exclamation marks; the brand name spelled the one right way; no competitor names; no "free", "guaranteed" or "act now" for teams that want to stay out of the promotions tab.

Add is one click. A rule added from the library is a rule like any other - narrow it, reword it, make it a blocker - and a suggestion is not repeated once the workspace holds it. Rules marked complete the text need your own words (your address, your brand name, a competitor) before they can run.

For developers​

GET /campaigns/{id}/launch-review and GET /journeys/{id}/launch-review return the findings; a refused send or activation answers 409 with code launch_review_blocked and the blockers in the body. See the Campaigns API and the Journeys API.