/v2/genome_connectionsList genome connections
Scope: genome_connections:read
Let users connect an existing .genome or get sequenced through the same hosted integration.
We handle kitting, fulfillment, sequencing, bioinformatics, and support, then deliver structured genetic insights directly to your product.
API and insight panel access are free for approved organizations.
Request access at api@genome.computer.
Every user ends up with the same connection to your product, whether they already have a .genome or need to be sequenced.
Users who already have a .genome can connect it to your product without paying for or waiting on new sequencing.
They verify their account, choose the genome they want to use, and grant your product access. Their connection can be ready immediately.
If a user does not have a .genome yet, they can order sequencing through the same hosted flow.
Developer Console is the control center for your organization's API integration. Access is scoped separately to staging and production.
Genome Computer turns each connected genome into structured genetic context your product can ingest.
Start with configured insight panels designed to make genetic information usable inside your product.
During onboarding, we work with you to create additional insight panels specific to your product, from nutrition and performance to longevity, medication response, or other areas relevant to your experience.
Insight responses are structured for user profiles, personalized recommendations, AI context, reports, dashboards, agent workflows, notifications, and longitudinal experiences.
The user's genome belongs to them, not to the product they connect it to.
A .genome can exist independently of any individual integration and can be connected to other applications the user chooses.
Users who have already been sequenced do not need to sequence again every time they want to use genetics in another product.
Your product creates a Genome Computer connection for a signed-in user. From there, Genome Computer handles the user-facing genome flow.
Create a connection from your authenticated product
Verify by email and accept the connection terms
Connect what they have, or order when they have neither
Bind access to that specific genome
Receive normalized status without user identity
genome_connection_id against your user.customer_url.Both journeys end in the same client resource. The difference is whether the specific genome already exists or is created by a new order.
Your user selects one eligible .genome and grants your organization access. Genome Computer creates the client-specific handle and activates the grant immediately. Progress moves directly toready.
{
"genome_connection_id": "gconn_01K4J92BRY7M",
"client_user_reference": "user_8f3c2a",
"status": "connected",
"access_status": "active",
"journey": "existing_genome",
"client_genome_id": "cgen_01K4J9PT1Q6S",
"created_at": "2026-09-03T04:15:22.000Z",
"connected_at": "2026-09-03T04:19:08.000Z",
"permissions": [
{ "permission": "genome_connection", "status": "granted" },
{ "permission": "insight_panels", "status": "granted" }
]
}Your user can connect one eligible order already in progress. If they have no eligible genome or order, they can order a .genome through our hosted connection flow. Once an order is connected, your app can track its progress through fulfillment and sequencing. Their genetic insights become available when processing is complete.
{
"genome_connection_id": "gconn_01K4J92BRY7M",
"client_user_reference": "user_8f3c2a",
"status": "connected",
"access_status": "pending_genome",
"journey": "new_order",
"client_genome_id": null,
"created_at": "2026-09-03T04:15:22.000Z",
"connected_at": "2026-09-03T04:24:51.000Z",
"permissions": [
{ "permission": "genome_connection", "status": "granted" },
{ "permission": "insight_panels", "status": "granted" }
]
}Call this endpoint only from your backend. API keys and connection URLs must not be embedded in browser bundles, mobile apps, analytics, or email.
export GC_API_KEY="gc_test_xxx"
curl https://staging.api.genome.computer/v2/genome_connections \
-X POST \
-H "Authorization: Bearer $GC_API_KEY" \
-H "Idempotency-Key: connect-user-8f3c2a-01" \
-H "Content-Type: application/json" \
-d '{
"client_user_reference": "user_8f3c2a",
"return_url": "https://app.acmehealth.example/settings/genome"
}'const response = await fetch(
"https://staging.api.genome.computer/v2/genome_connections",
{
method: "POST",
headers: {
Authorization: `Bearer ${process.env.GC_API_KEY}`,
"Idempotency-Key": "connect-user-8f3c2a-01",
"Content-Type": "application/json"
},
body: JSON.stringify({
client_user_reference: "user_8f3c2a",
return_url: "https://app.acmehealth.example/settings/genome"
})
}
);
if (!response.ok) throw new Error("Connection creation failed");
const { genome_connection, customer_url } = await response.json();
// Redirect the intended signed-in user to customer_url.
console.log(genome_connection.genome_connection_id);{
"genome_connection": {
"genome_connection_id": "gconn_01K4J92BRY7M",
"client_user_reference": "user_8f3c2a",
"status": "awaiting_customer",
"access_status": null,
"journey": null,
"client_genome_id": null,
"created_at": "2026-09-03T04:15:22.000Z",
"connected_at": null,
"permissions": [
{ "permission": "genome_connection", "status": "pending" },
{ "permission": "insight_panels", "status": "pending" }
]
},
"customer_url": "https://connect.genome.computer/c/gc_link_xxx",
"customer_url_expires_at": "2026-09-03T04:30:22.000Z"
}Every create requires an Idempotency-Key. Reuse the same key only to retry the same body after a timeout or 5xx. A successful retry returns the original connection and URL state.
The API supports one active genome connection for eachclient_user_reference in an organization and environment. A second active attempt is rejected withactive_connection_exists. After the user revokes access, create a fresh connection with a new idempotency key.
The hosted flow stores a separate decision for each permission shown to the customer. Every request includes permission to connect the selected genome and report its progress. It may also request insight-panel access, processed .genome bundle access, or both, according to the capabilities enabled for your organization and environment. Data endpoints require both an active organization capability and the matching customer permission.
If the customer selects Cancel, the connection remains available with its original genome_connection_id, but no genome access is granted. The latest values appear in permissions asdeclined. Your product can offer the choice again by creating a new short-lived permission request for that same connection. Do not automatically redirect or repeatedly prompt the customer.
curl https://staging.api.genome.computer/v2/genome_connections/gconn_01K4J92BRY7M/permission_requests -X POST -H "Authorization: Bearer $GC_API_KEY" -H "Idempotency-Key: reconnect-user-8f3c2a-01"Use GET /v2/genome_connections to rebuild your local connection records or find the connection for an exactclient_user_reference. Results are scoped to the API key's organization and environment, ordered newest first, and use an opaque cursor for pagination. Expired and revoked historical connections remain in the list so a lost local record can still be recovered. Customer identity is never returned.
curl "https://staging.api.genome.computer/v2/genome_connections?limit=25&client_user_reference=user_8f3c2a" \
-H "Authorization: Bearer $GC_API_KEY"{
"data": [
{
"genome_connection_id": "gconn_01K4J92BRY7M",
"client_user_reference": "user_8f3c2a",
"status": "connected",
"access_status": "active",
"journey": "existing_genome",
"client_genome_id": "cgen_01K4J9PT1Q6S",
"created_at": "2026-09-03T04:15:22.000Z",
"connected_at": "2026-09-03T04:19:08.000Z",
"permissions": [
{ "permission": "genome_connection", "status": "granted" },
{ "permission": "insight_panels", "status": "granted" }
]
}
],
"next_cursor": null
}| Field | Authority | Purpose |
|---|---|---|
| client_user_reference | Chosen by you | Your opaque reference for the signed-in user. Do not put direct identity in it. |
| genome_connection_id | Chosen by Genome Computer | The durable API resource for this client-to-genome connection. |
| client_genome_id | Chosen by Genome Computer | A stable genome handle scoped to your organization. It continues to identify the same genome after access is revoked. |
| customer_url | Chosen by Genome Computer | A short-lived hosted-flow URL returned only when the connection is created. It is a secret handoff, not a durable identifier. |
genome_connection_id as the resource identifier andclient_genome_id as the genome identifier. Do not parse either value. After revocation, the connection record, access state, and any previously issued client_genome_id remain queryable, while genome data endpoints no longer authorize access.| status | Meaning |
|---|---|
| awaiting_customer | The URL has been created, but the user has not completed the hosted flow. |
| connected | The user completed the required terms and selected an existing genome or completed checkout for a new one. |
| expired | The hosted flow was not started before its URL expired. Create a new connection attempt. |
| access_status | Meaning |
|---|---|
| null | The user has not completed the hosted genome choice, so no access grant exists yet. |
| pending_genome | A new order is connected, but its specific canonical genome has not been registered yet. |
| active | The referring organization has an active grant to the selected genome. |
| revoked | The user has revoked access. The connection record and any previously issued client_genome_id remain queryable, but genome data endpoints deny access. |
Poll the progress endpoint after a browser return, use webhooks for ongoing changes, and show users only the coarse stage. Internal carrier, lab, and processing statuses may change without changing API behavior.
| stage | Meaning |
|---|---|
| awaiting_customer | Waiting for email verification, terms, and the user's genome choice. |
| order_confirmed | The user completed Genome Computer checkout for one new genome. |
| outbound_to_customer | The collection kit is on its way to the user. |
| with_customer | The kit has reached the user and is awaiting its return journey. |
| inbound_to_lab | The returned kit is on its way to the lab. |
| at_lab | The lab has received the sample. |
| processing | Sequencing and genome processing are underway. |
| ready | The specific genome is registered. Read access_status on the connection for the client's current access. |
{
"genome_connection_id": "gconn_01K4J92BRY7M",
"client_genome_id": null,
"stage": "inbound_to_lab",
"updated_at": "2026-09-14T01:42:17.000Z"
}awaiting_customer directly to ready. New orders move through the full sequence. Stages are monotonic in the ordinary path, but clients should render the latest value rather than infer unreported timestamps.Bundle downloads are available only when Genome Computer enables the capability for your organization and environment. The user's active grant still controls every request.
Bundle access is separate from ordinary connection and insight-panel access. It is disabled by default and can be approved independently in Staging and Production.
The endpoint returns a signed URL that expires after 15 minutes. Request it from your backend, do not log it, and deliver it only to the intended authorized user or system.
curl https://staging.api.genome.computer/v2/genome_connections/gconn_01K4J92BRY7M/bundle \
-H "Authorization: Bearer $GC_API_KEY"{
"genome_connection_id": "gconn_01K4J92BRY7M",
"client_genome_id": "cgen_01K4J9PT1Q6S",
"bundle_version": "2026.09.1",
"download_url": "https://storage.example/signed-bundle",
"expires_in_seconds": 900
}Insight panels turn a user's genome into structured genetic context your product can use. Each panel has a stable insight_panel_id and can contain findings, evidence, citations, limitations, and other structured interpretation.
Genome Computer does not require your product to parse a static genetic report. Panels expose structured outputs that can be incorporated directly into your product experience.
Processing starts when the genome is ready, the connection grant is active, and Genome Computer has enabled the insight-panel capability for your environment. Reading results also requires the customer's insight-panel permission. A consumer subscription is not required.
Additional panels can be configured under new stable IDs and introduced without changing the underlying genome connection.
| status | Meaning |
|---|---|
| waiting_for_genome | The connection is complete, but the specific genome is not ready. |
| subscription_required | Legacy status from older V2 deployments. Current V2 does not require a consumer subscription for panel access. |
| processing | The genome is ready, the grant is active, and the panel is being generated. |
| ready | The panel result is available to read. |
{
"genome_connection_id": "gconn_01K4J92BRY7M",
"client_genome_id": "cgen_01K4J9PT1Q6S",
"data": [
{
"insight_panel_id": "nutrition_diet_response",
"title": "Nutrition & Diet Response",
"status": "ready",
"interpretation_version": "2026.09.1",
"generated_at": "2026-09-16T08:24:13.000Z"
},
{
"insight_panel_id": "pharmacogenomics_safety",
"title": "Pharmacogenomics Safety",
"status": "processing",
"interpretation_version": null,
"generated_at": null
}
]
}{
"genome_connection_id": "gconn_01K4J92BRY7M",
"client_genome_id": "cgen_01K4J9PT1Q6S",
"insight_panel_id": "nutrition_diet_response",
"title": "Nutrition & Diet Response",
"status": "ready",
"interpretation_version": "2026.09.1",
"generated_at": "2026-09-16T08:24:13.000Z",
"summary": "Inherited tendencies in how this user processes foods and drinks.",
"sections": [
{
"section_id": "food_drink_metabolism",
"title": "Food & Drink Metabolism",
"evidence_level": "high",
"findings": [
{
"finding_id": "rs4988235",
"title": "MCM6 rs4988235",
"gene": "MCM6",
"result_label": "One copy of G and one copy of A",
"meaning": "Associated with digesting dairy into adulthood in studied populations.",
"evidence_level": "high",
"evidence": {
"basis": "GWAS Catalog",
"clinical_review": "Review alongside current diet, symptoms, labs, and clinical context."
}
}
]
}
],
"citations": [
{
"source": "GWAS Catalog",
"url": "https://www.ebi.ac.uk/gwas/"
}
],
"limitations": [
"Genetic tendencies do not measure current nutrition or symptoms."
],
"clinical_boundary": "Use for education and clinician review, not diagnosis or treatment."
}API and insight panel access are free for approved organizations.
There are no API access or insight-panel access fees charged to your organization.
Users who already have an eligible .genome can connect it without ordering or paying for new sequencing. Panel data remains available while their Genome Computer subscription is current.
Users who need a genome can order sequencing from Genome Computer through the hosted connection flow.
Webhook events signal that connection or progress state changed. They contain only client-scoped identifiers and the new coarse state, so your backend can retrieve the current resource when needed.
Call POST /v2/webhooks from your backend with a key that has webhooks:write. Store the returned signing secret when the endpoint is created because it is shown only once.
curl https://staging.api.genome.computer/v2/webhooks \
-X POST \
-H "Authorization: Bearer $GENOME_API_KEY" \
-H "Content-Type: application/json" \
-d '{
"url": "https://api.your-company.com/webhooks/genome-computer",
"event_types": [
"genome_connection.connected",
"genome_connection.progress.updated",
"genome_connection.ready",
"genome_connection.access.revoked",
"insight_panel.status.updated"
]
}'Use GET /v2/webhooks to list endpoints andDELETE /v2/webhooks/{webhookId} to disable one.
{
"id": "evt_4a86cb99ccef40f09646093335fcffb4",
"type": "genome_connection.progress.updated",
"created_at": "2026-09-14T01:42:18.000Z",
"data": {
"genome_connection_id": "gconn_01K4J92BRY7M",
"client_user_reference": "user_8f3c2a",
"client_genome_id": null,
"stage": "inbound_to_lab"
}
}Verify the raw request body with the organization's signing secret, reject stale timestamps, and deduplicate by event ID.
import crypto from "node:crypto";
export function verifyWebhook(rawBody, headers, secret) {
const timestamp = headers.get("gc-webhook-timestamp");
const signature = headers.get("gc-webhook-signature")?.replace("v1=", "");
if (!timestamp || !signature) return false;
const ageSeconds = Math.abs(Date.now() / 1000 - Number(timestamp));
if (!Number.isFinite(ageSeconds) || ageSeconds > 300) return false;
const expected = crypto
.createHmac("sha256", secret)
.update(`${timestamp}.${rawBody}`)
.digest("hex");
return signature.length === expected.length && crypto.timingSafeEqual(
Buffer.from(signature),
Buffer.from(expected)
);
}| Event | When | Data |
|---|---|---|
| genome_connection.connected | The hosted flow completes. | Connection ID, client reference, journey, access state |
| genome_connection.progress.updated | The normalized progress stage changes. | Connection ID, client genome ID when available, stage |
| genome_connection.ready | The genome becomes ready. The event includes the current access state. | Connection ID, client genome ID, stage, access state |
| genome_connection.access.revoked | A user revokes this client's access in Genome Computer account settings. | Connection ID, client genome ID when available, access state |
| insight_panel.status.updated | An enabled insight panel changes status. | Connection ID, client genome ID, insight panel ID, status |
The client proves which of its signed-in users began the journey. Genome Computer separately verifies the user's email and controls its own account, terms, checkout, and genome permissions.
Errors use a stable machine-readable code, a safe message, and a request ID for support. Do not branch on message text.
| HTTP | Example code | Handling |
|---|---|---|
| 400 | invalid_request | The body, idempotency key, or return URL is invalid. |
| 401 | unauthorized | The API key is missing, invalid, or scoped to a different environment. |
| 403 | organization_blocked | The organization or requested environment is not currently enabled. |
| 403 | api_capability_disabled | Genome Computer has not enabled the requested sensitive capability for this organization and environment. |
| 403 | genome_access_forbidden | The user's grant for this organization and specific genome is no longer active. |
| 404 | not_found | The connection does not exist in this organization and environment. |
| 409 | active_connection_exists | This client user reference already has an active connection. Only one active connection is supported per client user reference. |
| 429 | rate_limited | Wait for Retry-After, then retry with backoff and jitter. |
| 5xx | server_error | Retry reads. Retry create requests with the same idempotency key. |
{
"error": {
"code": "active_connection_exists",
"message": "An active genome connection already exists for this client user reference.",
"request_id": "req_01K4J9YDB2N5"
}
}The API evolves through additive response fields, webhook event types, and enum values. Breaking changes require a new major API version.
| Change | Treatment | Client behavior |
|---|---|---|
| New response fields | Additive | Ignore fields your integration does not understand. |
| New webhook event types | Additive | Ignore unknown event types and acknowledge them with 2xx. |
| New enum values | Potentially additive | Use an unknown fallback instead of exhaustive failure. |
| Existing documented behavior | Stable | A breaking change requires a new major API version. |
The API establishes the user-owned connection, records access to the specific genome, reports progress, and returns configured insight panels.
| Capability | Available |
|---|---|
| Hosted flow | Co-branded Genome Computer flow, email OTP, required terms, return to an allowlisted client URL |
| Existing genome | User selects one genome already present in their Genome Computer account |
| New order | User orders a .genome through the hosted connection flow |
| Connection | Durable client-scoped identifiers and one active genome connection per client user reference |
| Progress | Read endpoint and thin signed webhook events through the ready stage |
| Insight panels | Read organization-configured panel statuses and results |
| Genome bundle downloads | Optional organization capability for short-lived signed .genome bundle links |
| Capability | Later |
|---|---|
| Selective sharing | Users grant each supported API data capability shown in the hosted flow. Choosing genome regions or finer data categories comes later. |
| Multiple genomes per client user | A second active connection for the same client user reference is rejected. After the user revokes access, the client may create a fresh connection with a new idempotency key. The model may expand later. |
| Raw sequencing files | FASTQ and gVCF downloads are not included. Approved organizations may instead receive the processed .genome bundle capability. |
Being added as an API organization does not automatically create credentials. Staging and production are explicit control-plane entitlements with isolated keys and data.
| Environment | Base URL | Access |
|---|---|---|
| Staging | https://staging.api.genome.computer | Your organization must be added and explicitly granted staging access. Hosted OTP emails are delivered, while checkout creates a dummy order without payment or fulfillment. |
| Production | https://api.genome.computer | Requires separate approval and setup. Production credentials and data are isolated from staging. |
https://staging.api.genome.computer to show the complete integration flow. Replace it with the production base URL only after your organization receives production access.The API keeps the surface intentionally small. Review each field while building your integration.
/v2/genome_connectionsList genome connections
Scope: genome_connections:read
/v2/genome_connectionsCreate a hosted genome connection
Scope: genome_connections:write
/v2/genome_connections/{genome_connection_id}Get a genome connection
Scope: genome_connections:read
/v2/genome_connections/{genome_connection_id}/bundleCreate a signed .genome bundle download link
Scope: genome_connections:read
/v2/genome_connections/{genome_connection_id}/permission_requestsRequest customer permission again
Scope: genome_connections:write
/v2/genome_connections/{genome_connection_id}/progressGet normalized genome progress
Scope: genome_connections:read
/v2/genome_connections/{genome_connection_id}/insight_panelsList insight panels for a connection
Scope: insight_panels:read
/v2/genome_connections/{genome_connection_id}/insight_panels/{insight_panel_id}Get an insight panel
Scope: insight_panels:read
/v2/webhooksList webhook endpoints
Scope: webhooks:read
/v2/webhooksRegister a webhook endpoint
Scope: webhooks:write
/v2/webhooks/{webhookId}Disable a webhook endpoint
Scope: webhooks:write