a client-only app cannot authenticate itself (or rather, it can, but the authentication is meaningless since it is necessarily fully exposed to the user as it runs directly on the user's device), so if your users of this frontend don't authenticate themselves, your only option if you want to keep direct access to the API private is probably to put a trusted gateway between the two (your unauthenticated client app and your private API), where the gateway uses something like client credentials. of course, this effectively means the private API routes you expose in this way are still effectively unauthenticated through this gateway, so it is probably a lot of work for no real effect.