> ## Documentation Index
> Fetch the complete documentation index at: https://foreverbetter.mintlify.site/llms.txt
> Use this file to discover all available pages before exploring further.

# Analyze your ancestry

> From a raw genome file to ancestry proportions, haplogroups, and a per-chromosome breakdown.

Give a user their genetic ancestry story: super-population proportions, maternal
and paternal haplogroups, a geographic map, and a per-chromosome breakdown,
starting from a 23andMe, AncestryDNA, or WGS VCF file.

| Step              | Endpoint                        |
| ----------------- | ------------------------------- |
| Upload the genome | `POST /imports/file` (genetics) |
| Run ancestry      | `POST /genetics/ancestry`       |

## 1. Upload the genome file

```bash theme={null}
GENE=$(curl -s -X POST "$FB_API/imports/file" -H "authorization: Bearer $FB_KEY" \
  -H "content-type: application/json" -d '{
    "user_id":"'$UID'","organization_id":"'$ORG'","category":"genetics",
    "filename":"genome.txt","content_type":"text/plain",
    "text":"# rsid\tchromosome\tposition\tgenotype\nrs4477212\t1\t82154\tAA\n…"
  }' | jq -r .source.id)
```

Large WGS VCFs are supported too; the file's raw payload is stored and referenced
by the source.

## 2. Run the ancestry analysis

```bash theme={null}
curl -s -X POST "$FB_API/genetics/ancestry" -H "authorization: Bearer $FB_KEY" \
  -H "content-type: application/json" -d '{
    "user_id":"'$UID'","organization_id":"'$ORG'","source_id":"'$GENE'",
    "resolution":"continental"
  }' | jq .
```

You get a maximum-likelihood estimate over 1000 Genomes reference populations:

```json theme={null}
{
  "status": "complete",
  "reference_panel": "1000_genomes_phase3",
  "summary": "Predominantly European with…",
  "ancestry": [{"population":"EUR","label":"European","proportion":0.72}, …],
  "haplogroups": { "maternal": "H1", "paternal": "R1b" },
  "geographic_map": [ … ],
  "chromosome_breakdown": [ {"chromosome":"chr1","proportions":{ … }}, … ],
  "quality": { "matched_markers": 61, "matched_proportion": 88.4, "compatible_for_projection": true },
  "methodology": { "algorithm": "Maximum-likelihood population allele-frequency comparison…", "limitations": [ … ] }
}
```

## Reading the result

* `status` is `complete`, `low_confidence`, or `setup_required`. SNP-array files
  match many markers; sparse or unmatched files return `setup_required` with guidance
  in `quality.notes`.
* `resolution` can be `continental` or `regional`.
* Always show `methodology.limitations`: genetic ancestry is not identity,
  ethnicity, or nationality.

## Take it further

* Combine with the rest of the genome: `POST /genetics/analyze` runs the bundled
  ClinVar / CPIC / PRS / aging-hallmarks pipeline (queued for large WGS; poll
  `GET /genetics/jobs/{id}`).
* Fold ancestry context into a multimodal `POST /analyses` alongside biomarkers and
  wearables.
