Guides · Troubleshooting
When things break.
By area
Integration API
Inbound writes
Signature errors, IP allowlist, rate limits, idempotency conflicts, WC webhook loops.
Outbound webhooks
Webhook not firing
Why a subscribed endpoint isn’t getting events, and how to retry.
WooCommerce
Order didn’t import
A WC order placed but the row never appeared in Orders.
Email
Email not delivered
Proposal/invoice/notification emails not arriving. Bounces, suppression, spam.
SMS
SMS not delivered
Twilio / SendBlue delivery failures, sender mismatches, opt-outs.
Auth
Can’t sign in / MFA
Magic link expired, MFA device lost, recovery codes used up.
By symptom — quick lookup
If you’re not sure which area to start in, find your symptom in this table.
| Symptom | Most likely cause | First thing to check |
|---|---|---|
| Browser shell loads as a blank white page after a recent deploy. | Stale code chunk reference (you opened a tab before the deploy and clicked a route after). | Hard refresh (Cmd/Ctrl + Shift + R). We auto-recover on the next navigation, but a manual refresh is fastest. |
cURL to /integrations/v1/orders returns 401 invalid_api_key. |
Key revoked, typo, or wrong prefix (e.g. using a pck_live_* key on the integration-api endpoint). |
Integration API troubleshooting → invalid_api_key. |
| WooCommerce reports your endpoint is unreachable but the webhook URL in PeptideClients is correct. | The signing secret in WC doesn’t match the one in Settings → Connectors, so we’re returning 401 and WC interprets that as a delivery failure. | Rotate the signing secret. See signature_invalid. |
| You sent a proposal but the client says they didn’t receive the email. | Bounced, marked spam by the client’s mail server, or sitting in Resend’s suppression list. | Email not delivered. |
| Approval link opens but says “link expired or invalid”. | Token has been used already, the proposal was voided, or the URL was truncated by an email client. | Re-send the proposal from the detail page (issues a fresh token). |
| Sign-in works but the dashboard says you have no permissions. | You’re a member of a different workspace, or your role was changed. | Top-right workspace switcher — pick the right org. If you only see one and it’s wrong, the workspace owner needs to re-invite you. |
Outbound webhook is showing as dropped in Settings → Webhooks. |
5 consecutive delivery failures (typically a 5xx from your endpoint, or a timeout). | Webhook not firing. |
| An order from WooCommerce appeared but the line items are wrong. | WC’s price vs total drift — we use price first, then fall back to total / subtotal. |
Open the order detail, check the line item metadata; reconcile in WC if needed. |
Your pck_int_* key is being rate-limited (429 rate_limited). |
Burst over your per-key cap (default 600 req/min). | Honor Retry-After: 60; if you need more throughput, raise the cap in Settings → Connectors → key → Rate limit. |
Idempotency replay returns 409 idempotency_conflict. |
You reused an Idempotency-Key with a different body. By design. |
Pick a new Idempotency-Key (recommended: include a request hash or a UUID). |
Before you write to support
You’ll get a faster answer if you include these three things.
- The exact request (or screenshot of the page). For API issues: the cURL you ran (with the key redacted), the response status, and the response body.
- The integration request log row. For inbound API issues, open Settings → Connectors → your key → Request log, find the failing request, click Copy as text. That payload has the timestamp, path, error code, and IP we need.
- What you expected to happen vs what actually happened. One sentence each.
Email it all to {{CONTACT_EMAIL}}. Response times live in the contact page.