WordPress · Product sync
The plugin syncs your WooCommerce catalog with Neuroon through the endpoint:
/api/integrations/v1/products/syncThe sync is idempotent by externalId (typically the WP product ID). Resending the same product updates, it does not duplicate.
Sync modes
| Mode | When to use it | Behavior |
|---|---|---|
FULL | Initial load or re-bootstrap | Marks as absent any products that are not in the accumulated batch. |
INCREMENTAL | Day-to-day (autosync, deltas) | Only creates / updates the products sent; the rest stays untouched. |
The plugin uses INCREMENTAL by default. It only triggers FULL when you click Reset & Resync All from the Products tab.
Batch size
| Layer | Limit |
|---|---|
| Plugin (client) | 100 products per request |
| Backend (server) | up to 500 products per request |
The plugin sends in batches of 100 deliberately: it bounds the PHP memory footprint, avoids typical PHP-FPM timeouts (max_execution_time) and handles rate limits more gracefully.
Auto-sync via WooCommerce hooks
The plugin listens to the relevant WooCommerce events — product edited, created, stock changed and deleted — and marks the corresponding product as PENDING internally so it gets re-synced.
Behavior:
- Edited product → if it was
SYNCED, it goes back toPENDING. - Created product → ends in
PENDING(manual selection or autosync, depending on settings). - Stock change (
woocommerce_product_set_stock) → re-sync. - Deleted product (
before_delete_post) → removed from internal tracking; a follow-up job will emitDELETE /api/integrations/v1/products/by-external/{externalId}.
For custom integrations: the plugin handles this auto-sync + DELETE by itself. If you build your own integration (Next.js, Nuxt, .NET, etc.) you must replicate three things the plugin does silently: (1) detect deleted products and emit DELETE; (2) re-queue edited products; (3) periodically reconcile local vs remote so you don't pile up orphan products. Full pattern in
plugins/custom/server-to-server.
Sync status
The plugin keeps track of each product's sync status internally:
| Status | Meaning |
|---|---|
PENDING | Queued, not sent yet. |
PROCESSING | Sent, awaiting response. |
SYNCED | Accepted by the backend (200/201). |
FAILED | Backend returned an error; check the detail shown on the Products tab. |
NOT_SYNCED | Product excluded by local rules (e.g. draft). |
Endpoint response
Each /products/sync call returns a JSON with the aggregate of that batch:
{
"totalReceived": 100,
"newProducts": 50,
"updatedProducts": 47,
"skipped": 0,
"failed": 3,
"errors": [
{ "externalId": "123", "error": "Invalid price" }
],
"productsCount": 150,
"remainingProducts": 850
}
productsCount and remainingProducts reflect your global quota after the batch. The plugin shows those values in the Products tab and blocks new batches if remainingProducts == 0.
Latency (eventual consistency)
After the 200 OK, products go through the internal pipeline . Indexing takes 2 to 5 seconds. Until it finishes, an immediate search may not return them.
Rate limits
| Endpoint | Limit |
|---|---|
products/sync | 100/min |
shops/me | 60/min |
verification-data | 20/min |
The plugin captures 429 and respects Retry-After. If your shop has more than 6,000 products and you need a fast bootstrap, contact support to widen the window.
Quotas
The plan tied to your API Key defines maxProducts. The Products tab reads productsCount / maxProducts from GET /api/integrations/v1/shop (with a 5-minute local cache so the call isn't repeated on every tab load).
Manual sync from the UI
- wp-admin → Settings → Neuroon Search → Products tab.
- Select products in the table.
- Click Sync selected. The UI starts the sync and polls progress until it finishes.
- Products are sent in batches of 100, sequentially, to avoid saturating the server.
Forced resync
Products tab → Reset & Resync All marks every product as PENDING and triggers a FULL sync. Useful when:
- You suspect the local table is out of sync with Neuroon.
- You have changed attributes / categories in bulk.
- You just migrated plans and need to re-validate the quota.
Next steps
- Cart bridge — once synced, the widget benefits from cart state.
- API ·
products/sync— full reference with playground. - Recipe · WooCommerce end-to-end.