Obtain an access token
Tally uses OIDC for authentication. Before making any API call, obtain a
signed JWT from your OIDC provider (for example, via a client credentials
grant, a user sign-in flow, or a service account token). Pass the token
in every request as an Tally derives your principal ID from the token claims using the
format
Authorization: Bearer header.oidc:{issuer_url}#{sub}. You need to add this principal as a
member of your tenant before making tenant-scoped calls — you’ll do
that automatically in the next step when you create the tenant with
authentication enabled.See Authentication for a full explanation of token
requirements, principal IDs, and error codes.
Create a tenant
A tenant is your organizational workspace. Create one by posting a
The
tenant_id and a human-readable name. When authentication is enabled,
your principal is automatically added as tenant_owner.tenant_id must be unique across all tenants and cannot be changed
after creation. Choose something URL-safe and meaningful, such as your
company slug.Submit your first snapshot
Snapshots are submitted to the entity-states endpoint. The body is an
entity state envelope — a structured document that describes the
subject’s identity attributes, the evidence that supports them, and an
audit trail.For a first snapshot, Tally stores this envelope immutably, computes its SHA-256 hash after
RFC 8785 canonicalization, and records it as version
snapshot_version must be 1. Subsequent updates
increment this value automatically.1 in the subject’s
snapshot chain. The subject_id (ent_acme_001) is now permanently
associated with your tenant.Read the subject's current state
Retrieve the latest verified state for your subject at any time. The
response includes the current identity attributes, a provenance summary,
and the hash of the most recent snapshot.The
prev_hash is null because this is the first snapshot. Once you
submit a second snapshot, both hashes will be populated, forming the
beginning of the chain.Try the TypeScript SDK
The The client is tree-shakeable and runs in Node.js 18+ and modern browsers.
All methods are typed against the same request and response shapes the
REST API uses, so your IDE gives you autocomplete and compile-time safety.
@tally/sdk package wraps every REST call with a fully-typed client.
Install it, then replicate the create and read steps above in a few lines
of TypeScript.