Subjects
A subject is the unit of identity. Every subject is identified by two fields:
Subjects are tenant-scoped: a tenant owns a subject and controls who else can read it.
The envelope
All identity data is stored inside anentityStateEnvelopeV1. The envelope has three top-level concerns:
attributes— the identity payload. An open map: any key/value is accepted. The canonical v1 attribute groups define the expected grouped structure for organization and individual subjects, but you can store additional attributes alongside them.evidence— the provenance array. Each entry records where a piece of data came from, when it was verified, and by whom.audit— who created this snapshot, when, and from what source.
attribute_paths field optionally links specific attribute values to specific evidence entries — this is the per-field provenance model.
Canonical v1 attribute groups
Organization subjects (subject_type: "organization")
Organization attributes are grouped under legal, contact, jurisdiction, and identifiers. legal.legal_name is required.
legal:legal_name,alternative_names,legal_form,legal_form_code,status,date_of_incorporationcontact:email,phone,addresses.registered_office,addresses.principal_place_of_business,addresses.mailingjurisdiction:country_of_incorporation,region_of_incorporation,tax_residenciesidentifiers: array of structured identifiers with type, value, issuer, tax, and primary flags
Individual subjects (subject_type: "individual")
Individual attributes are grouped under biographic, contact, jurisdiction, and identifiers, with professional reserved. biographic.name is required with at least one of given_name, family_name, or formatted_name.
biographic:name,sex,date_of_birth,place_of_birthcontact:email,phone,addresses.residential,addresses.mailing,addresses.workjurisdiction:nationalities,citizenships,tax_residenciesidentifiers: array of structured identifiers with type, value, issuer, tax, and primary flags
@tally/schema. Additional attributes can be stored freely in the open attributes map.
Writes
Identity state is written in two patterns:- Initial creation —
POST /v1/tenants/{tenant_id}/entity-statescreates the first snapshot (version 1) for a new subject. - Updates — subsequent changes use the propose-then-apply flow with RFC 6902 JSON Patch. See Updates.