---
title: "21. External Integrations: Troubleshooting"
description: Confirm the external system received a successful response.
url: "https://peikly.com/docs/external-integrations-troubleshooting/"
updated: "2026-10-11"
category: External Integrations
tags:
  - Manual sync
---

# 21. External Integrations: Troubleshooting

## Errors, Messages, and Common Fixes

| Issue / Message | Why It Happens | How to Fix |
| --- | --- | --- |
| `401 Unauthorized` | Missing or invalid token | Check token in Settings; ensure correct Bearer format |
| `403 Forbidden` | Token exists but lacks required scope | Regenerate token in Settings |
| `400 Bad Request: missing externalEventId` | Required field omitted | Include `externalEventId` in payload |
| `400 Bad Request: signature invalid` | HMAC verification failed | Check signature algorithm; use raw token as HMAC key |
| `400 Bad Request: timestamp expired` | Request timestamp outside allowed window | Sync your server clock; send request immediately after signing |
| `400 Bad Request: nonce reused` | Same nonce sent within replay window | Use a unique nonce per request (UUID or random string) |
| `429 Too Many Requests` | Rate limit hit | Slow down the event stream; implement backoff |
| `workflowDispatchStatus: feature_disabled` | Automation not in plan | Upgrade to Enterprise plan |
| `workflowDispatchStatus: no_matching_workflows` | No active workflows match | Create and activate a matching workflow |
| `workflowDispatchStatus: rate_limited` | Automation rate limit | Wait for the rate limit window to reset |

### Diagnosis Flow: Event sent but nothing happened

1. Confirm the external system received a successful response.
2. If the response says `duplicate`, send a genuinely new event.
3. If the response says `no_matching_workflows`, activate or create a matching workflow.
4. If the response says `triggered`, check workflow execution history for step-level failures.
5. If WordPress is the source, verify **Peikly -> Request Tracking** before changing Application configuration.

### Diagnosis Flow: WordPress request failed

1. Open **Peikly -> Request Tracking**.
2. Read the HTTP code on the failed row.
3. Match it to the next action:
   - `401` -> replace the token.
   - `403` -> confirm token scope/feature access and reconnect.
   - `400 signature invalid` -> fix the plugin configuration or reconnect using a fresh token.
   - `429` -> reduce event volume and retry later.
   - `5xx` or network failure -> the plugin retries on its own; if it keeps failing, check that the WordPress server can reach Application.
4. Retry one event only after the underlying cause is fixed.

### Best Practices

- Use a UUID v4 as the `externalEventId` — this guarantees uniqueness and deduplication.
- Sign requests immediately before sending to avoid timestamp expiry.
- Implement exponential backoff for `429` responses.
- On specific store-event triggers (for example **Cart Abandoned**), put **Add/Upsert Contact** before any step that references contact data. Each event also fires **External Integration Event Received**, so avoid running both kinds of workflow for the same event ([11.8](/docs/triggers-store-and-website-events-broadcasts-and-schedules/)).
- Monitor the webhook monitoring widget on your Home Dashboard for event delivery stats.
