---
title: "History and troubleshooting failed actions"
description: "Every email and HTTP request is logged with request, response, timing and errors. How to read History, resend an action, and fix the most common failures."
canonical: "https://crm-tool.k8s-gcp-dev.eu.codecreationlabs.cloud/h/flow-transactional-email/history-and-troubleshooting"
---

# History and troubleshooting

Every action this app runs is recorded. **History** is the first place to look when an email did not arrive or a request did not land.

![The History list](https://cdn-dev.eu.codecreationlabs.cloud/crm-tool/uploads/SjJ78gKLnLlocopCui3Cs62dJbGZ7F1n/acab8552bfe46eee.png)

## The list

Columns: **ID**, **Name**, **Type**, **Status**, **Duration** and **Executed At**.

Filter by:

- **Action Type** - HTTP Request or Email
- **Status** - Success, Failed or Pending

Search matches the name of the layout or request. Arriving here from an HTTP request's **Request history** button pre-filters to that one request, with a **Show all events** button to clear it.

## The detail view

![An action detail view](https://cdn-dev.eu.codecreationlabs.cloud/crm-tool/uploads/SjJ78gKLnLlocopCui3Cs62dJbGZ7F1n/6338ac0118332a70.png)

Opening an entry shows:

| Card | Contents |
| --- | --- |
| **Event Details** | Event ID, action type, status, duration, execution time, and the Flow run id |
| **Error Message** | The provider's or API's actual error, when the action failed |
| **Request Data** | What was sent - recipients, sender, resolved subject, variables, or the resolved HTTP request |
| **Response Data** | What came back - the provider message id, or the HTTP status and body |

The title tells you which sender was used, for example `Order email via support@acme.com (MICROSOFT)`.

> [!NOTE]
> Secret values are redacted from request data before it is stored, so your tokens never end up in your own logs. If you see a blank where a secret should be in the resolved request, that is the redaction - not a broken reference. To check a reference actually resolved, use the **Test** button on the request instead.

## Resending an action

The detail page has a **Resend** button. It re-renders the layout with the original variables and sends again to the original recipients through the same sender, or re-executes the HTTP request exactly as it was sent.

It runs immediately and counts as one action against your plan. Resend is not available for actions that went through the fallback default sender.

## Common failures

**The email never arrived, and there is no History entry at all.**
The action never ran. The problem is in Shopify Flow, not here: check the workflow is turned on, the trigger fired, and any condition actually matched. Tag conditions match exactly, so `VIP` and `vip` are different.

**Status is Failed with an authentication error.**
For SMTP, the credentials or port are wrong - open the SMTP server and press **Test Connection**. For Microsoft 365 or Google, the connection may need re-authorising: check **Email Senders → Connected accounts** for a **Reconnect required** badge.

**A variable came out blank.**
Templates render leniently: an unknown variable becomes an empty string rather than an error. Check the spelling and case against the JSON you passed in the Flow action, and remember it is `{{ secrets.key }}`, not `{{ secret.key }}`. See [Variables and Liquid](https://crm-tool.k8s-gcp-dev.eu.codecreationlabs.cloud/h/flow-transactional-email/variables-and-liquid.md).

**An email body shows `[object Object]`.**
You interpolated a whole object. In emails you must reach into it (`{{ variables.customer.firstName }}`) or loop over it. Only HTTP requests serialise objects to JSON automatically.

**The message was rejected for size.**
Attachments over 20 MB in total are blocked, and Microsoft 365 rejects more than 4 MB of inline attachments. Switch the large files to **Link** mode. See [Attachments and images](https://crm-tool.k8s-gcp-dev.eu.codecreationlabs.cloud/h/flow-transactional-email/attachments-and-images.md).

**An HTTP request fails with `SSRF blocked`.**
The destination resolves to a private or internal network address, which is refused for safety. Use a publicly reachable endpoint.

**Everything fails at once with a plan limit message.**
You have used your 30-day allowance. See [Plans and usage](https://crm-tool.k8s-gcp-dev.eu.codecreationlabs.cloud/h/flow-transactional-email/plans-and-usage.md).

## Asking Sidekick

Shopify Sidekick can query this app directly, read-only. It is often quicker than filtering History by hand:

- "Did any emails fail this week?"
- "Why did my last email send fail?"
- "Which email senders are set up?"
- "Do I have an HTTP request for Airtable?"

Sidekick will never return secret values, SMTP passwords, OAuth tokens, HTTP header values, or raw payloads - it links you into the app for those.

## Still stuck

Open a bug report with your store domain, the layout or request name, and the timestamp of the run. See **Report a bug** in the Help Center.
