One more, because it cost me an hour separately and it is not obvious: a /** rewrite does not match its own bare parent. A rewrite on /api/projects/v1/detail/** will match /api/projects/v1/detail/123 but not /api/projects/v1/detail, which falls through to the frontend catch-all. If your API has an endpoint that is both a collection and a prefix, you need both rules. I verified this against a live deployment rather than trusting the docs, and I would suggest you do the same, because the behaviour differs between hosting providers.