Webhooks & troubleshooting

Understand the Shopify webhook status in RedERP, what each topic does, and how to fix failed synchronisation jobs.

Overview

Webhooks are how Shopify tells RedERP that something changed. They are registered automatically when you connect, and checked again after every synchronisation.

Go to Shopify → Webhooks.

Webhook status

The status is read from Shopify, not guessed from a successful sync.

StatusMeaningWhat to do
✓ Webhook registration successfulAll expected topics point at RedERP's callback URL.Nothing.
✗ Webhook registration failedShopify refused the registration or some topics are missing. The error and the missing topics are listed.Click Synchronize to re-register. If it fails again, reconnect the store.
Webhook registration unknownRedERP could not check yet (just connected, or Shopify unreachable).Wait a minute and refresh, or run Synchronize.

The page also shows the callback URL, when the check ran, and how many topics are registered.

Topics RedERP listens to

TopicEffect in RedERP
products/create, products/update, products/deleteProduct, variants and categories updated; deleted products are deactivated
inventory_levels/updateStock level of the variant at that location
customers/create, customers/updateClient created or updated (tags, note and custom fields kept)
orders/create, orders/updatedE-commerce order and sales order created or updated
orders/paidInvoice, payment and ledger entries
orders/cancelledOrder cancelled; books reversed if it was paid
orders/fulfilled, fulfillments/*Shipment status
refunds/createCredit note or full reversal
app/uninstalledStore marked Uninstalled, webhooks stop

Every delivery is verified with Shopify's signature and recorded once — a webhook delivered twice is ignored the second time.

A webhook job failed — what now?

  1. Open Shopify → Sync history. Synchronisation jobs that could not run show ✗ Failed; webhook jobs always finish as Completed and put the problem in the Error column — so read that column, not only the status.
  2. Fix the cause if it is on your side (see the table below).
  3. Click Synchronize. It re-imports everything since the last successful sync, including the order behind the failed webhook.
ErrorCauseFix
Authentication failed / UninstalledThe app was removed from Shopify or the token expired.Reconnect the store from the Dashboard.
Rate limitedShopify throttled the request.Nothing — RedERP retries automatically with a delay.
… could not be fetchedShopify did not return payment details for an order.Run Synchronize; the payment is fetched again.
has no customer. A guest client was used.Guest checkout.Informational only.
No stock locationNo location in the store and no default set.Set a default location in Settings.
is not linked to a Red ERP variantA stock update arrived for a variant that was never imported.Run Full resync, then change the stock again.
Shopify shows deliveries failing with 404 or a connection errorShopify is still posting to an address RedERP used before (another server or path). Deliveries to the current address succeed.Click Synchronize: RedERP re-registers every topic at the current address and removes its subscriptions that point elsewhere.

The order does not appear in E-commerce

  1. Check Sync history for a failed orders/create or orders/paid job.
  2. Check Webhooks: if status is failed or unknown, run Synchronize.
  3. Make sure you are looking at E-commerce → Orders (not the Shopify module) and that the order number starts with SHP-.
  4. Still missing? Run Full resync.

Products are there but customers and orders are not

The first import runs in phases (locations, products, customers, orders). Open Sync history: the initial job is either still Running or Failed with the reason. Fix and Synchronize.

Counts look wrong

Counts on the Dashboard are per store and count linked records. Run Full resync — it updates every record and never deletes anything in RedERP.

Safety notes

  • RedERP never writes to Shopify. Prices, stock and orders are only read.
  • Webhooks for a shop connected to two RedERP accounts are refused until one of them disconnects, so data can never land in the wrong account.
  • Access tokens and app secrets are stored encrypted and are never displayed.