Immutable solution version
Loops workflow triggers: convert event dots to underscores or the workflow never fires
Complete solution
Shows how to fix loops workflow triggers: convert event dots to underscores or the workflow never fires. Use it when you hit this exact problem. Skip it when your error message or symptom looks different.
TL;DR
Workflow trigger naming: Loops workflow triggers use underscores where your event source uses dots.
Steps
- Two Loops setup gotchas that silently break integrations: 1. API key location: get it at Loops -> Settings -> API (https://app.loops.so/settings?page=api), click Generate key, and store it in an environment variable. Calls with a missing or wrong key fail auth; validate the key with a cheap read (list mailing lists) before wiring up sends. 2. Workflow trigger naming: Loops workflow triggers use underscores where your event source uses dots. Map payment.confirmed -> paymentconfirmed, subscription.created -> subscriptioncreated, refund.succeeded -> refund_succeeded when creating the trigger in the loop builder. The trigger-name trap is silent: a trigger registered as payment.confirmed never fires, and nothing errors. If events reach Loops (visible in the activity log) but the workflow stays quiet, compare the trigger name character by character against the underscore form.
When to use
You are seeing this: Two Loops setup gotchas that silently break integrations: 1. Use this skill when you run into "Loops workflow triggers: convert event dots to underscores or the workflow never fires".
When not to use
If your error message or symptom does not match what is described above, this is probably not your fix. Search for your exact error text instead of forcing this one to fit.
Versions
No specific versions are mentioned in the source material, so treat the fix as generally applicable and check the examples against whatever you have installed.
Why this happens
The original report does not dig into a root cause. It documents the symptom and the fix that resolved it.
Sources
- https://app.loops.so/settings?page=api
Evidence
Source: StellarTools Loops integration doc: when triggering Loops workflows from external events, the trigger name replaces dots with underscores, so a payment.confirmed event maps to a payment_confirmed trigger in Loops. If you send the dotted name, the workflow never fires and nothing errors on the Loops side, which makes it look like the event vanished. The doc also notes the API key lives at Loops Settings -> API (app.loops.so/settings?page=api). Normalize event names (dots to underscores) at the integration boundary before calling the Loops API.
Verified resolution: Two Loops setup gotchas that silently break integrations: 1. API key location: get it at Loops -> Settings -> API (https://app.loops.so/settings?page=api), click Generate key, and store it in an environment variable. Calls with a missing or wrong key fail auth; validate the key with a cheap read (list mailing lists) before wiring up sends. 2. Workflow trigger naming: Loops workflow triggers use underscores where your event source uses dots. Map payment.confirmed -> paymentconfirmed, subscription.created -> subscriptioncreated, refund.succeeded -> refund_succeeded when creating the trigger in the loop builder. The trigger-name trap is silent: a trigger registered as payment.confirmed never fires, and nothing errors. If events reach Loops (visible in the activity log) but the workflow stays quiet, compare the trigger name character by character against the underscore form.
Source URL: https://github.com/payrouteshq/stellartools/blob/HEAD/apps/web/app/landing/docs/marketplace/loops.mdx
By @issueatlas · Version 2 · Exact version
Embed this skill
Add this card to a website or documentation page. It links to the current skill on Vectle.
<a href="https://vectle.com/skills/skl_SG8Qx_6NeiMe2185rMwi3g" style="display:inline-block;padding:12px 16px;border:1px solid #d8ddd3;border-radius:8px;color:#194d35;text-decoration:none;font:14px/1.5 system-ui,sans-serif">Loops workflow triggers: convert event dots to underscores or the workflow never fires <span>— Vectle</span></a>