Skip to content

How the transactional content review works

Every template version is checked automatically to confirm it's transactional before it can send.

Transactional Email only sends transactional email — messages a recipient needs because of something they did or an account they hold. To keep it that way, every template is reviewed automatically before it can send. A template that’s clearly promotional fails the review, and sends that use it return review_failed.

The review protects your sending reputation as much as ours: mailbox providers treat promotional mail differently, and mixing the two hurts delivery of the receipts and notices your customers are waiting for.

Reviews are tied to a template version. A new version — any change to the subject, layout, modules, text, or styles — gets a new review. Renaming the email in HubSpot doesn’t.

  • When you choose the template in a Send transactional email action, the review starts in the background, so it’s usually finished before the first send.
  • When you edit the template, the new version is reviewed as soon as Transactional Email picks up the change (within about 15 minutes, or right away after Refresh).
  • At send time, if the current version hasn’t been reviewed yet, the send waits for the review. It waits up to 10 minutes; if the review still isn’t done, the send fails with review_pending.

Nothing is ever sent unreviewed.

Settings → Templates lists every template you’ve picked in a workflow action, with its review status. Just picked one? Click Refresh list to see it. The review status means:

Status What it means
Not reviewed yet No review has been requested for this version.
In review The review is running. Sends wait for it, up to 10 minutes.
Approved The version is transactional. Sends go out.
Flagged as promotional The version failed. The flagged passages are listed below the table.
Review error The review couldn’t finish. Sends wait up to 10 minutes, then fail with review_pending; we’re alerted automatically. A Super Admin’s Refresh tries the review again.

The review reads the template’s subject line, the text in its rich text modules and buttons, its image alt text, and its link addresses. Tokens are left unfilled, so the review never sees your contacts’ data.

It’s tuned to flag only content that is clearly promotional. A template fails only when the review is confident it’s promotional and can quote at least one promotional passage word for word from your email — a finding it can’t match to your text is discarded. Examples of what it flags:

  • Discounts, coupon codes, and sales (“20% off your next order”).
  • Upsells and cross-sells (“Upgrade to Pro,” “You might also like”).
  • Product announcements and newsletter content.
  • Marketing calls to action unrelated to the transaction.

These are not promotional and pass: your product and company names, links to the customer’s account or order, help-center and support links, “View your invoice” buttons, and legal or compliance footers.

  • Sends that use this version fail with review_failed.
  • Your alert recipients get one email for that template version. It quotes each flagged passage, explains why, and suggests a fix — for example, “Use code SAVE20 for 20% off your next order!” — Offers a discount on a future purchase. Remove the discount code, or send it in a marketing email instead.
  • Once you edit the email and the new version passes, sends go out again.

There is no override. If you think a result is wrong, email support@cambiumapps.com with the template name and a person will review it.

Does every send get reviewed? No. The review runs once per template version, not per send, so sends of an approved version go straight out.

What if the review service is down? Sends wait up to 10 minutes and then fail with review_pending; we’re alerted automatically. Once it’s back, a Super Admin can click Refresh in Settings → Templates to review the template again. Re-enroll the records once sends are going out again.

Is my contact data sent to the review? No. The review sees the template as you wrote it, with tokens unfilled.