MAXGEN schema · v1.13
MaxPerson
A probable person. Every claim is an assertion with a source and a score.
Download MaxPerson v1.13
All versions
https://opengenealogyai.org/schemas/maxgen/v1/person.schema.json
You cannot ask the dead who they are
Genealogy reconstructs people from fragments: names written by clerks who may have misspelled them, ages self-reported to a census taker, dates in calendars that no longer match ours. Most file formats can hold only one answer per fact, so the uncertainty has to be resolved before it can be saved: one John Maxwell, one father, and the doubt lives in a notebook instead of the data.
MaxPerson keeps the uncertainty in the data, where software and researchers can work with it.
What it is
A MaxPerson is a probable identity: a bundle of assertions, each saying this source claims this, with this confidence, recorded by this agent on this date. There are no bare facts in a MaxPerson. There are only assertions with evidence behind them.
name_assertions[]: every name this person was called, including the misspellings, each with its source.birth_assertions[]anddeath_assertions[]: date ranges and places, one per source.parent_assertions[]andchild_assertions[]: several candidates are normal. A probable father at 0.75 and a possible father at 0.35 both stay in the record. The tree shows the likelier one; nothing is erased.spouse_assertions[]: marriages with type, dates, place and how they ended. Kept in both spouses' records.event_assertions[]: everything between the bookends: immigration, residence, military service, probate, burial. Event types map to GEDCOM tags.external_id_assertions[]: scored links to the same person on FamilySearch, WikiTree, Find a Grave and others. Scored, not merged, because those databases contain duplicates too.dna_evidence[]: DNA matches that touch this person as a candidate common ancestor, feeding the overall confidence.
Composite confidence
composite_confidence is one number, 0 to 1, for how sure we are about the identity as a whole. It is computed from all the assertions, weighted by source quality, using a "noisy-OR" combination (two independent sources agreeing raise confidence more than either alone, but not as if they were certain). Because every assertion cites a source_record_id, the engine can notice when two assertions really come from the same underlying document and avoid double-counting.
The merge model
When evidence shows two MaxPerson records are the same individual, one absorbs the other. merge_history[] records the confidence, method, signals, who merged and when. The absorbed record stays, marked merge_status: merged_away. If later evidence shows they were different people after all, the merge is reversed on the same quality of evidence that made it.
Privacy
is_living: true locks the record. Public endpoints return "not found". The record still exists internally and can be researched, but it is never exposed. Linked DNA records inherit the same lock. This is a design requirement of the standard, not a policy any implementation can switch off.
Fields
| Field | Type | Meaning |
|---|---|---|
person_id required | string | Globally unique identifier for this person entity. |
schema_version | const "1.13" | MAXGEN version this record conforms to. |
is_living | boolean | True if this person may be alive. |
composite_confidence | number | Aggregate confidence that all assertions in this record refer to the same real individual. |
name_assertions required | array of object | All known names for this person with individual confidence scores. |
birth_assertions | array of object | All birth event claims with individual confidence scores. |
death_assertions | array of object | All death event claims with individual confidence scores. |
parent_assertions | array of object | All claimed parent relationships. |
spouse_assertions | array of object | All claimed spouse relationships. |
gender_assertions | array of object | MAXGEN v1.12 — Time-bounded gender records. |
child_assertions | array of object | All claimed child relationships. |
occupation_assertions | array of object | All known occupations for this person with confidence scores. |
external_ids | object | Denormalized quick-lookup map of {system -> top-confidence id} for this person — a convenience MIRROR of external_id_assertions[] (the authoritative, scored, multi-valued source as of v1.6). |
external_id_assertions | array of object | MAXGEN v1.6 — scored, sourced, REVERSIBLE links from this conclusion-person to the same individual as represented in an external database (a 'persona'). |
dna_evidence | array of object | MAXGEN v1.2 — DNA chains that touch this person as a candidate MRCA or direct subject. |
event_assertions | array of object | MAXGEN v1.3 — Long-tail life events beyond the first-class birth/death/marriage assertions. |
place_registry | array of object | MAXGEN v1.3 — Normalized gazetteer links for places referenced anywhere in this record's assertions. |
merge_status | enum | MAXGEN v1.3 — Lifecycle state. |
duplicate_of | string | MAXGEN v1.3 — When merge_status is 'merged_away', the person_id of the surviving entity this one was absorbed into. |
merge_history | array of object | MAXGEN v1.3 — Record of entities absorbed INTO this one. |
source_record_ids | array of string | All RawRecord UUIDs that contributed evidence to this Person entity. |
extensions | object | MAXGEN v1.3 — Designated namespace for experimental or contributor-specific fields. |
photo_assertions | array of object | MAXGEN v1.4 — Photographs OF this person (portraits, snapshots, family photos). |
redistribution_license | enum | Most restrictive license among all contributing source records. |
asserted_by required | string | Agent ID or contributor that created this Person entity. |
asserted_at required | string | Timestamp of initial entity creation. |
last_updated_at | string | |
judge_approved | boolean | True if the judge-agent has validated this entity's assertions. |
judge_approved_at | string |
Example
Mary Todd Lincoln as a MaxPerson: two names (birth and married), an exact birth and death, one marriage, every claim citing the same marriage record.
{
"person_id": "b1000000-0006-4000-8000-000000000006",
"schema_version": "1.13",
"is_living": false,
"composite_confidence": 0.95,
"name_assertions": [
{
"name_as_written": "Mary Todd",
"given_name": "Mary",
"surname": "Todd",
"name_type": "birth",
"confidence": 0.95,
"source_record_id": "a1b2c3d4-0003-4000-8000-000000000003",
"asserted_by": "extractor-agent-haiku-001",
"asserted_at": "2026-05-01T14:00:00Z"
},
{
"name_as_written": "Mary Lincoln",
"given_name": "Mary",
"surname": "Lincoln",
"name_type": "married",
"confidence": 0.99,
"source_record_id": "a1b2c3d4-0003-4000-8000-000000000003",
"asserted_by": "extractor-agent-haiku-001",
"asserted_at": "2026-05-01T14:00:00Z"
}
],
"birth_assertions": [
{
"year_min": 1818,
"year_max": 1818,
"month": 12,
"day": 13,
"date_type": "exact",
"place_as_written": "Lexington, Kentucky",
"country_code": "US",
"confidence": 0.98,
"source_record_id": "a1b2c3d4-0003-4000-8000-000000000003",
"asserted_by": "extractor-agent-haiku-001",
"asserted_at": "2026-05-01T14:00:00Z"
}
],
"death_assertions": [
{
"year_min": 1882,
"year_max": 1882,
"month": 7,
"day": 16,
"date_type": "exact",
"place_as_written": "Springfield, Illinois",
"country_code": "US",
"confidence": 0.99,
"source_record_id": "a1b2c3d4-0003-4000-8000-000000000003",
"asserted_by": "extractor-agent-haiku-001",
"asserted_at": "2026-05-01T14:00:00Z"
}
],
"spouse_assertions": [
{
"spouse_person_id": "b1000000-0007-4000-8000-000000000007",
"marriage_year_min": 1842,
"marriage_year_max": 1842,
"confidence": 0.99,
"source_record_id": "a1b2c3d4-0003-4000-8000-000000000003",
"asserted_by": "extractor-agent-haiku-001",
"asserted_at": "2026-05-01T14:00:00Z"
}
],
"source_record_ids": [
"a1b2c3d4-0003-4000-8000-000000000003"
],
"redistribution_license": "public-domain",
"asserted_by": "extractor-agent-haiku-001",
"asserted_at": "2026-05-01T14:00:00Z",
"judge_approved": true,
"judge_approved_at": "2026-05-04T09:00:00Z"
}
Listen
MaxPerson — The person who might be your ancestor
22:46Assertions not facts, probabilistic parents, composite confidence, and the merge model.