/v1/gvcf/jobs/{jobId}Read FASTQ to gVCF job status.
| Parameter | In | Type | Required | Description |
|---|---|---|---|---|
jobId | path | string | Yes | Public gVCF job id (gvj_...). |
Response status codes: 200, 404.
Methods, paths, request fields, and response shapes for the genome.computer API. Endpoints are shared by staging and production unless marked as staging-only.
Send the API key in the Authorization header. Staging keys start with gc_test_. Production keys start with gc_live_.
Authorization: Bearer $GC_API_KEYThe API also exposes machine-readable OpenAPI JSON and Swagger UI for internal testing.
The table below is the daily working reference for partner engineers.
/v1/gvcf/jobs/{jobId}Read FASTQ to gVCF job status.
| Parameter | In | Type | Required | Description |
|---|---|---|---|---|
jobId | path | string | Yes | Public gVCF job id (gvj_...). |
Response status codes: 200, 404.
/v1/ordersList recent orders.
Scope: orders:read
| Parameter | In | Type | Required | Description |
|---|---|---|---|---|
status | query | string | No | Filter by order status. Allowed: created, payment_pending, paid, kit_preparing, kit_shipped, kit_delivered, sample_registered, sample_returned, sample_received, lab_processing, sequencing, bioinformatics_processing, genome_bundle_generating, completed, failed, cancelled. |
limit | query | integer | No | Maximum orders to return. Default: 50. |
Response status codes: 200.
/v1/ordersCreate a sequencing or genotyping order.
Scope: orders:write
Creates a 3x/30x whole-genome sequencing or GSA genotyping order and returns activation details. Send an Idempotency-Key header (required in production) so retries are safe.
| Parameter | In | Type | Required | Description |
|---|---|---|---|---|
idempotency-key | header | string | No | Idempotency key. Required in production; retries with the same key+body are deduplicated. |
type | body | string | Yes | Sequencing/genotyping product type. Allowed: wgs_3x, wgs_30x, gsa. |
client_name | body | string | No | Label for the end customer shown on internal dashboards. |
user_reference | body | string | No | Your own identifier for this order; echoed back on reads and webhooks. |
retention | body | string | No | How long sequencing artifacts are retained. Allowed: delete_after_30_days, hosted_runtime. Default: "delete_after_30_days". |
deliverables | body | string[] | No | Which artifacts to deliver for the order. |
customer | body | object | No | Fields: name, email, phone. |
shipping_address | body | object | No | Fields: line1, line2, city, state, region, postal_code, postalCode, country, country_code, countryCode. |
shipping | body | object | No | Free-form shipping metadata merged into the shipping payload. |
Response status codes: 200, 201, 400.
/v1/orders/{orderId}Read order status and activation details.
Scope: orders:read
| Parameter | In | Type | Required | Description |
|---|---|---|---|---|
orderId | path | string | Yes | Public order id (ord_...). |
Response status codes: 200, 404.
/v1/orders/{orderId}/eventsRead order lifecycle events.
Scope: orders:read
| Parameter | In | Type | Required | Description |
|---|---|---|---|---|
orderId | path | string | Yes | Public order id (ord_...). |
Response status codes: 200, 404.
/v1/orders/{orderId}/filesReturn signed links for completed deliverables.
Scope: orders:read
| Parameter | In | Type | Required | Description |
|---|---|---|---|---|
orderId | path | string | Yes | Public order id (ord_...). |
Response status codes: 200, 400, 404.
/v1/orders/{orderId}/gvcfQueue FASTQ to gVCF generation for a WGS order.
| Parameter | In | Type | Required | Description |
|---|---|---|---|---|
orderId | path | string | Yes | Public order id (ord_...). |
sample_id | body | string | No | |
reference_uri | body | string | No | |
fastq_r1 | body | object | No | Fields: bucket, path. |
fastq_r2 | body | object | No | Fields: bucket, path. |
output_bucket | body | string | No | |
output_path | body | string | No |
Response status codes: 202, 400, 404.
/v1/orders/{orderId}/shipmentRead shipment carrier and tracking data.
Scope: orders:read
| Parameter | In | Type | Required | Description |
|---|---|---|---|---|
orderId | path | string | Yes | Public order id (ord_...). |
Response status codes: 200, 404.
/v1/uploads/gvcfUpload an existing gVCF directly (multipart).
Scope: uploads:write
multipart/form-data with a single file field. Best for files within the multipart size limit; use the signed upload flow for larger files.
No request parameters.
Response status codes: 201, 400.
/v1/uploads/gvcf/completeFinalize a signed gVCF upload after the file is sent to storage.
Scope: uploads:write
| Parameter | In | Type | Required | Description |
|---|---|---|---|---|
upload_id | body | string | Yes | Public upload id returned by initiate. |
sha256 | body | string | Yes | Hex SHA-256 of the uploaded file. |
size_bytes | body | integer | Yes | Actual uploaded size in bytes. |
Response status codes: 200, 400, 404, 409.
/v1/uploads/gvcf/initiateBegin a signed (resumable) gVCF upload for large files.
Scope: uploads:write
| Parameter | In | Type | Required | Description |
|---|---|---|---|---|
filename | body | string | Yes | Original gVCF filename (.g.vcf.gz, .gvcf, or .gvcf.gz). |
content_type | body | string | No | MIME type of the upload. |
size_bytes | body | integer | No | Expected file size in bytes. |
Response status codes: 201, 400.
/v1/conversionsConvert an uploaded gVCF into a .genome bundle.
Scope: conversions:write
Staging completes synchronously and returns 201; production enqueues the job and returns 202.
| Parameter | In | Type | Required | Description |
|---|---|---|---|---|
source_type | body | string | Yes | Source artifact type. Only gVCF is supported. Allowed: gvcf. |
upload_id | body | string | Yes | Public id of a completed upload. |
retention | body | string | No | Retention policy for the resulting genome. Allowed: delete_after_30_days, hosted_runtime. Default: "hosted_runtime". |
Response status codes: 201, 202, 400, 404.
/v1/genomesList hosted genomes.
Scope: genomes:read
| Parameter | In | Type | Required | Description |
|---|---|---|---|---|
limit | query | integer | No | Maximum genomes to return. Default: 50. |
Response status codes: 200.
/v1/genomes/{genomeId}Read hosted genome runtime metadata.
Scope: genomes:read
| Parameter | In | Type | Required | Description |
|---|---|---|---|---|
genomeId | path | string | Yes | Public genome id (gen_...). |
Response status codes: 200, 404.
/v1/genomes/{genomeId}/bundleDownload a signed .genome bundle link.
Scope: genomes:read
| Parameter | In | Type | Required | Description |
|---|---|---|---|---|
genomeId | path | string | Yes | Public genome id (gen_...). |
Response status codes: 200, 404.
/v1/genomes/{genomeId}/filesReturn signed links for a hosted genome's files.
Scope: genomes:read
| Parameter | In | Type | Required | Description |
|---|---|---|---|---|
genomeId | path | string | Yes | Public genome id (gen_...). |
Response status codes: 200, 404.
/v1/genomes/{genomeId}/manifestRead the genome bundle manifest.
Scope: genomes:read
| Parameter | In | Type | Required | Description |
|---|---|---|---|---|
genomeId | path | string | Yes | Public genome id (gen_...). |
Response status codes: 200, 404.
/v1/genomes/{genomeId}/retentionChange whether the genome is hosted or deleted.
Scope: genomes:write
| Parameter | In | Type | Required | Description |
|---|---|---|---|---|
genomeId | path | string | Yes | Public genome id (gen_...). |
retention | body | string | Yes | New retention policy. Allowed: delete_after_30_days, hosted_runtime. |
Response status codes: 200, 400, 404.
/v1/genomes/{genomeId}/diffs/{range}Compare two interpretation versions.
Scope: genomes:read
| Parameter | In | Type | Required | Description |
|---|---|---|---|---|
genomeId | path | string | Yes | Public genome id (gen_...). |
range | path | string | Yes | Version range as {from}..{to}. |
Response status codes: 200.
/v1/genomes/{genomeId}/interpretations/{version}Read a specific interpretation version.
Scope: genomes:read
| Parameter | In | Type | Required | Description |
|---|---|---|---|---|
genomeId | path | string | Yes | Public genome id (gen_...). |
version | path | string | Yes | Interpretation version string. |
Response status codes: 200, 404.
/v1/genomes/{genomeId}/interpretations/latestRead the latest interpretation for a genome.
Scope: genomes:read
| Parameter | In | Type | Required | Description |
|---|---|---|---|---|
genomeId | path | string | Yes | Public genome id (gen_...). |
Response status codes: 200, 404.
/v1/genomes/{genomeId}/interpretations/latest/artifactRead the latest interpretation artifact.
Scope: genomes:read
| Parameter | In | Type | Required | Description |
|---|---|---|---|---|
genomeId | path | string | Yes | Public genome id (gen_...). |
Response status codes: 200, 404.
/v1/genomes/{genomeId}/reinterpretQueue a fresh interpretation for a genome.
Scope: genomes:write
| Parameter | In | Type | Required | Description |
|---|---|---|---|---|
genomeId | path | string | Yes | Public genome id (gen_...). |
Response status codes: 202, 404.
/v1/genomes/{genomeId}/panelsList built panels for a genome.
Scope: contexts:read
| Parameter | In | Type | Required | Description |
|---|---|---|---|---|
genomeId | path | string | Yes | Public genome id (gen_...). |
Response status codes: 200, 404.
/v1/genomes/{genomeId}/panels/{panelId}/buildBuild a genetic insight panel for a genome.
Scope: contexts:write
| Parameter | In | Type | Required | Description |
|---|---|---|---|---|
genomeId | path | string | Yes | Public genome id (gen_...). |
panelId | path | string | Yes | Genetic insight panel id to build. |
include_sequence_context | body | boolean | No | When true, WGS-backed variant findings include GRCh38 reference sequence context. |
sequence_window_bp | body | integer | No | Odd-sized reference window around the variant. Even values are rounded up. |
Response status codes: 201, 400, 404, 409.
/v1/genomes/{genomeId}/panels/{panelResultId}Read a built panel result.
Scope: contexts:read
| Parameter | In | Type | Required | Description |
|---|---|---|---|---|
genomeId | path | string | Yes | Public genome id (gen_...). |
panelResultId | path | string | Yes | Public panel result id (pan_...). |
Response status codes: 200, 404.
/v1/panelsList available genetic insight panel definitions.
Scope: contexts:read
No request parameters.
Response status codes: 200.
/v1/panels/{panelId}Read a single panel definition.
Scope: contexts:read
| Parameter | In | Type | Required | Description |
|---|---|---|---|---|
panelId | path | string | Yes | Genetic insight panel id (e.g. nutrition_micronutrients). |
Response status codes: 200, 400.
/v1/genomes/{genomeId}/answers/{answerId}Read a previously generated genome answer.
Scope: contexts:read
| Parameter | In | Type | Required | Description |
|---|---|---|---|---|
genomeId | path | string | Yes | Public genome id (gen_...). |
answerId | path | string | Yes | Public answer id (ans_...). |
Response status codes: 200, 404.
/v1/genomes/{genomeId}/askAsk a bounded natural-language question about a genome.
Scope: contexts:write
| Parameter | In | Type | Required | Description |
|---|---|---|---|---|
genomeId | path | string | Yes | Public genome id (gen_...). |
question | body | string | Yes | Natural-language genome question. |
response_length | body | string | No | Desired answer verbosity. Allowed: low, medium, high. Default: "medium". |
Response status codes: 201, 400, 404, 409.
/v1/context/{contextId}Read a previously built context.
Scope: contexts:read
| Parameter | In | Type | Required | Description |
|---|---|---|---|---|
contextId | path | string | Yes | Public context id (ctx_...). |
Response status codes: 200, 404.
/v1/context/buildBuild a bounded structured context for a genome (advanced).
Scope: contexts:write
| Parameter | In | Type | Required | Description |
|---|---|---|---|---|
genome_id | body | string | Yes | Public genome id (gen_...) to build context for. |
domain | body | string | No | Context domain. Allowed: nutrition_diet_response, taste_and_smell, sleep_and_chronotype, body_traits, fitness_and_movement, growth_repair_inflammation_context, longevity_healthy_aging, skin_and_collagen, hormone_and_vitality, recovery_and_resilience, micronutrients_and_vitamins, pharmacogenomics_safety, cognition_and_focus, methylation_pathways, general. Default: "general". |
detail_level | body | string | No | Level of structured detail. Allowed: brief, standard, deep. Default: "standard". |
Response status codes: 201, 400, 404, 409.
/v1/webhooksList registered webhook endpoints.
Scope: webhooks:read
No request parameters.
Response status codes: 200.
/v1/webhooksRegister a lifecycle webhook endpoint.
Scope: webhooks:write
Endpoints may not target private or local hosts; production endpoints must be HTTPS. Supported event types: order.created, order.payment_pending, order.paid, order.kit_preparing, order.kit_shipped, order.kit_delivered, order.sample_registered, order.sample_returned, order.sample_received, order.lab_processing, order.sequencing, order.bioinformatics_processing, order.genome_bundle_generating, order.completed, order.failed, order.cancelled, conversion.completed, genome.created, interpretation.updated, context.generated, panel.generated.
| Parameter | In | Type | Required | Description |
|---|---|---|---|---|
url | body | string | Yes | HTTPS endpoint that will receive events. |
description | body | string | No | Human-readable label. |
event_types | body | string[] | No | Event types to subscribe to. Defaults to all. Default: ["order.created","order.payment_pending","order.paid","order.kit_preparing","order.kit_shipped","order.kit_delivered","order.sample_registered","order.sample_returned","order.sample_received","order.lab_processing","order.sequencing","order.bioinformatics_processing","order.genome_bundle_generating","order.completed","order.failed","order.cancelled","conversion.completed","genome.created","interpretation.updated","context.generated","panel.generated"]. |
Response status codes: 201, 400.
/v1/webhooks/{webhookId}Disable a webhook endpoint.
Scope: webhooks:write
| Parameter | In | Type | Required | Description |
|---|---|---|---|---|
webhookId | path | string | Yes | Public webhook id (wh_...). |
Response status codes: 200, 404.
/v1/usageList metered usage events.
Scope: usage:read
| Parameter | In | Type | Required | Description |
|---|---|---|---|---|
limit | query | integer | No | Maximum events to return. Default: 100. |
event_type | query | string | No | Filter by usage event type. |
Response status codes: 200.
/v1/usage/rollupsList daily usage rollups (up to 90 days).
Scope: usage:read
No request parameters.
Response status codes: 200.
/v1/billing/accountRead the billing account.
Scope: billing:read or usage:read
No request parameters.
Response status codes: 200.
/v1/billing/accountUpdate the billing account.
Scope: billing:write
| Parameter | In | Type | Required | Description |
|---|---|---|---|---|
mode | body | string | Yes | Billing mode for the account. Allowed: card_on_file, enterprise_prepaid, invoice_arrears. |
stripe_customer_id | body | string | No | |
stripe_payment_method_id | body | string | No | |
invoice_terms_days | body | integer | No | |
monthly_minimum_cents | body | integer | No | |
enterprise_upfront_credit_cents | body | integer | No | |
auto_charge | body | boolean | No | |
metadata | body | object | No |
Response status codes: 200, 400.
/v1/billing/balance-transactionsList billing balance transactions.
Scope: billing:read or usage:read
No request parameters.
Response status codes: 200.
/v1/billing/periodsList billing periods.
Scope: billing:read or usage:read
No request parameters.
Response status codes: 200.
/v1/billing/periods/{yearMonth}/chargesRead charges for a billing period.
Scope: billing:read or usage:read
| Parameter | In | Type | Required | Description |
|---|---|---|---|---|
yearMonth | path | string | Yes | Billing period as YYYY-MM. |
Response status codes: 200, 404.
/v1/billing/periods/{yearMonth}/finalizeFinalize a billing period into an invoice.
Scope: billing:write
| Parameter | In | Type | Required | Description |
|---|---|---|---|---|
yearMonth | path | string | Yes | Billing period as YYYY-MM. |
Response status codes: 200, 400.
/v1/billing/periods/{yearMonth}/generateGenerate charges for a billing period.
Scope: billing:write
| Parameter | In | Type | Required | Description |
|---|---|---|---|---|
yearMonth | path | string | Yes | Billing period as YYYY-MM. |
Response status codes: 200, 400.
/v1/api-keysList API keys for the organisation.
Scope: api-keys:read
No request parameters.
Response status codes: 200.
/v1/api-keys/{apiKeyId}Revoke an API key.
Scope: api-keys:write
| Parameter | In | Type | Required | Description |
|---|---|---|---|---|
apiKeyId | path | string | Yes | API key id (UUID). |
Response status codes: 200, 404.
/v1/test/genomesSeed and list the sandbox genome (staging keys only).
Scope: genomes:read
No request parameters.
Response status codes: 200, 403.
/v1/test/genomes/seedSeed the sandbox genome (staging keys only).
Scope: genomes:write
No request parameters.
Response status codes: 201, 403.
/v1/test/orders/{orderId}/advanceAdvance a sandbox order to a new status (staging keys only).
Scope: orders:write
| Parameter | In | Type | Required | Description |
|---|---|---|---|---|
orderId | path | string | Yes | Public order id (ord_...). |
status | body | string | Yes | Target order status to transition the sandbox order to. |
Response status codes: 200, 400, 404.
These examples show the fields most clients build on directly.
{
"order_id": "ord_01JZ8N8A4P2Y",
"type": "wgs_3x",
"type_label": "3x whole genome sequencing",
"client_name": "Acme Health",
"user_reference": "user_123",
"status": "created",
"status_label": "Order created",
"activation_code": "ACT-7HD2-9QK4",
"activation_url": "https://sample.bio/activate/ACT-7HD2-9QK4",
"deliverables": ["genome_bundle"],
"retention": "hosted_runtime",
"price_cents": 29900,
"shipping_fee_cents": 0,
"total_cents": 29900,
"currency": "usd",
"estimated_completion_date": null,
"shipment": null,
"genome_id": null,
"storage_expires_at": null,
"created_at": "2026-05-21T10:20:05.000Z",
"updated_at": "2026-05-21T10:20:05.000Z"
}{
"panel_result_id": "pan_9y2m1q",
"panel_id": "nutrition_diet_response",
"title": "Nutrition & Diet Response",
"genome_id": "gen_test_nutrition_001",
"interpretation_version": "2026.05.1",
"summary": "Inherited tendencies in how this user processes foods and drinks, with high-to-moderate evidence. Suitable for an evidence summary card, not diagnosis or treatment.",
"sections": [
{
"section_id": "food_drink_metabolism",
"title": "Food & Drink Metabolism",
"evidence_level": "high",
"findings": [
{
"id": "rs4988235",
"type": "variant",
"title": "MCM6 rs4988235",
"gene": "MCM6",
"variant_id": "rs4988235",
"result": { "genotype": "GA", "alleles": ["G", "A"] },
"result_label": "One copy of G and one copy of A",
"meaning": "The main lactase-persistence variant in European-ancestry populations; the persistence allele is associated with digesting dairy into adulthood. Separate persistence variants in African and Middle Eastern populations are not captured by this SNP, so a non-persistence call here does not rule out persistence in those ancestries.",
"evidence_level": "high",
"evidence": {
"basis": "GWAS Catalog",
"clinical_review": "Review food & drink metabolism context alongside labs, history, medications, and clinician oversight.",
"validated_populations": ["European"]
},
"sequence_context": {
"type": "reference_context_with_observed_variant",
"available": true,
"source": "wgs_vcf_plus_grch38_reference",
"reference_genome": "GRCh38",
"chromosome": "2",
"position": 135851076,
"window_bp": 41,
"left_flank": "GAGTTCCTTTGAGGCCAGGG",
"observed_variant": "G/A",
"right_flank": "CTACATTATCTTATCTGTAT",
"display_sequence": "GAGTTCCTTTGAGGCCAGGG[G/A]CTACATTATCTTATCTGTAT",
"personalized_flanks": false
}
},
{
"id": "rs762551",
"type": "variant",
"title": "CYP1A2 rs762551",
"gene": "CYP1A2",
"variant_id": "rs762551",
"result": { "genotype": "AC", "alleles": ["A", "C"] },
"result_label": "One copy of A and one copy of C",
"meaning": "Associated with CYP1A2 inducibility and caffeine-metabolism rate; the *1F allele links to higher inducible activity in some studies. Smoking and other inducers also strongly affect CYP1A2, so genotype is only part of the picture.",
"evidence_level": "moderate",
"evidence": {
"basis": "PharmGKB, GWAS Catalog",
"clinical_review": "Review food & drink metabolism context alongside labs, history, medications, and clinician oversight.",
"validated_populations": ["broad"]
}
}
]
},
{
"section_id": "diet_composition",
"title": "Diet Composition Response",
"evidence_level": "moderate",
"findings": [
{
"id": "rs174537",
"type": "variant",
"title": "FADS1 rs174537",
"gene": "FADS1",
"variant_id": "rs174537",
"result": { "genotype": "GT", "alleles": ["G", "T"] },
"result_label": "One copy of G and one copy of T",
"meaning": "FADS1 is associated with the efficiency of converting plant ALA into long-chain omega-3 (EPA/DHA); some versions are associated with lower conversion in studies. Diet decisions should weigh intake, labs, and clinician guidance, not genotype alone.",
"evidence_level": "moderate",
"evidence": {
"basis": "GWAS Catalog, gnomAD",
"clinical_review": "Review diet composition response context alongside labs, history, medications, and clinician oversight.",
"validated_populations": ["broad"]
}
}
]
}
],
"citations": [
{
"source": "GWAS Catalog",
"url": "https://www.ebi.ac.uk/gwas/",
"accessed_at": "2026-05-20"
},
{
"source": "gnomAD",
"url": "https://gnomad.broadinstitute.org/",
"accessed_at": "2026-05-20"
}
],
"limitations": [
"DNA does not measure current folate, B12, homocysteine, or other nutrient levels.",
"This panel does not diagnose a deficiency or recommend a diet, dose, or supplement.",
"Genetic tendencies describe inherited likelihood, not current diet or symptoms."
],
"clinical_boundary": "Use as inherited context for education and clinician review. Do not present as diagnosis, treatment, or dosing guidance.",
"model_name": "deterministic-genetic-insight-panel-v1",
"created_at": "2026-05-21T10:24:13.000Z"
}{
"answer_id": "ans_4az91r",
"genome_id": "gen_test_nutrition_001",
"question": "What does my DNA say about how I process caffeine?",
"response_length": "medium",
"answer": "For caffeine, the relevant finding is CYP1A2 rs762551, where you have one copy of A and one copy of C. That genotype is associated with CYP1A2 inducibility and caffeine-metabolism rate — the *1F allele is linked to higher inducible activity in some studies, leaning toward a faster-metabolizer pattern — but smoking and other inducers also strongly affect CYP1A2, so genotype is only part of the picture. Treat this as inherited context established mainly in broad populations, not a measurement of how you process caffeine today, and not medical advice. (Evidence: GWAS Catalog, PharmGKB.)",
"structured_findings": [
{
"id": "rs762551",
"title": "CYP1A2 rs762551",
"domain": "general",
"evidence_level": "moderate",
"summary": "Has one copy of A and one copy of C. Associated with CYP1A2 inducibility and caffeine-metabolism rate; the *1F allele links to higher inducible activity in some studies. Smoking and other inducers also strongly affect CYP1A2, so genotype is only part of the picture.",
"result": { "genotype": "AC", "alleles": ["A", "C"] },
"result_label": "One copy of A and one copy of C",
"meaning": "Associated with CYP1A2 inducibility and caffeine-metabolism rate; the *1F allele links to higher inducible activity in some studies. Smoking and other inducers also strongly affect CYP1A2, so genotype is only part of the picture.",
"validated_populations": ["broad"]
}
],
"citations": [
{ "source": "gwas_catalog", "version": "2026.05-sandbox" },
{ "source": "pharmgkb", "version": "2026.05-sandbox" }
],
"interpretation_version": "2026.05.1",
"safety": {
"clinical_advice": false,
"requires_clinician_review": true
},
"cost_cents": 5,
"currency": "usd",
"created_at": "2026-05-21T10:25:41.000Z"
}{
"context_id": "ctx_7v1a9k",
"genome_id": "gen_test_nutrition_001",
"domain": "nutrition_diet_response",
"detail_level": "standard",
"summary": "Genome gen_test_nutrition_001 context for nutrition_diet_response. Bounded structured findings are included, each with the user's result and what it means. This is biological context for software use, not clinical diagnosis.",
"structured_findings": [
{
"id": "rs4988235",
"title": "MCM6 rs4988235",
"domain": "nutrition_diet_response",
"evidence_level": "high",
"summary": "Has one copy of G and one copy of A. The main lactase-persistence variant in European-ancestry populations; the persistence allele is associated with digesting dairy into adulthood.",
"result": { "genotype": "GA", "alleles": ["G", "A"] },
"result_label": "One copy of G and one copy of A",
"meaning": "The main lactase-persistence variant in European-ancestry populations; the persistence allele is associated with digesting dairy into adulthood. Other persistence variants in African and Middle Eastern populations are not captured by this SNP.",
"validated_populations": ["European"]
}
],
"citations": [
{ "source": "gwas_catalog", "version": "2026.05-sandbox" }
],
"interpretation_version": "2026.05.1",
"cost_cents": 5,
"currency": "usd"
}