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.
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
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.
One exchange, three calls
Exchangeillustrative, not a contract
{ "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" }
HTTP 200 OK{ "jobId": "job_01j8k", "status": "succeeded", "stages": [ "received", "merged", "modelled", "reviewed" ], "panel": "AADR v66", "snps": 512340, "blocks": 711}
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
Receive
Sample accepted
Formats23andMe · AncestryDNA · MyHeritage · FTDNA · VCFA raw microarray export or a whole-genome VCF, validated by its content rather than by vendor.
Merge
Merged into AADR v66
PanelHO · ~2M SNPsConverted, filtered of indels and strand-ambiguous SNPs, and intersected against the panel with Poseidon's trident.
Model
qpadm() runs
EngineADMIXTOOLS 2 · f4 statistics · block jackknifeRun in R on our own infrastructure with the sources, the right set and the target you specified.
Judge
Held to one bar
Barp > 0.05 · every |Z| > 3 · every SE < 0.10The bar every Ancestrify report passes. A model that fails is returned as failed, never softened.
Deliver
Record returned
DeliveryJSON · webhook or poll · optional reviewThe 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
- Allen Ancient DNA Resource v66, the same merge every Ancestrify report is built on.
- Population 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
- Every sovereign state: 1,115 regions across the countries below.
- Source populations
- Curated across two eras, each with a public page.
- Automated runs today
- The Model Lab already runs customer-composed models automatically, per report per rolling 24 hours.
- Data location
- European Union, Germany and Finland, under GDPR.
~23,265 samples
~6,015 labels
199 countries
49 sources
100 runs a day
What you integrate
- POST
/qpadm/jobsSubmit a sample and a model specification, or a catalog model id. Returns a job.
- GET
/qpadm/jobs/{id}Poll the job, or register a callback URL and receive each stage: received, merged, modelled, reviewed.
- GET
/qpadm/jobs/{id}/modelFetch 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
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.
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