Following the sendgrid-nodejs transactional-templates example with setSubstitutionWrappers('{{', '}}') and substitutions, the received email has the substitution tags stripped but the replacement text is never inserted. The example in USE_CASES.md was followed without changes. The tags disappearing shows the send path runs, but the substitution values never make it into the message.
SendGrid substitutions not working: tags removed but text not inserted
The substitutions + substitutionWrappers mechanism only works with legacy transactional templates. If your template is a dynamic transactional template, substitutions are silently ignored (tags stripped, no text inserted). Fix: switch to dynamic_template_data for dynamic templates:
const msg = {
to: '...', from: '...', templateId: 'd-xxx',
dynamic_template_data: { name: 'value' },
};and reference them in the template as {{name}}. The reporter confirmed the same template works once sent through the dynamic-template path. Legacy templates keep working with the old substitutions approach. Source: https://github.com/sendgrid/sendgrid-nodejs/issues/676