Skip to content

Findings Catalog

Synapse Inspect includes 130+ finding codes across many categories, spanning email, push, in-app, SMS, and WhatsApp. Each code is a stable identifier -- codes are never removed or renumbered. New codes are added over time but existing ones remain unchanged.


Categories

CategoryChannelDescriptionExample Code
htmlEmailHTML structure and validityHTML_MISSING_DOCTYPE
cssEmailCSS compatibility across email clientsCSS_SHORTHAND_ISSUE
imagesEmailImage format, size, and optimizationIMG_MISSING_ALT
linksEmailBroken links, redirect chains, trackingLINK_BROKEN
spamEmailSpam trigger words and patternsSPAM_TRIGGER_WORDS
accessibilityEmailScreen reader and accessibility complianceA11Y_LOW_CONTRAST
renderingEmailCross-client rendering issuesRENDER_CLIENT_DEVIATION
dark_modeEmailDark mode support and compatibilityDARK_MODE_NO_META
subjectEmailSubject line and preheader qualitySUBJECT_TOO_LONG
trackingEmailUTM parameters and tracking linksTRACKING_UTM_MISSING
pushPushPayload size, per-platform length, deep links, NLTPUSH_PAYLOAD_APNS_OVERSIZE
in_appIn-appPlacement, payload size, CTA limits, NLTIN_APP_PAYLOAD_OVERSIZE
smsSMSSegments & encoding, opt-out, sender number, NLTSMS_MULTI_SEGMENT
whatsappWhatsAppMeta placeholder rules, body limit, category, NLTWA_VARIABLE_COUNT_MISMATCH

Severities

SeverityMeaningSend Impact
criticalBroken rendering or deliverability riskBlocks send (unless overridden)
warningShould be fixed but won't break deliveryDoes not block
infoBest practice recommendationDoes not block

Finding Structure

Every finding returned by the API has this structure:

FieldTypeDescription
codestringStable identifier (e.g., HTML_MISSING_DOCTYPE)
severitystringcritical, warning, or info
categorystringOne of the 10 categories above
titlestringShort human-readable title
descriptionstringDetailed explanation of the issue
fix_textstringActionable fix instructions
ast_node_idstring or nullLinks to a specific block in the template editor
client_specificstring or nullWhich email client this affects (e.g., outlook_2019)
contextobject or nullAdditional context data for the finding

Actions

Each finding supports one or more actions:

ActionDescription
auto_fixSynapse can automatically fix this issue (see Auto-Fixers)
snoozeTemporarily dismiss the finding (1--365 days)
mark_fixedMark as manually fixed
mark_false_positiveDismiss as a false positive

Sample Findings by Category

HTML

CodeSeverityTitle
HTML_MISSING_DOCTYPEcriticalMissing DOCTYPE declaration
HTML_MISSING_CHARSETcriticalMissing charset declaration
HTML_MISSING_LANGwarningMissing lang attribute on <html>
HTML_MISSING_VIEWPORTwarningMissing viewport meta tag
HTML_DEPRECATED_TAGwarningDeprecated HTML tag used
HTML_INVALID_NESTINGwarningInvalid HTML nesting
HTML_MISSING_TITLEinfoMissing <title> tag

Dark Mode

CodeSeverityTitle
DARK_MODE_NO_METAwarningMissing color-scheme meta tag
DARK_MODE_NO_CSS_SCHEMEwarningMissing supported-color-schemes meta
DARK_MODE_HARDCODED_BGwarningHardcoded background color without dark variant
DARK_MODE_HARDCODED_TEXTwarningHardcoded text color without dark variant
DARK_MODE_LOGO_NO_SWAPwarningLogo image without dark mode swap

Accessibility

CodeSeverityTitle
A11Y_MISSING_ALTwarningImage missing alt text
A11Y_LINK_NO_TEXTwarningLink without descriptive text
A11Y_LOW_CONTRASTwarningLow color contrast ratio

Spam

CodeSeverityTitle
SPAM_KEYWORD_FOUNDwarningSpam trigger keyword detected
SPAM_SCORE_HIGHcriticalHigh spam score
SPAM_ALL_CAPS_SUBJECTwarningSubject line is all caps

Subject & Preheader

CodeSeverityTitle
SJ001warningSubject line missing
SJ007warningPreheader text missing
Note

Subject and preheader on content-only templates. Synapse templates are content-only, so a template body has no <title> or hidden preheader element for these checks to read — SJ001 and SJ007 would fire on every template unless you tell Inspect what the email will actually send with. Pass subject and preheader on POST /v1/inspect: supplying subject suppresses SJ001, and supplying preheader suppresses SJ007. When no subject is supplied, SJ001 is reported as a warning (not a hard block), since a subject legitimately resolves at send time from the flow step, campaign, or template. This is how the dashboard and pre-send checks evaluate the complete email rather than the bare fragment.


SMS

Full guide: SMS Quality Checks.

CodeSeverityTitle
SMS_NLT_REQUIRED_MISScriticalRequired NLT field is missing on the sample contact
SMS_NLT_UNRESOLVED_EXPRESSIONwarningSMS body has unresolved NLT expressions
SMS_UCS2_FORCEDwarningA non-GSM-7 character forces expensive UCS-2 encoding
SMS_MULTI_SEGMENTwarningSMS body spans multiple segments
SMS_BODY_TOO_LONGwarningSMS body spans many segments
SMS_NO_OPT_OUT_LANGUAGEwarningSMS body has no opt-out / STOP language
SMS_FROM_NUMBER_INVALIDwarningTemplate from_number is not a valid E.164 number

WhatsApp

Full guide: WhatsApp Pre-Submission Inspect.

CodeSeverityTitle
WA_NLT_REQUIRED_MISScriticalRequired NLT field is missing on the sample contact
WA_NLT_UNRESOLVEDwarningWhatsApp template has unresolved NLT expressions
WA_VARIABLE_COUNT_MISMATCHwarningPlaceholder count does not match the declared variable schema
WA_PLACEHOLDER_NOT_SEQUENTIALwarningPlaceholders are not numbered sequentially from 1
WA_PLACEHOLDER_ADJACENT_OR_EDGEwarningPlaceholders are adjacent or at the body's start/end
WA_BODY_OVER_LIMITwarningTemplate body exceeds Meta's 1024-character limit
WA_CATEGORY_INVALIDwarningTemplate category is not a valid Meta category
Note

The WhatsApp catalog also defines WA_HEADER_OVER_LIMIT, WA_FOOTER_OVER_LIMIT, and WA_BUTTON_LABEL_OVER_LIMIT. These are reserved for when header / footer / button components are stored — the current template model stores the body only, so they do not fire on today's templates. See the WhatsApp guide.

Note

This page shows a representative sample. The full catalog includes 130+ codes.