Vitality Blueprint Public API
Version: v1 · Status: Pre-release · Last Updated: March 2026
The Vitality Blueprint Public API gives B2B partners programmatic access to performance bloodwork interpretation. Submit your end users' biomarker data — from any lab source — and receive Vitality's proprietary analysis: biomarker grading, functional area scores, vitality score, biological age, key constraint identification, and personalized recommendations (supplementation, nutrition, lifestyle).
Partners can also optionally order blood draws through Vitality's lab network for end users who don't yet have results.
Environments
Vitality provides two environments. Start with Sandbox — build and test your full integration before going live.
| Sandbox | Production | |
|---|---|---|
| Base URL | sandbox.api.vitalityblueprint.com/v1 | api.vitalityblueprint.com/v1 |
| API Key Prefix | sk_sandbox_ | sk_live_ |
| Data | Synthetic test data | Real user bloodwork |
| Analysis Time | Instant (pre-computed) | ~10 minutes |
| Blood Draws | Simulated — no real lab orders | Real Quest / LabCorp requisitions |
| Webhooks | Fire immediately | Fire after analysis completes |
| Rate Limits | 1,000 req/min | 100 req/min |
Quick Start
Submit biomarker data for interpretation in under 60 seconds.
curl -X POST https://sandbox.api.vitalityblueprint.com/v1/orders \ -H "X-Api-Key: sk_sandbox_YOUR_SANDBOX_KEYsk_live_YOUR_PRODUCTION_KEY" \ -H "Content-Type: application/json" \ -d '{ "client": { "external_id": "your-internal-user-id", "sex": "male", "date_of_birth": "1991-06-15" }, "blood_draw_date": "2026-03-01", "biomarkers": [ { "key": "vitamin_d_25_oh", "value": 22.5, "unit": "ng/mL" }, { "key": "ferritin", "value": 28, "unit": "ng/mL" }, { "key": "hs_crp", "value": 3.8, "unit": "mg/L" }, { "key": "magnesium_rbc", "value": 4.1, "unit": "mg/dL" }, { "key": "testosterone_total", "value": 485, "unit": "ng/dL" } ], "webhook_url": "https://your-app.com/webhooks/vitality" }'
The sandbox returns a completed order instantly:The response contains the order ID to track:
{
"order_id": "ord_sb_7f3a1b2cord_7f3a1b2c",
"report_id": "rpt_sb_9e4d8f1arpt_9e4d8f1a",
"status": "completedprocessing",
"biomarkers_accepted": 5,
"created_at": "2026-03-08T14:30:00Z",
"environment": "sandboxproduction"
}Fetch the full report:
curl https://sandbox.api.vitalityblueprint.com/v1/reports/rpt_sb_9e4d8f1arpt_9e4d8f1a \ -H "X-Api-Key: sk_sandbox_YOUR_SANDBOX_KEYsk_live_YOUR_PRODUCTION_KEY"
That's it. You now have a complete bloodwork interpretation with biomarker grading, functional area scores, key constraint analysis, and personalized recommendations.
Authentication
All API requests require an API key passed in the X-Api-Key header.
X-Api-Key: sk_sandbox_YOUR_KEYsk_live_YOUR_KEY
| Key Prefix | Environment | Issued |
|---|---|---|
sk_sandbox_ | Sandbox | Automatically on partner registration |
sk_live_ | Production | After manual review and approval |
Security requirements
- Store keys server-side only — never expose in client-side code or mobile apps
- Use HTTPS for all requests
- Rotate keys immediately if compromised — contact support@vitalityblueprint.com
How It Works
Path 1: Submit Biomarker Data (Primary)
Your end users already have lab results — from their own doctor, a third-party lab, or any other source. Submit the data and get back the full interpretation.
Path 2: Order Blood Draw (Optional)
Your end users don't have results yet. Order a blood draw through Vitality's lab network. See Blood Draw Ordering for details.
Sandbox Behavior
Endpoints
POST /v1/orders
Submit biomarker data for interpretation. This is the primary endpoint — send us your end user's lab results and we return a full analysis. ⚡ Sandbox: Returns completed instantly
biomarkers, pdf_url, or both. More biomarkers = more complete functional area scoring, constraint identification, and recommendations.Request Body
| Field | Type | Required | Description |
|---|---|---|---|
client.external_id | string | Yes | Your internal identifier for this user |
client.sex | string | Yes | male or female — required for range analysis |
client.date_of_birth | string | Conditional | ISO 8601 date. Required if age not provided. |
client.age | number | Conditional | Age in years. Required if date_of_birth not provided. |
client.first_name | string | No | User's first name |
client.last_name | string | No | User's last name |
client.email | string | No | User's email address |
client.height | number | No | Height in inches |
client.weight | number | No | Weight in pounds |
blood_draw_date | string | Yes | Date blood was drawn (ISO 8601 YYYY-MM-DD) |
biomarkers | object[] | No | Array of { key, value, unit } objects. See Supported Biomarkers. |
pdf_url | string | No | URL to a lab report PDF. VB will extract biomarker data. |
webhook_url | string | No | Override the default webhook URL for this order |
test_scenario | string | No | Sandbox only. Name of pre-built test scenario |
Response 201 Created
{
"order_id": "ord_sb_7f3a1b2cord_7f3a1b2c",
"report_id": "rpt_sb_9e4d8f1arpt_9e4d8f1a",
"status": "completedprocessing",
"client_external_id": "user_12345",
"biomarkers_accepted": 10,
"biomarkers_unrecognized": 0,
"created_at": "2026-03-08T14:30:00Z",
"environment": "sandboxproduction"
}Order Status Values
| Status | Description |
|---|---|
processing | Biomarker data received, VB analysis running (~10 min) |
completed | Analysis complete, report available |
failed | Analysis could not be completed (see error field) |
GET /v1/orders/{order_id}
Check the status of an existing order.
{
"order_id": "ord_sb_7f3a1b2cord_7f3a1b2c",
"report_id": "rpt_sb_9e4d8f1arpt_9e4d8f1a",
"status": "completed",
"client_external_id": "user_12345",
"biomarkers_accepted": 10,
"blood_draw_date": "2026-03-01",
"blood_draw_id": null,
"created_at": "2026-03-08T14:30:00Z",
"updated_at": "2026-03-08T14:30:01Z",
"environment": "sandboxproduction"
}blood_draw_id is populated only if this order originated from a blood draw request.
GET /v1/reports/{report_id}
Returns the complete bloodwork interpretation. Contains biomarker grading, functional area scores, vitality score, biological age, key constraint analysis, key biomarkers, and personalized recommendations.
See John Doe Full Report Example for the complete JSON response.
Top-level response structure
{
"report_id": "string",
"order_id": "string",
"status": "completed",
"environment": "sandbox | production",
"client": { ... },
"blood_draw_date": "2026-03-01",
"vitality_score": 72.4,
"biological_age": 31.2,
"functional_areas": [ ... ],
"biomarkers": [ ... ],
"ratios": [ ... ],
"calculations": [ ... ],
"key_constraint": { ... },
"recommendations": [ ... ],
"created_at": "2026-03-08T14:30:00Z"
}| Section | Description |
|---|---|
vitality_score | Overall health performance score (20–100), averaged across all 13 functional areas |
biological_age | Estimated biological age based on biomarker analysis |
functional_areas | Scores and analysis for each of the 13 physiological systems |
biomarkers | Individual results with grading, ranges, explanations, and impact mapping |
ratios | Calculated ratios from biomarker pairs (e.g., Total Cholesterol / HDL) |
calculations | Derived metrics from biomarkers + profile data (e.g., eGFR, HOMA-IR) |
key_constraint | The single biggest factor limiting performance, with related key biomarkers |
recommendations | Personalized actions: supplementation, nutrition, and lifestyle changes |
null scores, and recommendations will be limited to what can be determined from available data.GET /v1/reports/{report_id}/summary
Condensed report — vitality score, biological age, functional area scores, key constraint, key biomarkers, and top recommendations. Useful for dashboard views.
{
"report_id": "rpt_sb_9e4d8f1arpt_9e4d8f1a",
"vitality_score": 72.4,
"biological_age": 31.2,
"functional_areas": [
{ "key": "energy", "name": "Energy", "score": 81.3 },
{ "key": "sleep", "name": "Sleep", "score": 88.0 },
{ "key": "resilience", "name": "Resilience", "score": 62.5 },
{ "key": "inflammation", "name": "Inflammation", "score": 55.8 },
{ "key": "cellular_health", "name": "Cellular Health", "score": 78.2 },
{ "key": "micronutrients", "name": "Micronutrients", "score": 48.9 },
{ "key": "hormone_profile", "name": "Hormone Profile", "score": 71.0 },
{ "key": "brain_chemistry", "name": "Brain Chemistry", "score": 82.5 },
{ "key": "cardiovascular", "name": "Cardiovascular Health", "score": 65.3 },
{ "key": "gut_health", "name": "Gut Health", "score": 85.0 },
{ "key": "hydration", "name": "Hydration", "score": 90.1 },
{ "key": "stress", "name": "Stress", "score": 76.4 },
{ "key": "toxic_load", "name": "Toxic Load", "score": 88.7 }
],
"key_constraint": {
"key": "micronutrient_deficiency",
"name": "Micronutrient Deficiency",
"summary": "Critical vitamin and mineral gaps are limiting energy, immune resilience, and recovery."
},
"key_biomarkers": [
{ "key": "vitamin_d_25_oh", "name": "Vitamin D, 25-OH", "flag": "low" },
{ "key": "magnesium_rbc", "name": "Magnesium, RBC", "flag": "low" },
{ "key": "ferritin", "name": "Ferritin", "flag": "low" }
],
"out_of_range_count": 4,
"normal_count": 3,
"optimal_count": 21,
"top_recommendations": [
"Supplement with Vitamin D3 (5,000 IU daily with a fat-containing meal)",
"Add magnesium glycinate (400mg before bed)",
"Increase dietary iron through red meat, spinach, and lentils"
]
}Webhooks
When a report is ready, Vitality sends a POST request to your registered webhook URL.
Webhook Payload
{
"event": "results.ready",
"report_id": "rpt_sb_9e4d8f1arpt_9e4d8f1a",
"order_id": "ord_sb_7f3a1b2cord_7f3a1b2c",
"client_external_id": "user_12345",
"vitality_score": 72.4,
"status": "completed",
"environment": "sandboxproduction",
"timestamp": "2026-03-08T14:45:00Z"
}Signature Verification
Every webhook includes an X-VB-Signature header with an HMAC-SHA256 signature. Always verify it.
const crypto = require('crypto');
function verifyWebhook(payload, signature, secret) {
const expected = 'sha256=' + crypto
.createHmac('sha256', secret)
.update(payload)
.digest('hex');
return crypto.timingSafeEqual(
Buffer.from(signature),
Buffer.from(expected)
);
}
Retry Policy
| Attempt | Delay |
|---|---|
| 1st retry | 1 minute |
| 2nd retry | 10 minutes |
| 3rd retry | 1 hour |
After 3 failed retries, the webhook is marked as failed. You can always retrieve the report via GET /v1/reports/{report_id}.
Test Webhooks Sandbox only
Trigger a test webhook delivery on demand:
curl -X POST https://sandbox.api.vitalityblueprint.com/v1/webhooks/test \
-H "X-Api-Key: sk_sandbox_YOUR_KEY" \
-H "Content-Type: application/json" \
-d '{
"report_id": "rpt_sb_9e4d8f1a",
"target_url": "https://your-app.com/webhooks/vitality"
}'Blood Draw Ordering Optional
Blood draw ordering is for partners whose end users don't already have lab results. Vitality fulfills blood draws through Quest Diagnostics and LabCorp. If your users bring their own data, you only need the Submit Order endpoint.
How it works
- Your end user pays for a blood draw on your platform
- You send us an API request with the user's info and desired panel
- We return a PDF requisition form and blood draw directions
- You share these with the end user — they visit any Quest or LabCorp location
- Lab results are sent to Vitality automatically
- Vitality runs the full analysis and fires a webhook when the report is ready
Panels
Five panel tiers are available, from basic health screening to maximum biomarker coverage.
| Panel | Name | Biomarkers | Description |
|---|---|---|---|
essential | Essential | ~25 | Core health screening: CBC, metabolic panel, lipids, thyroid |
foundation | Foundation | ~45 | Comprehensive wellness: adds vitamins, minerals, inflammation markers |
performance | Performance | ~65 | Performance-focused: adds hormones, metabolic markers, advanced lipids |
advanced | Advanced | ~85 | Deep analysis: adds advanced cardiovascular, autoimmune, toxicity markers |
elite | Elite | ~128 | Maximum coverage for the most complete interpretation |
performance or higher for meaningful functional area scoring and targeted recommendations.POST /v1/blood-draws
Create a blood draw order. Returns a PDF requisition form and directions for the end user.
Request Body
| Field | Type | Required | Description |
|---|---|---|---|
client.external_id | string | Yes | Your internal identifier |
client.first_name | string | Yes | Required for lab requisition form |
client.last_name | string | Yes | Required for lab requisition form |
client.email | string | Yes | Requisition delivery and lab communications |
client.sex | string | Yes | male or female |
client.date_of_birth | string | Yes | ISO 8601 date — required by labs |
panel | string | Yes | essential, foundation, performance, advanced, or elite |
webhook_url | string | No | Override default webhook for results from this blood draw |
Response 201 Created
{
"blood_draw_id": "bd_8a2f4c9e",
"status": "requisition_created",
"panel": "performance",
"client_external_id": "user_12345",
"requisition_pdf_url": "https://sandbox.api.vitalityblueprint.com/v1/blood-draws/bd_8a2f4c9e/requisition.pdf",
"blood_draw_directions": "1. Print or save the attached requisition PDF.\n2. Visit any Quest Diagnostics or LabCorp patient service center.\n3. Bring a valid photo ID and the requisition form.\n4. Fast for 10-12 hours before your visit (water is OK).\n5. The blood draw takes approximately 5-10 minutes.\n6. Results are sent directly to Vitality Blueprint.",
"created_at": "2026-03-08T14:30:00Z",
"environment": "sandboxproduction"
}requisition_pdf_url and blood_draw_directions with your end user. The PDF is a valid lab requisition form to present at Quest or LabCorp.Blood Draw Status Values
| Status | Description |
|---|---|
requisition_created | PDF ready; awaiting the user's lab visit |
draw_completed | Blood drawn at lab, awaiting results |
results_received | Lab results received, interpretation order created automatically |
cancelled | Blood draw order cancelled |
When a blood draw reaches results_received, an interpretation order is created automatically. You'll receive a results.ready webhook when the report is available.
GET /v1/blood-draws/{blood_draw_id}
Check the status of a blood draw order.
{
"blood_draw_id": "bd_8a2f4c9e",
"status": "results_received",
"panel": "performance",
"client_external_id": "user_12345",
"order_id": "ord_3b7e9d2f",
"report_id": "rpt_4c8a1f5e",
"requisition_pdf_url": "https://sandbox.api.vitalityblueprint.com/v1/blood-draws/bd_8a2f4c9e/requisition.pdf",
"created_at": "2026-03-08T14:30:00Z",
"updated_at": "2026-03-15T09:22:00Z",
"environment": "sandboxproduction"
}order_id and report_id are populated once lab results are received.
Data Models
Biomarker
A single lab-tested biomarker with VB analysis. Each biomarker includes the raw result, VB's grading against optimal and normal ranges, a description, and an explanation if out of range.
| Field | Type | Description |
|---|---|---|
key | string | Stable identifier (e.g., vitamin_d_25_oh) |
name | string | Display name |
result | number | Measured value from the lab |
unit | string | Unit of measure |
status | string | optimal normal out_of_range |
flag | string | ok, low, or high relative to optimal range |
ranges.optimal | string | Optimal range |
ranges.normal | string | Normal range |
description | string | What this biomarker measures and why it matters |
explanation | string|null | If out of range: what it means for the body |
explanation_sources | string[] | Scientific references |
functional_areas | object[] | Impacted functional areas with scores |
performance_goals | object[] | Impacted performance goals |
Ratio
A calculated ratio derived from two or more biomarkers. Same analysis structure as biomarkers, plus a components field listing which biomarker keys are used.
| Field | Type | Description |
|---|---|---|
key | string | Stable identifier |
name | string | Display name |
result | number | Calculated value |
components | string[] | Biomarker keys used in calculation |
status / flag / ranges / description / explanation | — | Same structure as Biomarker |
Calculation
A derived metric from biomarkers and/or profile data (age, weight, etc.).
| Field | Type | Description |
|---|---|---|
key | string | Stable identifier (e.g., egfr, homa_ir) |
components | string[] | Biomarker keys used |
| Same analysis fields as Biomarker | ||
Functional Area
A scored category representing a major physiological system. VB analyzes 13 functional areas and scores each from 20 to 100. null score if insufficient biomarker data.
| Field | Type | Description |
|---|---|---|
key | string | Stable identifier |
name | string | Display name |
score | number|null | Score from 20 to 100. null if insufficient data. |
description | string | What this area covers |
deeper_explanation | string | Detailed explanation |
implication | string | What the current score means |
most_impactful_markers | object[] | Markers most affecting this score |
The 13 functional areas: Energy, Sleep, Resilience, Inflammation, Cellular Health, Micronutrients, Hormone Profile, Brain Chemistry, Cardiovascular Health, Gut Health, Hydration, Stress, Toxic Load
Key Constraint
The single biggest factor holding back performance, identified by VB's proprietary algorithm. Includes the key biomarkers — the specific markers most responsible for the constraint.
| Field | Type | Description |
|---|---|---|
key | string | Constraint identifier |
name | string | Display name |
what_is | string | Description of this constraint |
how_it_impacts_physiology | string | How it affects the body |
how_it_impacts_performance | string | How it limits performance goals |
symptoms | object[] | Associated symptoms |
related_biomarkers | object[] | Key biomarkers contributing to this constraint, with flags |
impacted_functional_areas | object[] | Affected functional areas with scores |
Recommendation
A personalized action item from VB's analysis. Recommendations are categorized into three types: supplementation, nutrition, and lifestyle.
| Field | Type | Description |
|---|---|---|
type | string | supplementation, nutrition, or lifestyle |
key | string | Stable identifier |
what | string | The recommendation name |
how | string | Specific implementation instructions |
why | string | Why this is recommended for this user |
priority | string | key_constraint, performance_goal, or biomarker |
targets | object[] | What this addresses (biomarkers, constraints, goals) |
impact_functional_areas | object[] | Functional areas this improves |
impact_performance_goals | object[] | Performance goals this improves |
sources | object[] | Scientific references |
Sandbox Test Scenarios
Pre-built scenarios let you exercise different code paths without real bloodwork. Pass the test_scenario field when creating an order. You can also submit your own biomarker data in Sandbox without a test scenario.
| Scenario | Description | Key Characteristics |
|---|---|---|
healthy_male_30 | Healthy 30-year-old male | All biomarkers optimal, vitality score ~92 |
low_vitamin_d_male_34 | Male with micronutrient gaps | Low Vitamin D, magnesium, ferritin. Elevated hs-CRP. Constraint: Micronutrient Deficiency |
metabolic_risk_male_55 | Older male, metabolic markers | Elevated LDL, A1C, triglycerides. Constraint: Cardiometabolic Inefficiency |
athletic_female_25 | Athletic female | Low iron, borderline estradiol, elevated cortisol. Constraint: Hormone Imbalance |
low_vitamin_d_female_45 | Female with deficiencies | Low Vitamin D, B12, ferritin, suboptimal thyroid. Constraint: Micronutrient Deficiency |
Full Report Example: John Doe
Complete GET /v1/reports/{report_id} response using the low_vitamin_d_male_34 sandbox scenario.
Scenario: John Doe, 34-year-old male, 5'11", 185 lbs. Key findings: low Vitamin D, low magnesium, low ferritin, elevated hs-CRP, elevated LDL, suboptimal testosterone.
{
"report_id": "rpt_sb_9e4d8f1a",
"order_id": "ord_sb_7f3a1b2c",
"status": "completed",
"environment": "sandbox",
"client": {
"external_id": "user_12345",
"first_name": "John",
"last_name": "Doe",
"sex": "male",
"age": 34
},
"blood_draw_date": "2026-03-01",
"vitality_score": 72.4,
"biological_age": 31.2,
"functional_areas": [
{
"key": "energy", "name": "Energy", "score": 81.3,
"description": "Energy is the summation of all the systems in the body.",
"deeper_explanation": "Understanding which systems are working efficiently reveals opportunities for improvement.",
"implication": "Your energy systems are functioning well overall, with room for targeted improvement.",
"most_impactful_markers": [
{ "key": "ferritin", "name": "Ferritin", "flag": "low", "significance": "individually_significant" },
{ "key": "vitamin_d_25_oh", "name": "Vitamin D, 25-OH", "flag": "low", "significance": "individually_significant" }
]
},
{
"key": "micronutrients", "name": "Micronutrients", "score": 48.9,
"description": "Critical vitamins and minerals that form the backbone of human performance.",
"deeper_explanation": "Even mild insufficiencies can cascade across multiple systems.",
"implication": "Multiple key micronutrients are below optimal levels.",
"most_impactful_markers": [
{ "key": "vitamin_d_25_oh", "name": "Vitamin D, 25-OH", "flag": "low", "significance": "critically_significant" },
{ "key": "magnesium_rbc", "name": "Magnesium, RBC", "flag": "low", "significance": "critically_significant" },
{ "key": "ferritin", "name": "Ferritin", "flag": "low", "significance": "individually_significant" }
]
},
{ "key": "inflammation", "name": "Inflammation", "score": 55.8, "description": "The body is constantly working to maintain balance.", "deeper_explanation": "Chronic low-grade inflammation is pervasive.", "implication": "Elevated inflammatory markers suggest systemic inflammation.", "most_impactful_markers": [{ "key": "hs_crp", "name": "hs-CRP", "flag": "high", "significance": "critically_significant" }] },
{ "key": "resilience", "name": "Resilience", "score": 62.5, "description": "The ability to respond to challenges.", "deeper_explanation": "Repeated performance requires exceptional recovery.", "implication": "Moderately impacted by micronutrient gaps and inflammation.", "most_impactful_markers": [] },
{ "key": "cardiovascular", "name": "Cardiovascular Health", "score": 65.3, "description": "Supports every cell in the body.", "deeper_explanation": "Assessed through lipid profiles and inflammatory markers.", "implication": "Elevated LDL and inflammation create moderate risk.", "most_impactful_markers": [{ "key": "ldl_cholesterol", "name": "LDL Cholesterol", "flag": "high", "significance": "individually_significant" }] },
{ "key": "hormone_profile", "name": "Hormone Profile", "score": 71.0, "description": "Primary messengers in the body.", "deeper_explanation": "Key driver of energy, composition, and recovery.", "implication": "Testosterone normal but below optimal.", "most_impactful_markers": [] },
{ "key": "cellular_health", "name": "Cellular Health", "score": 78.2, "description": "The most basic working unit.", "deeper_explanation": "Energy production and repair efficiency.", "implication": "In good standing.", "most_impactful_markers": [] },
{ "key": "brain_chemistry", "name": "Brain Chemistry", "score": 82.5, "description": "Controls mental and physical performance.", "deeper_explanation": "Neurotransmitter precursors and nutrient availability.", "implication": "Performing well.", "most_impactful_markers": [] },
{ "key": "sleep", "name": "Sleep", "score": 88.0, "description": "Foundational pillar of performance.", "deeper_explanation": "How well biochemistry supports restorative sleep.", "implication": "In strong shape.", "most_impactful_markers": [] },
{ "key": "gut_health", "name": "Gut Health", "score": 85.0, "description": "Billions of microorganisms.", "deeper_explanation": "Inflammatory load and nutrient absorption.", "implication": "Strong position.", "most_impactful_markers": [] },
{ "key": "hydration", "name": "Hydration", "score": 90.1, "description": "Crucial for performance.", "deeper_explanation": "Electrolyte balance and kidney function.", "implication": "Excellent.", "most_impactful_markers": [] },
{ "key": "stress", "name": "Stress", "score": 76.4, "description": "Can facilitate growth when managed.", "deeper_explanation": "How the body copes with demands.", "implication": "Acceptable.", "most_impactful_markers": [] },
{ "key": "toxic_load", "name": "Toxic Load", "score": 88.7, "description": "Strains filtration processes.", "deeper_explanation": "Liver and kidney clearance.", "implication": "Functioning well.", "most_impactful_markers": [] }
],
"biomarkers": [
{ "key": "vitamin_d_25_oh", "name": "Vitamin D, 25-OH", "result": 22.5, "unit": "ng/mL", "status": "out_of_range", "flag": "low", "ranges": { "optimal": "50 - 80 ng/mL", "normal": "30 - 100 ng/mL" }, "description": "Critical for calcium absorption, immune function, and muscle performance.", "explanation": "At 22.5 ng/mL, significantly below optimal.", "explanation_sources": ["Holick MF. N Engl J Med. 2007;357:266-281"], "functional_areas": [{ "key": "micronutrients", "score": 48.9 }, { "key": "resilience", "score": 62.5 }, { "key": "inflammation", "score": 55.8 }], "performance_goals": [{ "key": "endurance" }, { "key": "muscle_strength" }] },
{ "key": "magnesium_rbc", "name": "Magnesium, RBC", "result": 4.1, "unit": "mg/dL", "status": "out_of_range", "flag": "low", "ranges": { "optimal": "5.0 - 6.5 mg/dL", "normal": "4.2 - 6.8 mg/dL" }, "description": "Involved in 300+ enzymatic reactions.", "explanation": "Below optimal, impairs ATP production.", "explanation_sources": [], "functional_areas": [{ "key": "micronutrients", "score": 48.9 }], "performance_goals": [{ "key": "muscle_strength" }] },
{ "key": "ferritin", "name": "Ferritin", "result": 28, "unit": "ng/mL", "status": "out_of_range", "flag": "low", "ranges": { "optimal": "75 - 150 ng/mL", "normal": "30 - 400 ng/mL" }, "description": "Primary iron storage marker.", "explanation": "Depleted iron stores impair oxygen transport.", "explanation_sources": [], "functional_areas": [{ "key": "micronutrients", "score": 48.9 }, { "key": "energy", "score": 81.3 }], "performance_goals": [{ "key": "endurance" }] },
{ "key": "hs_crp", "name": "hs-CRP", "result": 3.8, "unit": "mg/L", "status": "out_of_range", "flag": "high", "ranges": { "optimal": "< 1.0 mg/L", "normal": "< 3.0 mg/L" }, "description": "Most reliable inflammation indicator.", "explanation": "Elevated systemic inflammation.", "explanation_sources": [], "functional_areas": [{ "key": "inflammation", "score": 55.8 }, { "key": "cardiovascular", "score": 65.3 }], "performance_goals": [{ "key": "endurance" }] },
{ "key": "ldl_cholesterol", "name": "LDL Cholesterol", "result": 158, "unit": "mg/dL", "status": "out_of_range", "flag": "high", "ranges": { "optimal": "< 100 mg/dL", "normal": "< 130 mg/dL" }, "description": "Primary cardiovascular risk factor.", "explanation": "Elevated, increases arterial plaque risk.", "explanation_sources": [], "functional_areas": [{ "key": "cardiovascular", "score": 65.3 }], "performance_goals": [{ "key": "endurance" }] },
{ "key": "hdl_cholesterol", "name": "HDL Cholesterol", "result": 58, "unit": "mg/dL", "status": "optimal", "flag": "ok", "ranges": { "optimal": "50 - 90 mg/dL", "normal": "40 - 100 mg/dL" }, "description": "Protective cholesterol.", "explanation": null, "explanation_sources": [], "functional_areas": [{ "key": "cardiovascular", "score": 65.3 }], "performance_goals": [] },
{ "key": "testosterone_total", "name": "Testosterone, Total", "result": 485, "unit": "ng/dL", "status": "normal", "flag": "ok", "ranges": { "optimal": "550 - 900 ng/dL", "normal": "264 - 916 ng/dL" }, "description": "Primary male sex hormone.", "explanation": "Normal but below optimal.", "explanation_sources": [], "functional_areas": [{ "key": "hormone_profile", "score": 71.0 }], "performance_goals": [{ "key": "muscle_strength" }] },
{ "key": "hemoglobin_a1c", "name": "Hemoglobin A1C", "result": 5.1, "unit": "%", "status": "optimal", "flag": "ok", "ranges": { "optimal": "4.0 - 5.3 %", "normal": "4.0 - 5.6 %" }, "description": "Average blood sugar control.", "explanation": null, "explanation_sources": [], "functional_areas": [{ "key": "cellular_health", "score": 78.2 }], "performance_goals": [{ "key": "fat_loss" }] },
{ "key": "tsh", "name": "TSH", "result": 1.8, "unit": "uIU/mL", "status": "optimal", "flag": "ok", "ranges": { "optimal": "1.0 - 2.5 uIU/mL", "normal": "0.45 - 4.5 uIU/mL" }, "description": "Thyroid function marker.", "explanation": null, "explanation_sources": [], "functional_areas": [{ "key": "hormone_profile", "score": 71.0 }], "performance_goals": [{ "key": "fat_loss" }] },
{ "key": "vitamin_b12", "name": "Vitamin B12", "result": 650, "unit": "pg/mL", "status": "optimal", "flag": "ok", "ranges": { "optimal": "500 - 1000 pg/mL", "normal": "232 - 1245 pg/mL" }, "description": "Essential for red blood cells and neurological function.", "explanation": null, "explanation_sources": [], "functional_areas": [{ "key": "micronutrients", "score": 48.9 }], "performance_goals": [{ "key": "cognitive_performance" }] }
],
"ratios": [
{ "key": "total_cholesterol_hdl_ratio", "name": "Total Cholesterol / HDL Ratio", "result": 4.2, "unit": null, "status": "normal", "flag": "ok", "ranges": { "optimal": "< 3.5", "normal": "< 5.0" }, "components": ["total_cholesterol", "hdl_cholesterol"], "description": "Cardiovascular risk predictor.", "explanation": "Normal but above optimal.", "explanation_sources": [], "functional_areas": [{ "key": "cardiovascular", "score": 65.3 }] },
{ "key": "triglyceride_hdl_ratio", "name": "Triglyceride / HDL Ratio", "result": 1.4, "unit": null, "status": "optimal", "flag": "ok", "ranges": { "optimal": "< 2.0", "normal": "< 3.0" }, "components": ["triglycerides", "hdl_cholesterol"], "description": "Insulin resistance surrogate.", "explanation": null, "explanation_sources": [], "functional_areas": [{ "key": "cardiovascular", "score": 65.3 }] }
],
"calculations": [
{ "key": "egfr", "name": "eGFR", "result": 105, "unit": "mL/min/1.73m²", "status": "optimal", "flag": "ok", "ranges": { "optimal": "> 90", "normal": "> 60" }, "components": ["creatinine"], "description": "Kidney function.", "explanation": null, "explanation_sources": [], "functional_areas": [{ "key": "toxic_load", "score": 88.7 }] },
{ "key": "homa_ir", "name": "HOMA-IR", "result": 1.8, "unit": null, "status": "normal", "flag": "ok", "ranges": { "optimal": "< 1.0", "normal": "< 2.5" }, "components": ["glucose_fasting", "insulin_fasting"], "description": "Insulin resistance estimate.", "explanation": "Normal but above optimal.", "explanation_sources": [], "functional_areas": [{ "key": "cellular_health", "score": 78.2 }] }
],
"key_constraint": {
"key": "micronutrient_deficiency",
"name": "Micronutrient Deficiency",
"what_is": "Critical vitamins and minerals fall below levels needed for optimal function.",
"how_it_impacts_physiology": "Depleted stores force the body to triage resources, reducing energy, immune response, and recovery.",
"how_it_impacts_performance": "Directly limits training adaptations, cognitive sharpness, and resilience to stress.",
"symptoms": [
{ "text": "Persistent fatigue despite adequate sleep" },
{ "text": "Slow recovery between training sessions" },
{ "text": "Muscle cramps or tightness" },
{ "text": "Difficulty maintaining focus" },
{ "text": "Frequent illness or prolonged colds" }
],
"related_biomarkers": [
{ "key": "vitamin_d_25_oh", "name": "Vitamin D, 25-OH", "flag": "low" },
{ "key": "magnesium_rbc", "name": "Magnesium, RBC", "flag": "low" },
{ "key": "ferritin", "name": "Ferritin", "flag": "low" }
],
"impacted_functional_areas": [
{ "key": "micronutrients", "name": "Micronutrients", "score": 48.9 },
{ "key": "energy", "name": "Energy", "score": 81.3 },
{ "key": "resilience", "name": "Resilience", "score": 62.5 }
]
},
"recommendations": [
{ "type": "supplementation", "key": "vitamin_d3_supplement", "what": "Vitamin D3 Supplement", "how": "Take 5,000 IU daily with a fat-containing meal. Pair with K2 (MK-7, 100mcg).", "why": "Vitamin D at 22.5 ng/mL is significantly below optimal (50-80 ng/mL).", "priority": "key_constraint", "targets": [{ "type": "biomarker", "key": "vitamin_d_25_oh" }, { "type": "constraint", "key": "micronutrient_deficiency" }], "impact_functional_areas": [{ "key": "micronutrients" }, { "key": "resilience" }], "impact_performance_goals": [{ "key": "endurance" }], "sources": [{ "title": "Holick MF. Vitamin D deficiency.", "link": "https://pubmed.ncbi.nlm.nih.gov/17634462/" }] },
{ "type": "supplementation", "key": "magnesium_glycinate_supplement", "what": "Magnesium Glycinate Supplement", "how": "Take 400mg 30-60 min before bed.", "why": "RBC Magnesium at 4.1 mg/dL is below optimal.", "priority": "key_constraint", "targets": [{ "type": "biomarker", "key": "magnesium_rbc" }], "impact_functional_areas": [{ "key": "micronutrients" }, { "key": "sleep" }], "impact_performance_goals": [{ "key": "muscle_strength" }], "sources": [{ "title": "Magnesium and exercise", "link": "https://pubmed.ncbi.nlm.nih.gov/28986916/" }] },
{ "type": "nutrition", "key": "iron_rich_diet", "what": "Iron-Rich Dietary Protocol", "how": "2-3 servings/week of heme iron sources. Pair with Vitamin C.", "why": "Ferritin at 28 ng/mL indicates depleted iron stores.", "priority": "key_constraint", "targets": [{ "type": "biomarker", "key": "ferritin" }], "impact_functional_areas": [{ "key": "micronutrients" }, { "key": "energy" }], "impact_performance_goals": [{ "key": "endurance" }], "sources": [{ "title": "Iron bioavailability", "link": "https://pubmed.ncbi.nlm.nih.gov/20200263/" }] },
{ "type": "nutrition", "key": "anti_inflammatory_nutrition", "what": "Anti-Inflammatory Nutrition Protocol", "how": "Increase omega-3 to 3-4g EPA/DHA daily. Add turmeric, berries, leafy greens.", "why": "hs-CRP at 3.8 mg/L indicates elevated inflammation.", "priority": "biomarker", "targets": [{ "type": "biomarker", "key": "hs_crp" }], "impact_functional_areas": [{ "key": "inflammation" }, { "key": "cardiovascular" }], "impact_performance_goals": [{ "key": "endurance" }], "sources": [{ "title": "Omega-3 and inflammation", "link": "https://pubmed.ncbi.nlm.nih.gov/20500789/" }] },
{ "type": "lifestyle", "key": "zone_2_cardiovascular_training", "what": "Zone 2 Cardiovascular Training", "how": "3 sessions/week, 30-45 min at conversational effort (120-140 BPM).", "why": "Improves mitochondrial density and lipid profiles.", "priority": "biomarker", "targets": [{ "type": "biomarker", "key": "ldl_cholesterol" }], "impact_functional_areas": [{ "key": "cardiovascular" }, { "key": "inflammation" }], "impact_performance_goals": [{ "key": "endurance" }, { "key": "fat_loss" }], "sources": [{ "title": "Zone 2 and metabolic health", "link": "https://pubmed.ncbi.nlm.nih.gov/29934424/" }] }
],
"created_at": "2026-03-08T14:30:00Z"
}environment is "production", IDs don't have the _sb_ prefix, and data reflects actual bloodwork analyzed by VB's algorithm (~10 min processing).
Supported Biomarkers
Use these exact keys when submitting biomarker data. A full list is available at GET /v1/biomarkers. Common keys:
| Key | Name | Common Unit |
|---|---|---|
vitamin_d_25_oh | Vitamin D, 25-OH | ng/mL |
ferritin | Ferritin | ng/mL |
magnesium_rbc | Magnesium, RBC | mg/dL |
hs_crp | hs-CRP | mg/L |
ldl_cholesterol | LDL Cholesterol | mg/dL |
hdl_cholesterol | HDL Cholesterol | mg/dL |
total_cholesterol | Total Cholesterol | mg/dL |
triglycerides | Triglycerides | mg/dL |
testosterone_total | Testosterone, Total | ng/dL |
hemoglobin_a1c | Hemoglobin A1C | % |
tsh | TSH | uIU/mL |
vitamin_b12 | Vitamin B12 | pg/mL |
glucose_fasting | Fasting Glucose | mg/dL |
insulin_fasting | Fasting Insulin | uIU/mL |
creatinine | Creatinine | mg/dL |
cortisol | Cortisol | mcg/dL |
estradiol | Estradiol | pg/mL |
dhea_s | DHEA-S | mcg/dL |
Unrecognized biomarker keys are ignored and returned in the unrecognized_biomarkers field of the order response.
Error Reference
All errors follow a consistent format:
{
"error": {
"code": "error_code_here",
"message": "Human-readable description of what went wrong."
}
}| HTTP Status | Code | Description |
|---|---|---|
401 | authentication_required | Missing or invalid API key |
403 | forbidden | Valid key but lacks permission |
403 | production_not_approved | Production access not yet approved |
404 | order_not_found | Order ID does not exist or belongs to another partner |
404 | report_not_found | Report ID does not exist or belongs to another partner |
404 | blood_draw_not_found | Blood draw ID does not exist or belongs to another partner |
409 | report_not_ready | Report still processing. Wait for webhook or poll order status. |
422 | validation_error | Request body failed validation |
422 | invalid_test_scenario | Unknown test_scenario name |
422 | invalid_panel | Unknown panel tier |
422 | no_data_provided | Neither biomarkers nor pdf_url was provided |
429 | rate_limit_exceeded | Too many requests. Retry after Retry-After header. |
500 | internal_error | Unexpected server error |
Rate Limits
| Environment | Limit | Window |
|---|---|---|
| Sandbox | 1,000 requests | Per minute |
| Production | 100 requests | Per minute |
Rate limit headers are included in every response:
X-RateLimit-Limit: 100 X-RateLimit-Remaining: 97 X-RateLimit-Reset: 1709913600
Going Live Checklist
Before requesting production access, verify your integration handles these scenarios:
- API key stored server-side, never exposed to clients
- Successfully submits biomarker data and stores
order_idandreport_id - Webhook endpoint accepts POST, verifies signatures, responds with 2xx within 10 seconds
- Webhook handler is idempotent (handles duplicate deliveries)
- Successfully fetches and parses full report JSON
- Gracefully handles 401, 404, 409, 422, 429, and 500 responses
- Implements backoff when receiving 429 responses
- Blood draws (if using): creates blood draw orders, displays requisition PDF + directions
To request production access, contact your Vitality Blueprint partner manager or email partners@vitalityblueprint.com.
Changelog
| Date | Version | Changes |
|---|---|---|
| 2026-03-11 | v1.1.0-draft | Added biomarker submission flow, blood draw ordering (optional), PDF upload, supported biomarkers reference. Removed patterns (deprecated). |
| 2026-03-08 | v1.0.0-draft | Initial API specification (pre-release) |