Partner API v1.0
Partner Documentation

Build with Healify

Anna, our AI health coach, plus nutrition tracking, bloodwork analysis, DNA insights, and 150+ health metrics — all via a single REST API.

Production: ai.healify.ai REST + SSE streaming JWT Bearer Auth 472 endpoints

Authentication

JWT Bearer Token

All endpoints require a JWT in the Authorization header. Obtain a token via Apple Sign In or email auth. Tokens expire — use the refresh token to renew.

Header
Authorization: Bearer eyJhbGciOiJSUzI1NiIsInR5cCI6IkpXVCJ9...

Base URLs

PROD https://ai.healify.ai

DEV https://ai-dev.healify.ai

All endpoints are prefixed with /api. The dev environment is a full mirror of production — use it for integration testing.

Chat (Anna AI)

17 endpoints
POST /api/chat/graph Send message to Anna AI

Primary endpoint for all Anna AI interactions. Add ?streaming=true to get a Server-Sent Events stream. Anna auto-routes to the appropriate specialist agent (nutrition, goals, habits, metrics) based on context.

FieldTypeRequiredDescription
messagestringrequiredUser message text
sessionIdstringoptionalSession ID for conversation continuity
contextobjectoptionalAdditional context payload
Request
POST /api/chat/graph?streaming=true
Authorization: Bearer <token>
Content-Type: application/json

{
  "message": "What should I eat for lunch given my recent bloodwork?",
  "sessionId": "sess_abc123"
}
Response — SSE Stream
data: {"type":"token","content":"Based on your bloodwork, "}
data: {"type":"token","content":"I'd recommend focusing on..."}
data: {"type":"done","sessionId":"sess_abc123","messageId":"msg_xyz"}
POST /api/chat/warm Pre-warm Anna session

Pre-warms the Anna session to minimise first-response latency. Call this when the user opens the chat screen — before they send their first message. No body required.

POST /api/chat/confirm Confirm destructive tool call

Confirms a pending destructive operation staged by Anna (e.g., deleting health data). Anna pauses and returns a confirmation token — pass that token here to execute.

Nutrition

13 endpoints
POST /api/nutrition/water Log water intake

Records a water intake entry for the authenticated user. Returns 201 on success.

FieldTypeRequiredDescription
amountMlnumberrequiredWater amount in millilitres (e.g. 500)
loggedAtstring (ISO 8601)optionalWhen the water was consumed. Defaults to now.
Request
POST /api/nutrition/water
Authorization: Bearer <token>
Content-Type: application/json

{
  "amountMl": 500,
  "loggedAt": "2026-06-19T14:00:00Z"
}
GET /api/nutrition/water/today Today's water intake summary

Returns aggregated water intake for today plus individual log entries.

Response
{
  "totalMl": 1200,
  "goalMl": 2500,
  "percentage": 48,
  "entries": [
    { "id": "wtr_01", "amountMl": 500, "loggedAt": "2026-06-19T08:00:00Z" },
    { "id": "wtr_02", "amountMl": 700, "loggedAt": "2026-06-19T12:00:00Z" }
  ]
}
DELETE /api/nutrition/water/{id} Delete water log entry

Deletes a water log entry. Owner-scoped — users can only delete their own entries.

POST /api/nutrition/analyze-food-photo AI food photo analysis

Analyse a food photo with AI vision. Returns macros, calories, and identified items. For large files use the presigned S3 flow: GET /nutrition/upload-url → upload → POST /nutrition/analyze-food-key.

Response
{
  "foods": [
    { "name": "Grilled Chicken", "calories": 220, "protein": 40, "carbs": 0, "fat": 5 },
    { "name": "Brown Rice",      "calories": 215, "protein": 5,  "carbs": 45, "fat": 2 }
  ],
  "totals": { "calories": 435, "protein": 45, "carbs": 45, "fat": 7 },
  "confidence": 0.91
}
POST /api/nutrition/analyze-food-text Estimate nutrition from text

Estimate nutrition for a typed food description. No image required — pass a plain text description and the AI returns estimated macros.

POST /api/nutrition/food Log food intake entry

Log a manual food entry with raw macros or from the output of an analyze endpoint.

GET /api/nutrition/today Today's nutrition summary (V2)

Returns aggregated nutrition totals for today — calories, macros, and comparison against user goals.

GET /api/nutrition/streak Nutrition tracking streak

Returns the user's current and longest nutrition logging streak in days.

Health Data

10 endpoints
POST /api/health/comprehensive Sync 150+ HealthKit metrics

Process a comprehensive batch of health data. Supports 150+ metric types including heart rate, sleep stages, HRV, respiratory rate, steps, VO2 max, and more. Triggers AI analysis and updates the health profile.

Request
POST /api/health/comprehensive
Authorization: Bearer <token>
Content-Type: application/json

{
  "metrics": [
    {
      "type": "HKQuantityTypeIdentifierHeartRate",
      "value": 72,
      "unit": "count/min",
      "startDate": "2026-06-19T08:00:00Z",
      "endDate": "2026-06-19T08:00:30Z"
    },
    {
      "type": "HKCategoryTypeIdentifierSleepAnalysis",
      "value": 1,
      "startDate": "2026-06-18T23:00:00Z",
      "endDate": "2026-06-19T07:00:00Z"
    }
  ]
}
GET /api/health/insights Personalised health insights (V2)

AI-generated personalised health insights and home briefing. Aggregates recent health data to surface trends, anomalies, and recommendations.

GET /api/health/validated-types Supported HealthKit metric types

Returns the complete list of supported HealthKit metric types with Apple identifiers. Validate your metric types against this list before calling /health/comprehensive.

Health Profile

6 endpoints
GET /api/health-profile Unified health profile

Returns the complete unified health profile for the authenticated user — aggregated across all data sources (HealthKit, bloodwork, DNA, wearables).

GET /api/health-profile/trends Time-series trend data

Time-series trend data for health metrics. Use this to build charts and visualise progress over time.

GET /api/users/me/biological-age Biomarker-based biological age

Computes and returns the user's biomarker-based biological age. Requires sufficient health data to generate a meaningful estimate.

GET /api/health-profile/summary Dashboard card summary

Returns a compact health profile summary optimised for dashboard cards — key metrics, scores, and status flags.

Bloodwork

10 endpoints
POST /api/bloodwork/presign-upload Presign S3 upload URL

Step 1 of the bloodwork upload flow. Returns a presigned S3 URL for direct file upload (PDF or image).

Upload Flow
1.  POST /api/bloodwork/presign-upload  →  { uploadUrl, key }
2.  PUT <uploadUrl>  with file binary (no auth header needed)
3.  POST /api/bloodwork/confirm-upload  { key }  →  triggers AI analysis
GET /api/bloodwork/list Get all bloodwork reports

Returns all bloodwork reports for the authenticated user, ordered by date descending.

GET /api/bloodwork/explain/{bloodReportId} AI explanation of report

AI-generated plain-English explanation of a bloodwork report — out-of-range markers, trends, and actionable recommendations.

DNA Analysis

8 endpoints
POST /api/dna/presign-upload Presign DNA file upload

Returns a presigned S3 URL for direct DNA raw data file upload. Supports 23andMe and AncestryDNA .txt format. Same two-step flow as bloodwork.

POST /api/dna/analyze Analyze DNA report (async)

Triggers asynchronous AI analysis of an uploaded DNA file. Returns immediately with a job ID. Poll GET /dna/reports for completion.

GET /api/dna/reports/{reportId} Get specific DNA report

Returns a specific DNA report including genetic insights, trait analysis, and health predispositions.

Goals

5 endpoints
GET /api/goals/progress Goal progress + milestones

Returns goal progress with milestone evaluation — percentage complete, estimated completion date, and recent activity.

POST /api/goals Create user goals

Create one or more health goals. Anna references these when generating recommendations and coaching responses.

PUT /api/goals Update user goals

Update existing health goals.

Habits

9 endpoints
GET /api/habits Active habits + today's progress

Returns all active habits with today's completion status. Pass ?date=YYYY-MM-DD to query a specific date.

POST /api/habits/complete Mark habit done for today

Mobile shorthand to mark a habit as complete for today. Triggers streak recalculation and Anna context update.

POST /api/habits/recommendations AI habit recommendations

Generate personalised habit recommendations based on the user's health profile and goals. Not persisted — use /habits/recommendations/select to save chosen habits.

Fitness

4 endpoints
GET /api/fitness/summary/today Today's activity ring summary

Today's fitness activity ring summary (V2) — move, exercise, stand, steps, and calories.

GET /api/exercises/{id}/progress Per-exercise progress history

Weight, volume, and 1RM progression history for a specific exercise. Ideal for charting strength gains over time.

Meal Plans

6 endpoints
POST /api/nutrition/meal-plan Generate personalised meal plan

Generate a personalised meal plan. Takes user goals, dietary preferences, and macro targets into account.

Request
POST /api/nutrition/meal-plan
Authorization: Bearer <token>
Content-Type: application/json

{
  "days": 7,
  "calorieTarget": 2200,
  "dietaryPreferences": ["high-protein", "no-gluten"],
  "excludeFoods": ["shellfish"]
}

Integrations

8 endpoints
GET /api/integrations/catalog Connector catalog

Returns the list of available third-party integrations (wearables, health apps, lab services) users can connect.

POST /api/integrations/connect Initiate service connection

Initiate a service connection via Pipedream Connect. Returns an OAuth authorisation URL for the user to approve.

User & Auth

18 endpoints
POST /api/auth/apple Sign in with Apple

Authenticate with an Apple identity token. Creates an account if the user doesn't exist. Returns a JWT + refresh token.

Request
POST /api/auth/apple
Content-Type: application/json

{
  "identityToken": "eyJ...",
  "authorizationCode": "c_abc123",
  "fullName": { "givenName": "Jane", "familyName": "Doe" }
}
Response
{
  "accessToken": "eyJ...",
  "refreshToken": "eyJ...",
  "user": { "id": "usr_abc123", "email": "jane@example.com" }
}
GET /api/user Authenticated user profile

Returns the full profile of the authenticated user — subscription status, onboarding state, health data counts, and account metadata.