---
title: "Frequently asked questions"
description: "Common questions about sending transactional email and HTTP requests from Shopify Flow: plans, deliverability, permissions, providers and data handling."
canonical: "https://docs.workflow-transactional-email.app/faq"
---

# Frequently asked questions

Answers to the questions we get most often. If yours is not here, the [History and troubleshooting](https://docs.workflow-transactional-email.app/history-and-troubleshooting.md) guide covers failures in detail, or use the Help Center to reach us.

### Do I need a paid Shopify plan to send HTTP requests?

No. Shopify's own **Send HTTP request** action is restricted to certain plans, but the **HTTP Request** action from this app works on every Shopify plan, including Basic. That is one of the main reasons merchants install it.

### What Shopify data does the app access?

None. The app requests **no access scopes at all**. It cannot read your products, orders or customers.

Any customer data that ends up in an email gets there because *you* passed it in from Shopify Flow through the **Variables (JSON)** field. Flow reads your store data, and you choose what to hand over.

### Which email providers can I use?

Three kinds of sender:

- **Microsoft 365** - Outlook.com and Microsoft 365 mailboxes, plus shared mailboxes and group mailboxes.
- **Google** - Gmail and Google Workspace mailboxes, plus your "Send mail as" aliases.
- **SMTP** - any SMTP server, including SendGrid, Mailgun, Amazon SES, Postmark, or your own.

Microsoft and Google connect through OAuth, so there are no credentials to store or rotate.

### Will my emails land in spam?

Deliverability comes from the sending mailbox, not from this app. Since messages go out through *your* provider and *your* domain, you inherit your own sending reputation.

To give yourself the best chance:

- Send from a domain with SPF, DKIM and DMARC properly configured.
- Use a sender address on a domain you own, not a free consumer address.
- Keep transactional email transactional. Order updates and account notices are expected by recipients; bulk marketing from a transactional setup is not.
- Include a real postal address and identifying details in your footer preset.

### Can I send to more than one recipient?

Yes. **To Email(s)**, **CC Email(s)** and **BCC Email(s)** each accept multiple addresses, one per line. The whole send counts as a single action against your plan.

### Does a test email use up my quota?

No. **Send test email** and the HTTP request **Test** button are both free. Only actions triggered by Shopify Flow count. Actions that fail before running - a misconfiguration or a duplicate retry - have their quota slot refunded.

### Why is my variable coming out blank?

Templates render leniently by design: an unknown variable becomes an empty string rather than throwing an error, so a typo never blocks a customer's email. The trade-off is that a typo looks like a blank.

Check the spelling and capitalisation against the JSON you passed in the Flow action, and confirm you used `{{ secrets.key }}` rather than `{{ secret.key }}`. See [Variables and Liquid](https://docs.workflow-transactional-email.app/variables-and-liquid.md).

### Why does my email show [object Object]?

You interpolated a whole object rather than a field on it. HTTP requests serialise objects to JSON automatically; emails do not.

Use `{{ variables.customer.firstName }}` rather than `{{ variables.customer }}`, or use a **Loop** block to iterate over an array.

### Can I change a layout from visual builder to HTML later?

No. The editor choice is fixed when the layout is created, because the two store their content differently. Create a new layout in the mode you want and repoint your Flow action at it.

Within the rich text / HTML mode you *can* switch between the rich text editor and raw HTML, though going back to rich text may simplify complex tables and inline styles.

### Can I reuse a design across several emails?

Yes, in two ways:

- **Save as template** stores a whole design under **My templates**, ready to start a new layout from.
- **Header and footer presets** are shared live: edit the preset once and every layout using it updates.

You can also **Export** a layout and **Import** it into another store.

### What happens when I hit my plan limit?

Further Flow actions are rejected with a plan-limit error and Shopify Flow marks the step as failed. Nothing is queued, so those messages do not go out later.

The quota is a rolling 30-day window, so capacity returns as older actions age out. Turn on the quota notifications to get warned at 80% and 100%. See [Plans and usage](https://docs.workflow-transactional-email.app/plans-and-usage.md).

### Can I attach a PDF invoice to an email?

Yes. Attachments can be up to 15 MB per file and 20 MB per layout, in **Attach** mode. Above that - or when sending through Microsoft 365, which rejects more than 4 MB of inline attachments - switch to **Link** mode and the email carries a download link instead. See [Attachments and images](https://docs.workflow-transactional-email.app/attachments-and-images.md).

### Why can I not delete this template, sender or secret?

Because a Shopify Flow step still references it. Deleting it would break that workflow silently, so the app hides the delete action and tells you what to update first.

Open the Flow workflows in question, point them at something else, and the delete becomes available.

### Why does Microsoft or Google show a different app name?

The consent screen may show **Flow Action Extensions**, the app's previous name. It is the same app - the OAuth registration name has not been updated yet. It is safe to approve.

### Can Shopify Sidekick use this app?

Yes, read-only. Sidekick can list your layouts, senders, HTTP requests and secret *names*, report run history, and explain why a specific action failed.

It never returns secret values, SMTP passwords, OAuth tokens, HTTP header values or raw payloads, and it cannot change anything - it links you into the app instead.

### Where is my data stored?

In the EU. Databases and caches are region-local with encryption at rest, and credentials - SMTP passwords, OAuth tokens and secrets - get an additional layer of envelope encryption through a dedicated key management service. Plaintext credentials are never persisted.

## Still need help?

Use the Help Center to report a bug, request a feature, or contact support directly. The in-app chat bubble on the app dashboard is usually the fastest route, since it keeps the conversation tied to your store.
