The browser got a response, but it had no Access-Control-Allow-Origin (ACAO) header, so page JavaScript isn't allowed to read it. curl and Postman don't enforce CORS, which is why the same URL "works" there.
curl -si https://api.example.com/x -H "Origin: https://app.example.com" | grep -i access-control
Add ACAO on every response, including errors:
Access-Control-Allow-Origin: https://app.example.com Vary: Origin
In nginx use add_header ... always; so 4xx/5xx responses get it too. In Express, mount the CORS middleware before all routes.
Want every stack fixed at once? The CORS Fix Kit ($9) includes the cors-doctor CLI plus tested configs for 13 stacks.
MDN: Cross-Origin Resource Sharing
Independent pages, not affiliated with or endorsed by any vendor mentioned.