Try Hanzo
Hanzo OS

Identity

Who is acting — a person, a program or an agent — and what it may reach.

One issuer for every principal. A person signs in, a program trades its client credentials for a token, and every request carries the org it acts for. Keys are scoped to what they may reach, and secrets are held per org, never in the code that uses them.

API

Operations on api.hanzo.ai. One key reaches every layer.

MethodPathWhat it does
POST/v1/iam/oauth/tokenExchanges a sign-in code, a refresh token or client credentials for tokens.
GET/v1/iam/oauth/userinfoReturns the profile claims for whoever the access token belongs to.
POST/v1/iam/keysIssues an API key.
GET/v1/kms/secretsLists the secrets the org holds, without their values.
POST/v1/kms/secretsStores or replaces one secret in the org.

Try it

curl https://api.hanzo.ai/v1/iam/oauth/token \
  -d grant_type=client_credentials \
  -d client_id=$CLIENT_ID \
  -d client_secret=$CLIENT_SECRET

curl https://api.hanzo.ai/v1/iam/oauth/userinfo \
  -H "Authorization: Bearer $ACCESS_TOKEN"