GET /health — requires a valid JWT bearer token issued by your OIDC provider. Tally validates the token against your configured OIDC issuer on every request, derives your identity from the token claims, and checks your role within the target tenant before processing the call.
How authentication works
When you make an API request, Tally:- Reads the
Authorization: Bearer <token>header. - Validates the JWT signature against your OIDC issuer’s public keys.
- Checks that the token has not expired (
expclaim) and that the issuer and audience match the server’s configuration. - Derives your principal ID from the token claims in the format
oidc:{issuer_url}#{sub}. - Looks up the principal’s membership and role within the requested tenant.
Passing your token
Include your JWT in theAuthorization header of every HTTP request:
POST, PUT, PATCH, and DELETE calls. Requests without a valid Authorization header receive a 401 Unauthorized response.
Token format
Your JWT must meet these requirements:- Signed by your OIDC provider using a supported algorithm (e.g., RS256, ES256).
- Issuer (
issclaim) matches the OIDC issuer configured for your Tally deployment. - Audience (
audclaim) matches the expected audience configured on the server. - Not expired — the
expclaim must be in the future at the time of the request.
Principal IDs
Every authenticated caller is identified in Tally by a principal ID built from the JWT claims:iss = https://securetoken.google.com/my-project and sub = abc123uid produces:
Authentication errors
| HTTP status | Code | Meaning |
|---|---|---|
401 Unauthorized | unauthorized | The Authorization header is missing, the token is malformed, the signature is invalid, or the token has expired. Obtain a fresh token and retry. |
403 Forbidden | forbidden | The token is valid, but your principal either is not a member of the requested tenant, or your role does not have sufficient permissions for the requested operation. |
For local development, Tally servers can be configured to bypass JWT
validation entirely. In this mode the server assigns a fixed dev principal
ID to all requests, so you can exercise the API without an OIDC provider.
This mode is never enabled in staging or production.