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.
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.
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.
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.
Connect a store, map your fields, and watch the first orders land in Odoo.
Get started free