Start building with Passio.
A Nutrition AI plan, a server-side API key, and one food-search request. This page does not call the API for you.
1. Create an account and obtain credentials
Starter is $99/month and includes 1M tokens a month. The API key is created in the accounts portal. Put it in a server environment variable named PASSIO_KEY. Do not ship the key in a browser or a mobile app.
2. Exchange the key for a bearer token
POST the key to the token route documented in the authorization guide. The JSON below is that guide’s response shape. The token and customer id are placeholders, not a captured credential.
Token requestcurl -s -X POST \ "https://api.passiolife.com/v2/token-cache/unified/oauth/token/$PASSIO_KEY"
Token response shape{ "access_token": "<access_token>", "expires_in": 86155, "scope": "read:search read:products", "token_type": "Bearer", "customer_id": "<customer_id>" }3. Run a semantic food search
Semantic search finds foods by meaning and runs on an AI model, so it is billed by tokens. term is required. Send the bearer token. A 200 body is OutgoingSearchResults, with results and alternateNames. See the search guide.
Semantic searchcurl -s \ -H "Authorization: Bearer $PASSIO_TOKEN" \ "https://api.passiolife.com/v2/products/napi/food/search/semantic?term=pepperoni%20pizza"
The response below was captured from production on Nov 3, 2026. It ran on gpt-6-luna and billed 1182 tokens. It returned 47 results; only the first, and the first six alternate names, are shown.
Captured response (trimmed){ "results": [ { "type": "synonym", "displayName": "Pepperoni Pizza", "stemmedDisplayName": "", "shortName": "pepperoni pizza", "longName": "Fast Food, Pizza Chain, 14\" Pizza, Pepperoni Topping, Regular Crust", "scoredName": "pepperoni pizza", "score": 1, "displayNameScore": 0.7409093670627156, "brandName": "", "iconId": "PRE0029", "labelId": "0c21d8a6-9c84-11ea-a210-d777e2c629bd", "synonymId": "f7d039ef-3258-11ed-920f-7e029295fe1f", "recipeId": "", "referenceId": "1603211199398", "resultId": "1603211199398", "nutritionPreview": { "portion": { "weight": { "unit": "g", "value": 895 }, "name": "pizza", "quantity": 1 }, "calories": 2523.89990234375, "carbs": 286.2209777832031, "fat": 106.59449768066406, "protein": 105.072998046875, "fiber": 20.584999084472656 }, "refCode": "eyJsYWJlbGlkIjoiMGMyMWQ4YTYtOWM4NC0xMWVhLWEyMTAtZDc3N2UyYzYyOWJkIiwidHlwZSI6InN5bm9ueW0iLCJyZXN1bHRpZCI6IjE2MDMyMTExOTkzOTgiLCJtZXRhZGF0YSI6bnVsbH0=", "tags": [ "meals", "NOVA4" ], "origin": [ { "source": "fdc", "id": "173295", "dataType": "sr_legacy_food", "timestamp": "2020-10-20T16:26:56.346942Z" } ], "concerns": [], "itemType": "generic", "productCode": "", "country": "", "images": { "product": "", "brand": "" } } ], "alternateNames": [ "pepperoni pizza", "slice of pepperoni pizza", "pepperoni", "pepperoni chips", "turkey pepperoni", "padron peppers" ] }4. Choose models and measure cost
Each AI route runs on a default model. On Growth and Pro, add ?model=<tag> to run it on another; the response names the model used in X-Model-Tag and the tokens billed in X-Billed-Tokens-Total. Passio's route test results show which model to pick, and the cost calculator turns them into a monthly estimate.
5. Common errors and help
- After the token cap plus the published grace, calls return HTTP 429 until the next period or a refill. The period cap is included tokens plus purchased refills. Up to 10% over that cap is allowed. After that, calls return HTTP 429 until the next period or a refill. Auto-refill is on by default; turn it off in account settings to stop at the cap. Manual refills are purchased in the accounts portal.
- With Zero Data Retention on, a request for a model that isn't eligible returns HTTP 403. The Trust page lists which providers are.
- Help starts with the quickstart, the OpenAPI reference, and the support included on your plan.
Other request shapes
Checked against the OpenAPI schemas. These are not recorded responses, and they are not labeled runnable.
Nutrition Advisor
POST /napi/tools/nutritionAdvisor. The body requires content. This asks a general nutrition question. It does not run a GLP Coach workflow. A 200 body requires answer.
curl -s -X POST "https://api.passiolife.com/v2/products/napi/tools/nutritionAdvisor" \
-H "Authorization: Bearer $PASSIO_TOKEN" \
-H "Content-Type: application/json" \
-d '{"content":"What is a higher-protein lunch than a plain bagel?"}'Meal plan
POST /napi/tools/mealPlans/{type}, where the type is fast, macroTuned, budget, athletic or family. The body requires input_data.user_request. A plan is a multi-step run: the response is an execution id, and you poll /napi/tools/mealPlans/executions/{id} every few seconds. A completed run has meal_plan (days, recipes, Passio-linked ingredients, macro totals, an optional PDF) and is billed once, for every step's tokens. Each plan type is an EasyAI workflow with a template there: start from it to change the steps, prompts or models and tune cost and output, then run your version as a workflow. See the Meal Plans reference.
curl -s -X POST "https://api.passiolife.com/v2/products/napi/tools/mealPlans/fast" \
-H "Authorization: Bearer $PASSIO_TOKEN" \
-H "Content-Type: application/json" \
-d '{"input_data":{"user_request":"3 days, vegetarian, about 140 g protein a day. No mushrooms.","days":3,"include_pdf":true}}'
# Poll with the id from that response until status is completed or failed.
curl -s "https://api.passiolife.com/v2/products/napi/tools/mealPlans/executions/$EXECUTION_ID" \
-H "Authorization: Bearer $PASSIO_TOKEN"Substitutes
POST /napi/tools/recipes/substitutes with KitchenToolRequest. Shopping links are a separate US capability and are documented on the Food & Grocery page.
curl -s -X POST "https://api.passiolife.com/v2/products/napi/tools/recipes/substitutes" \
-H "Authorization: Bearer $PASSIO_TOKEN" \
-H "Content-Type: application/json" \
-d '{"ingredients":["soy sauce"],"preferences":{"goals":["lower sodium"]}}'Capability catalog
| Capability | Inputs | Returns | Docs |
|---|---|---|---|
Food recognition from photo Identify foods and portions from an image. | image | foods, portions, nutrients | Docs |
Voice and text meal logging Parse spoken or typed meals into foods and portions. | audio, text | foods, portions, nutrients | Docs |
Barcode and nutrition-label lookup Resolve packaged products across multiple data sources. | barcode, image | product, nutrients | Docs |
Semantic food search with tag filters Search by name, diet, allergen or claim. | text | ranked foods | Docs |
Nutrition advisor Ask a nutrition question, with optional context such as goals or restrictions, and receive guidance. The response can include linked food references. | text | guidance | Docs |
Rate a food against a criterion Send a food and a criterion. The API returns a numeric rating and an explanation. A separate route rates how ultra-processed a named food is. | text | rating, explanation | Docs |
Grocery replacements Credible substitutes in the same usage context, with images. | product | substitutes, images, links | Docs |
Instacart shopping links with attribution Generate tracked shopping links; purchases attributed to the customer account. | products | tracked link | Docs |
Meal planning A multi-day plan with recipes, Passio-linked ingredients, macro totals and an optional PDF, from a description of goals and restrictions. Five plan types: fast, macro-tuned, budget, athletic and family. | profile | plan | Docs |
Menu guidance From a menu photo, menu text, or restaurant name, plus goals and restrictions, return ranked picks, items to avoid, and tips. Nutrition figures in that response are estimates, not Passio food records. | menu, preferences | picks, avoid, tips | Docs |
Translation and regional recognition Translation of names and portions; regional context so local dishes are recognized. | — | — | Docs |
Model choice per request with fallback On Growth and Pro, choose the model per request. Automatic fallback applies, and the response names the model used. With Zero Data Retention on, routing is limited to the Vertex-hosted models named on the Trust page. | — | — | Docs |
Passio AI Studio: Integrate REST and mobile SDK assistants that scaffold and troubleshoot integrations. | prompt | code | Docs |
Passio AI Studio: Configure Functions and chains from plain English; versioning, retries, fallbacks. | prompt | endpoint | — |
Passio AI Studio: Build an app Preview a nutrition workflow and export the integration. This is not a general-purpose app builder. | prompt | app | — |
Every capability is on every plan. Plans differ in included tokens, refill price, usage insights, and choosing the model per request (Growth and Pro).
Live demo
See every request and response before you write code.
The demo runs the real Nutrition AI API. Sign up, then photograph a meal, say what you ate, or search, and see what each call returns and costs.
- A page for every route: photo, voice and text logging, search, barcode, the advisor, ratings, meal plans and shopping.
- Switch the model on any route and see how the answer and the cost change.
- See the exact request, response and tokens of every call.
- Already a customer? Sign in with your API key; calls run on, and bill, your own account.