MAXGEN schema · v1.13
MaxDNA
Genetic evidence, always private, never the genome itself.
Download MaxDNA v1.13
All versions
https://opengenealogyai.org/schemas/maxgen/v1/dna.schema.json
Evidence that belongs to your relatives too
More than fifty million people have taken a consumer DNA test. A 47-centimorgan match (a centimorgan is the unit used to measure how much DNA two people share) does not prove a relationship on its own, but combined with a documentary trail to the same ancestor it raises confidence sharply. Genetic data is also information about every biological relative you have, including people who never consented. MaxDNA is designed to capture the genealogical value while making a leak structurally impossible.
What it stores, and what it cannot
MaxDNA stores match metadata: shared centimorgans, longest segment, segment count, optional chromosome segments for triangulation, haplogroups (deep ancestral lineages on the direct paternal or maternal line), ancestry composition, and kit metadata.
It cannot store a genome. raw_genotype_stored is a constant false that cannot be set otherwise. There is no field for a raw file.
The privacy architecture
- Always
tier2-private. The licence field has exactly one allowed value. A MaxDNA record can never appear in a public dataset, API response, or embedding, even for people long dead, because a living tester's data describes their ancestors too. - Hashed kit IDs.
kit_id_hashholds an HMAC-SHA-256 hash (a one-way scramble that uses a secret key, so it cannot be reversed by guessing) of the kit number. Matches storematch_kit_hashthe same way. You can triangulate without ever seeing your cousin's kit number. - Consent is a required field. Values include explicit opt-in, guardian consent, public-dataset redistribution allowed, deceased before 2000, pending, and withdrawn.
withdrawnstarts a 30-day purge; after that the record is deleted outright, which is the one place MAXGEN deletes anything.
Methodology fields most tools forget
cm_map_version: different recombination maps (HapMap, deCODE and others) give centimorgan values that differ by up to 15% for the same segment. Recording which map was used makes matches comparable.phasing_status: whether a shared segment is on the paternal or maternal chromosome, both, unphased, or unknown. Essential for serious triangulation.endogamy_flagandendogamy_population: communities that married within themselves for generations (Ashkenazi, Acadian, Mennonite, island populations) break the standard relationship estimates. The flag tells downstream tools to recalibrate.
How it connects to the rest
person_id links the test to the MaxPerson who took it. Confirmed common-ancestor candidates on a match carry a confidence and an inference method (manual, tree intersection, triangulation, shared surname and geography). Those flow into MaxPerson's dna_evidence[], where they strengthen documentary relationship claims through the same noisy-OR combination used everywhere else.
Fields
| Field | Type | Meaning |
|---|---|---|
dna_id required | string | Globally unique identifier for this DNA assertion. |
schema_version required | const "1.13" | MAXGEN version this DNA record conforms to. |
person_id required | string | Foreign key to the MaxPerson this DNA test belongs to. |
test_type required | enum | Type of DNA test performed. |
test_provider | enum | Company or platform that performed or hosts the original test. |
test_date | object | Approximate date the test was taken. |
kit_id_hash required | string | SHA-256 hash of the original kit number. |
kit_source required | string | Where this kit metadata came from (e.g. |
haplogroup_y | string | Y-DNA haplogroup designation (paternal line), e.g. |
haplogroup_mt | string | mtDNA haplogroup designation (maternal line), e.g. |
haplogroup_y_confidence | number | |
haplogroup_mt_confidence | number | |
ancestry_composition | array of object | Ethnicity/admixture estimates from the test provider. |
endogamy_flag | boolean | True if subject belongs to an endogamous population (Ashkenazi, Acadian, Mennonite, etc.) where standard cM thresholds are unreliable. |
endogamy_population | string | Specific endogamous population if endogamy_flag is true. |
matches | array of object | DNA matches with other kits. |
external_ids | object | Cross-service kit aliases. |
is_living_flag required | boolean | True if the DNA-test subject may be living. |
redistribution_license required | const "tier2-private" | DNA data is ALWAYS tier2-private. |
raw_genotype_stored required | const false | MAXGEN does not store raw genotype data (FASTQ, VCF, 23andMe raw export, etc.). |
external_raw_data_location | string | Free-text note about where raw data is held (e.g. |
consent_status required | enum | Legal basis for storing this DNA metadata. |
consented_at | string | |
consent_evidence_url | string | Link to signed consent record (e.g. |
withdrawal_requested_at | string | When the subject requested deletion. |
source_records | array of string | MaxRecord IDs that document this DNA test (e.g. |
asserted_by required | string | Agent ID or contributor ID that produced this DNA assertion. |
asserted_at required | string | |
notes | string | Free-text annotations. |
Example
Because MaxDNA records are private by definition, this site does not publish a real one. The validator offers a synthetic minimal record you can inspect and check.
Listen
MaxDNA — Genetic evidence without giving up privacy
23:23Hashed kit IDs, consent, endogamy, phasing, and how DNA boosts documentary confidence.