What you can build
Everything in our platform, through the API.
The same endpoints power SelfDecode, our own consumer app.
Profiles & orders
Create customer profiles, order DNA kits with shipping options, and track every kit from order to results.
Genome files
Upload consumer and array files one by one or in bulk, and download raw, imputed and whole-genome data.
Reports
Health, PGx, ancestry, longevity, carrier status, clinical overview, biochemistry, HLA and functional variant reports, plus action plans.
White-label PDFs
Generate branded PDF reports with your logo and configuration set in the request.
Recommendations & diet
Ranked recommendations, optimal diet and personalized meal plans for each profile.
Labs
Add lab results in bulk, read them alongside genetics, generate lab PDFs, or extract results from uploaded files with OCR (beta).
Intake forms & lifestyle
Build your own intake forms and run 150+ lifestyle risk assessments through the API.
Genes & SNPs
Look up genotypes, gene and SNP details, and run custom SNP lists for your own reports.
AI LLM
Embed our genome-aware AI assistant in your app as an iframe, scoped to each of your end users.
Getting started
From contract to production in four steps.
Sign and get credentials
Once your agreement is signed, you receive a client ID and secret for the test environment.
Get a token
Exchange your credentials for a bearer token (OAuth 2.0 client credentials). Tokens are valid for two days.
Build in the test environment
Create profiles, upload files, generate reports and test webhooks against QA, with our developers on a shared Slack channel.
Go live in the US or EU
Switch to production in the region that matches your customers. A basic integration can go live in as little as 24 hours.
# Get a bearer token (valid for 2 days) curl -X POST https://"$SD_ENV"selfdecode.com/service/health-analysis/accounts/user/openid/token/ \ -d "client_id=$CLIENT_ID&client_secret=$CLIENT_SECRET&grant_type=client_credentials" # Then send it with every request Authorization: Bearer <token>
From the authentication guide in the API reference.
| Environment | Use it for | Base URL |
|---|---|---|
| QA-B2B (test) | Integration and testing | https://qa-b2b.selfdecode.com/service/b2b-integrations/ |
| Production US | Customers outside the EU, EEA and UK | https://selfdecode.com/service/b2b-integrations/ |
| Production EU | Customers in the EU | https://eu.selfdecode.com/service/b2b-integrations/ |
Webhooks
No polling. Results come to you.
Register a callback URL and we send the job's full status to your system the moment it changes. Each webhook has its own secret, which you can reset at any time.
Success and failure events for every job type
Payload matches the job's GET response, so no extra mapping
Create, update and pause webhooks through the API
Events
Webhook events
| Job type | You are notified when |
|---|---|
| Health, PGx, ancestry, longevity, carrier status, clinical overview and biochemistry reports | The report or its PDF is ready, or the job fails |
| Genome file uploads | The file has been processed, or processing fails |
| DNA kits | The kit has been processed, or processing fails |
| Orders | The order ships, or there is an order error |
| Lab OCR | Lab results are extracted and ready to review, or the job fails |
AI in your app
Embed a genome-aware AI assistant
Each chat is tied to one of your end users and can only see that user's reports, labs and genes. Your API token never reaches the browser: your backend issues a single-use handoff token that is valid for 60 seconds.
<div id="decody" style="height: 700px"></div> <script src="https://{env}selfdecode.com/chatbot-iframe/decody-embed.js"></script> <script> const handle = Decody.mount('#decody', { getOtt: async () => { const res = await fetch('/your-backend/decody-handoff', { method: 'POST' }); if (!res.ok) throw new Error('handoff failed'); return (await res.json()).ott; }, config: { feature_name: 'Ask HealthBot', brand_color: '#0055ff' }, // optional branding }); </script>
Branded with your name and color
Restricted to your own domains
Choose which data the assistant can use: reports, labs, genes, PGx
Usage-based pricing, quoted with your plan
MCP: connect your own AI to each user's results.
FAQ
Developer questions
Does the API include a user interface?
No. It returns data and PDFs, and you design the experience. If you'd rather not build, launch on our branded platform.
Which DNA files can we upload?
Consumer files such as 23andMe and AncestryDNA, and genotyping array data. Whole genomes are accepted from any sequencing lab.
Which version should we use?
Version 3. Versions 1 and 2 are deprecated and no longer receive bug fixes; transition guides are in the reference.
Where is the data hosted?
In the EU (Frankfurt) for customers in the EU, EEA and UK, and in the US for everyone else.
When do we get sandbox access?
Test credentials are issued once your agreement is signed. Book a call and we'll walk you through it.
Is there a rate limit?
The token endpoint allows 5 requests per IP address every 2 minutes. Tokens last two days, so reuse them.
Start building this week.
Book a call for pricing, your agreement and test credentials.