SyncoSyncO
Troubleshooting · 4 min read

Why your WooCommerce REST API returns 404 (and it isn't the API)

A store on Plain permalinks serves /wp-json as a 404 from the web server. WooCommerce is fine — WordPress simply has no rewrite rule to route the request.

The symptom

You request /wp-json/wc/v3/system_status and get a 404 — served by the web server, not by WordPress. WooCommerce is active, the credentials are right, and nothing in the logs explains it.

The cause

WordPress only serves the REST API at /wp-json when a permalink structure is set, because that path depends on rewrite rules. On Plain permalinks there are no rewrite rules, so the request never reaches WordPress at all.

The API is still there. It answers at /?rest_route=/wc/v3/system_status, and the site advertises exactly that in its own discovery header.

Why the OAuth screen also breaks

WooCommerce builds its authorise step URLs with wc_get_endpoint_url(), which produces a rewrite-only path when permalinks are set and a meaningless ?wc-auth/v1=… query when they are not.

So the approve screen can render, but pressing Approve lands on the site homepage: WordPress does not recognise the query var, no API key is created, and nothing is posted back to the connector.

The fix

  • Settings → Permalinks → anything other than Plain → Save.
  • On a subdirectory install, make sure .htaccess carries the right RewriteBase for that folder.
  • Verify with a request to /wp-json/wc/v3/system_status — a 401 is success, it means the route exists and wants credentials.
Keep reading
The five places WooCommerce ↔ Odoo sync usually breaksMapping WooCommerce meta_data onto Odoo fieldsChoosing sync direction: the decision that prevents most incidents

See how SyncO fits your WooCommerce and Odoo workflow.

Connect a store, map your fields, and watch the first orders land in Odoo.

Get started free