Troubleshooting
Symptom, where to look, and what usually fixes it.
Work down this page in order. Most problems resolve at the first or second step, and each step tells you which screen holds the answer.
Start here
Nothing happened at all
Events: did anything arrive?
Something ran but ended badly
Executions: expand the row, read the Error tab. Codes explained in Errors and failure states
It succeeded but the data is wrong
It is slow
It worked yesterday and not today
Connections, then Pending updates
One customer is affected, others are not
Connections, scoped to that customer
Nothing ran
No event in the log
If Events shows nothing, the problem is before fastn.
Webhook
Is the sending system pointed at the right URL? Does it require the x-fastn-access-key header, and is the sender sending it?
Schedule
Is the trigger Active rather than Disabled? Is its timezone what you assumed?
App event
Is the connector's Webhook config set up, and does the customer have an active connection?
Filter the Events chips by Scheduled: a count of zero on a schedule you expected to fire is the answer.
Event Delivered, but no execution
A Delivered event means the payload arrived and was handed on. If no execution followed:
The workflow was never published. Every call returns
WORKFLOW_NOT_PUBLISHEDuntil a snapshot is published, so nothing runs and nothing appears in Executions. The workflows list shows this as Not published / Unpublished, and its tooltip says so: "Never published — this workflow cannot run yet." This is the likeliest cause of nothing ran at all. Publish a snapshot from the editor.The workflow is disabled. Check the Status toggle in its Configuration panel.
The trigger route points at an environment with nothing deployed to it. A named environment runs the version deployed there, and the fire fails if nothing is. Either deploy, or point the route at
test, which runs the latest published version.
Event never Delivered
It exhausted its delivery attempts. The row shows a failure state in the Status column; fix the cause, then Replay it. Attempt count and backoff are on the webhook trigger. See Triggers.
It ran and failed
Status: Failed
Expand the execution row for its result banner and raw response, then check Traces for the call that was rejected. The usual causes, in order of frequency:
The connection is Expired or Failed. The customer re-authorises through your widget.
The upstream API changed. Check Pending updates for a proposal against that connector.
The data did not match the contract. A field the mapping expects is absent or the wrong type.
A permission is missing. The customer's OAuth grant may not cover the scope the action needs.
Status: Failed with a Dependency Error tag
The commonest failure of all, and it means something the workflow called refused: nearly always a connector action, not your code. Runs usually die in under a second, because they stop at the first call that will not work.
Expand the row and open the Error tab. The AI Diagnosis names the step that broke and, usually, the fix; Error Details beside it carries the raw message. Most of the time the answer is a connection that is expired, revoked, pinned to something unusable, or belonging to another organisation.
It will not clear on its own. Retry policies cover transient failures, and an invalid connection is not transient: a daily schedule in this state fails at the same minute every day until someone acts.
Full breakdown, with the causes in order of frequency, in Errors and failure states.
Status: Timeout
The tier's budget ran out. Before raising the timeout, open Traces:
One slow call: the fix is upstream, or batching, not a longer timeout.
Hundreds of calls: batch them, or move to the Long tier.
A Pending trace that never resolved: the upstream system accepted the request and never answered.
Escalate on timeout retries one tier up (instant to standard), which buys time without redesigning. It returns a queued execution id to poll, so the caller's response shape changes; the option is hidden on the Long tier, which has nothing above it.
Status: Failed with no obvious error
Expand the row and read peakSandboxMB against sandboxMemoryLimitMB. Out-of-memory never retries, so a run that hit the ceiling simply stops rather than recovering on the next attempt.
Retries
The retry policy retries transient failures. Code errors, data errors and out-of-memory never retry, however many attempts you allow, so if the same run fails identically every time, the policy is not the thing to adjust.
It succeeded but the data is wrong
Open Sync reports. It shows what the run did, record by record, which distinguishes the record was filtered out from the record was never seen.
If the page is empty, the workflow does not call fastn.diff.compare. Ask the agent to add diff reporting; reconstructing this from logs afterwards is far harder.
Common causes:
A field was never mapped
The workflow's field mappings: tell the agent what is missing.
A filter is too broad
The include/exclude rules in the workflow.
Duplicates downstream
No deduplication key on the trigger, or no fastn.state idempotency guard.
Stale values
A pinned connector version that predates a field. See Version pins on the connector.
Duplicates after a replay
Replay re-runs the workflow for real. Without protection it will write twice.
Two defences, and you want both:
A deduplication key on the webhook trigger: a field that uniquely identifies each event, so a retried delivery from the sender does not run the workflow twice.
An idempotency guard in the workflow using
fastn.state:
See Workflow runtime API.
It works for one customer and not another
Almost always a connection. Open Connections: the Customer column tells you whose each one is, and the search box narrows the list.
Expired
The customer re-authorises through your widget.
Failed
Access was revoked, a password changed, or a key was rotated. Same fix.
Inactive
The row menu offers Reconnect and Disconnect. There is no re-enable: reconnect it.
Missing
They never connected that system.
Use the search box rather than the status filter chips: see Known issues below.
Also check whether that customer is pinned to an older connector version. See Version pins on the connector.
API calls are rejected
WORKFLOW_NOT_PUBLISHED
No snapshot has been published for that workflow. Publish one from the editor.
Rejected with a test key
Missing X-fastn-Test-Mode: true. A test key is refused without it.
Wrong code ran
x-fastn-env. test means the latest published version; any other slug means the version deployed there.
You deleted something by mistake
Connectors, connector actions and workflows go to Trash and restore with slug and history intact. Other resources (as the product puts it, "widgets and their integrations among them"), are deleted immediately and cannot be restored from that page.
Known issues
These are current product defects rather than anything you have misconfigured. Route around them.
Connections filter chips (Active/Inactive/Expired/Failed) return nothing
The chips report 0 for every state even when rows are plainly Active. Search by customer or connector instead.
A connector shows Connected in the list but 0 connections on its detail page
The list badge and the detail count disagree. Check Connections for the real answer.
Created: Invalid Date on a connector overview
A date-rendering bug, not a broken connector.
Trash → Actions hangs on Loading deleted actions…
The tab never resolves. Deleted actions cannot currently be reviewed there.
The connector catalogue count is higher than the systems you recognise
Several systems appear twice, once managed and once Custom. The headline count is not a count of distinct systems.
Making the next one easier
Turn on failure alerts on Alerts
Finding out from a customer
Add an alert on Broken connectors above 0
Expired credentials going unnoticed
Add an alert on Total runs below 1 over 24 hours
A schedule that silently stopped
Set a deduplication key on every webhook trigger
Duplicate records after any replay
Add fastn.diff.compare to every sync
Reconstructing a run from logs
Last updated
Was this helpful?

