Ancestrify

For companies and labs · Updated 3 September 2026

qpAdm via API for DNA-testing companies and labs

Submit your customers' genotypes in batches and get back a formal qpAdm model as JSON: the p-value, every source's weight, standard error and Z-score, and the complete model record, computed on the same merge and the same engine behind every Ancestrify report. Terms are agreed per company. There are no public self-serve keys yet.

Start an inquiryHow the method works
Analysis workspace

Job job_01j8k · model record

status
succeeded · 202 then 200
Anatolia_N
0.52 · SE 0.031 · Z 16.8
WHG
0.11 · SE 0.028 · Z 3.9
Yamnaya_Samara
0.37 · SE 0.034 · Z 10.9
p
0.21 · not rejected
HTTP 200 · p = 0.21 · bar passed · illustrative

What the API is

Ancestrify runs qpadm() from ADMIXTOOLS 2 on its own infrastructure. A genotype file is merged into the Allen Ancient DNA Resource v66 with Poseidon's trident, the model is run against a fixed set of right populations, and the full record is published. The API is programmatic access to that same merge and engine, for organisations that handle many samples rather than one.

It is deliberately narrow. You submit a sample and a model specification, or ask for one of the catalog models, and you receive a job that resolves to a model record. Every number in that record is the tool's own output; nothing is smoothed, ranked or rounded for presentation.

Two things it is not. It is not a public self-serve API with keys you generate from a dashboard: access, volume and the schema are agreed with each company, and an analyst can review models before they are released to you if you want that. And it is not a percentage calculator: a model qpAdm rejects comes back rejected, with the p-value that says so.

Illustrative

One exchange, three calls

Exchangeillustrative, not a contract

POST/qpadm/jobs
Request
{  "sample": {    "format": "23andme",    "upload": "upl_7f3a"  },  "model": {    "left": [      "Anatolia_N", "WHG",      "Yamnaya_Samara"    ],    "right": "standard-o9"  },  "review": "analyst"}HTTP 202 Accepted{ "jobId": "job_01j8k",  "status": "queued" }
GET/qpadm/jobs/job_01j8k
Job
HTTP 200 OK{  "jobId": "job_01j8k",  "status": "succeeded",  "stages": [    "received", "merged",    "modelled", "reviewed"  ],  "panel": "AADR v66",  "snps": 512340,  "blocks": 711}
GET/qpadm/jobs/job_01j8k/model
Model record
HTTP 200 OK{  "p": 0.21, "chisq": 7.19, "df": 5, "rank": 2,  "weights": [    { "source": "Anatolia_N",      "weight": 0.52, "se": 0.031, "z": 16.8 },    { "source": "WHG",      "weight": 0.11, "se": 0.028, "z": 3.9 },    { "source": "Yamnaya_Samara",      "weight": 0.37, "se": 0.034, "z": 10.9 }  ],  "warnings": [],  "verdict": "not rejected"}

The shape of an integration: submit, poll or receive a webhook, fetch. Field names are a sketch; the final schema is agreed per company.

What you can build on it

  • Batch submission

    Submit samples one at a time or in batches; each becomes a job with its own stages and its own record.

  • The full model record

    p-value, chi-square, degrees of freedom, f4 rank, per-source weight, standard error and Z-score, the nested-model and rank tests, merged SNP count, jackknife blocks and the tool's own warnings, as JSON.

  • Catalog models or your own

    Use the models behind Ancestrify's catalog, 49 source populations across two eras, or specify your own left and right sets from the AADR v66 labels.

  • Optional analyst review

    Ask for a person to check a model before it is released to you, the same check every Ancestrify report passes.

  • Webhooks or polling

    A merge is a heavy job, so jobs are asynchronous; receive a callback as each stage completes, or poll.

  • Your data, in the EU

    Samples are processed on servers in Germany and Finland under GDPR, kept only as long as your agreement says, deleted on request.

How a sample moves through the pipeline

  1. Receive

    Sample accepted

    Formats23andMe · AncestryDNA · MyHeritage · FTDNA · VCF

    A raw microarray export or a whole-genome VCF, validated by its content rather than by vendor.

  2. Merge

    Merged into AADR v66

    PanelHO · ~2M SNPs

    Converted, filtered of indels and strand-ambiguous SNPs, and intersected against the panel with Poseidon's trident.

  3. Model

    qpadm() runs

    EngineADMIXTOOLS 2 · f4 statistics · block jackknife

    Run in R on our own infrastructure with the sources, the right set and the target you specified.

  4. Judge

    Held to one bar

    Barp > 0.05 · every |Z| > 3 · every SE < 0.10

    The bar every Ancestrify report passes. A model that fails is returned as failed, never softened.

  5. Deliver

    Record returned

    DeliveryJSON · webhook or poll · optional review

    The complete record, with the run id and panel version, released to your callback or your next poll.

The numbers behind every model

Engine
qpadm() from ADMIXTOOLS 2, run in R on our own infrastructure.
Reference panel

~23,265 samples

Allen Ancient DNA Resource v66, the same merge every Ancestrify report is built on.
Population labels

~6,015 labels

Distinct labels to draw sources and outgroups from.
Publish bar
p > 0.05 · every |Z| > 3 · every SE < 0.10. The same bar at every tier of the consumer product.
Record fields
p-value, chi-square, degrees of freedom, rank, per-source weight, SE and Z, nested-model and rank tests, merged SNP count, jackknife blocks, warnings.
Catalog

199 countries

Every sovereign state: 1,115 regions across the countries below.
Source populations

49 sources

Curated across two eras, each with a public page.
Automated runs today

100 runs a day

The Model Lab already runs customer-composed models automatically, per report per rolling 24 hours.
Data location
European Union, Germany and Finland, under GDPR.
Endpoint sketch

What you integrate

  1. POST
    /qpadm/jobs

    Submit a sample and a model specification, or a catalog model id. Returns a job.

  2. GET
    /qpadm/jobs/{id}

    Poll the job, or register a callback URL and receive each stage: received, merged, modelled, reviewed.

  3. GET
    /qpadm/jobs/{id}/model

    Fetch the model record, the same fields the report's Reading view publishes, plus the run id and panel version.

Paths, authentication and payloads are agreed per company before any key is issued. This is the shape, not the contract.

Data and compliance

HostingGermany and FinlandLawGDPRAgreementDPA per company

Samples are processed on infrastructure in the European Union, in Germany and Finland, under GDPR. A whole-genome VCF is converted to the panel's markers at upload and the original is not stored. Files are never matched against other customers' files, and there is no cross-customer database of any kind.

For an organisation this means a data processing agreement, retention set by that agreement rather than by default, and deletion on request. The operator is a registered sole trader in Albania; the legal notice and the privacy notice apply to API traffic as they do to the site.

The privacy notice and the legal notice name the controller and the hosting. The source populations are listed under Ancestry, and the method behind every model is on the qpAdm page.

Who it is for

  • Consumer DNA-testing companies

    Add a formal ancient-ancestry model to a product that ships a percentage estimate today, with numbers a customer can check.

  • Genetic-genealogy services and labs

    Run qpAdm on many kits without operating a merge pipeline, an AADR mirror and an R environment yourselves.

  • Research groups and consultancies

    Batch a cohort through one consistent merge and one consistent bar, and keep every record.

Questions

  • Is this the same qpAdm as the consumer reports?

    Yes. The same qpadm() from ADMIXTOOLS 2, the same AADR v66 merge, the same right sets and the same publish bar. The API changes how samples arrive and how results leave, not what is computed.

  • Can I sign up and get an API key today?

    Not yet. There are no public self-serve keys; access is agreed with each company, including volume, schema and whether an analyst reviews models before release. Use the form below and we will reply from info@ancestrify.io.

  • What does a result contain?

    The full model record as JSON: the p-value, chi-square and degrees of freedom, the f4 rank, each source's weight, standard error and Z-score, the nested-model and rank tests, the merged SNP count, the jackknife block count and the tool's own warnings, plus the run id and panel version.

  • Is every model checked by a person?

    On the site, yes: every published customer model is composed and checked by hand. Over the API you choose. Automated runs are already how the Model Lab works, and you can ask for analyst review on top, per model or for everything.

  • What does it cost?

    Pricing is agreed per company and depends on volume and on whether analyst review is included. There is no price list on this page because there is no self-serve tier yet; the form is how the conversation starts.

  • Where is the data processed and how long is it kept?

    On servers in Germany and Finland under GDPR. Retention and deletion are set in the agreement with your company, and nothing is matched against other customers' files.

See the engine first

The AdmixTools 2 Lab runs real f-statistics, qpWave and qpAdm over the public reference panel in the browser, free, and the Model Lab is the automated self-serve half of the same engine on a customer's own merged dataset. The model record explained reads every field the API returns, and the merge guide describes the data preparation step by step.

Start a conversation

Tell us about your volume and your product.

A short note is enough: who you are, roughly how many samples a month, and what you want to ship. We reply from info@ancestrify.io.

Or write directly: info@ancestrify.io

Optional

Samples per month

0 / 4000

Prefer email? Write to info@ancestrify.io.

Ancestrify

Combining cutting-edge genomic science with rich historical records to map your ancestry across generations and continents.


© 2026 Ancestrify. All rights reserved. · Ancestrify is a trading name of Andi Thomaj, a sole trader registered in Tiranë, Albania · NUIS M61725001N
Card payments processed by POK Payments (RPay Ltd)VISAMASTERCARD