USDA FoodData Central nutrition lookup. Two modes: search (query=cheddar cheese) returns matching foods with fdcId, description, data type, category, and brand; detail (fdcId=328637) returns the full analyzed nutrient profile — energy, protein, fats, carbohydrates, vitamins, minerals — with USDA nutrient numbers, amounts, and units (per 100 g/ml unless serving fields indicate otherwise), plus ingredients for branded foods. Filter search by dataType: Foundation and SR Legacy are lab-analyzed generic foods, Branded is the packaged-food label corpus, Survey (FNDDS) is as-consumed dishes. Authoritative USDA data covering ~400k foods — use real analyzed values instead of model-estimated nutrition facts.
/api/nutrition/foodPAYMENT-SIGNATURE.The food API is a pay-per-call nutrition endpoint built for AI agents and autonomous software. USDA FoodData Central nutrition lookup.
There is no signup and no API key. An agent (or any HTTP client) hits the endpoint, receives an x402 "402 Payment Required" challenge, signs a sub-cent USDC payment on Base or Solana, and retries — the data comes back on the paid request. That makes it a drop-in food data source for an agent tool-use loop, an MCP host, or a backend that needs nutrition data on demand without onboarding to yet another vendor portal.
| Name | Type | Description |
|---|---|---|
query | string | Food name to search, e.g. "cheddar cheese". Provide query or fdcId, not both. min 2 chars · max 120 chars |
fdcId | integer | FDC food id — returns the full nutrient profile. min 0 |
dataType | string | Restrict search to one data type. Foundation/SR Legacy = analyzed generic foods, Branded = packaged labels, Survey (FNDDS) = as-consumed dishes. one of: Foundation | SR Legacy | Survey (FNDDS) | Branded |
limit | integer | min 1 · max 50 |
page | integer | min 1 |
# 1. Probe with no auth → 402 envelope with PaymentRequirements curl -sS 'https://2s.io/api/nutrition/food?query=xx&fdcId=0&dataType=Foundation&limit=10&page=1' # 2. Sign + retry with PAYMENT-SIGNATURE: curl -sS 'https://2s.io/api/nutrition/food?query=xx&fdcId=0&dataType=Foundation&limit=10&page=1' \ -H 'PAYMENT-SIGNATURE: <base64-json-payload>' # Or use the canonical runner (handles probe → sign → retry): # EVM_PRIVATE_KEY=0x... node --env-file=.env.local \ # --experimental-strip-types scripts/x402-pay.ts \ # 'https://2s.io/api/nutrition/food?query=xx&fdcId=0&dataType=Foundation&limit=10&page=1'
import { TwoS } from '@2sio/sdk'
const client = new TwoS({
privateKey: process.env.EVM_PRIVATE_KEY as `0x${string}`,
})
const result = await client.nutrition.food({
"query": "xx",
"fdcId": 0,
"dataType": "Foundation",
"limit": 10,
"page": 1
})
console.log('endpoint:', result.endpoint)
console.log('cost:', result.costUsd, 'USDC')
console.log('tx:', result.settlement?.txHash)
console.log('data:', result.data)import os
from twosio import TwoS
client = TwoS(private_key=os.environ["EVM_PRIVATE_KEY"])
result = client.nutrition.food(query="xx", fdcId=0, dataType="Foundation", limit=10, page=1)
print("endpoint:", result.endpoint)
print("cost:", result.cost_usd, "USDC")
print("tx:", (result.settlement or {}).get("tx_hash"))
print("data:", result.data)// 1. Add @2sio/mcp to your MCP host config (Claude Desktop example below).
// EVM_PRIVATE_KEY funds x402 payments per call.
// claude_desktop_config.json
{
"mcpServers": {
"2sio": {
"command": "npx",
"args": ["-y", "@2sio/mcp"],
"env": { "EVM_PRIVATE_KEY": "0x..." }
}
}
}
// 2. Once the server is running, agents call this tool via standard MCP:
{
"jsonrpc": "2.0",
"id": 1,
"method": "tools/call",
"params": {
"name": "nutrition.food",
"arguments": {
"query": "xx",
"fdcId": 0,
"dataType": "Foundation",
"limit": 10,
"page": 1
}
}
}| Field | Type | Description |
|---|---|---|
ok | boolean | one of: true |
items | array | |
total | integer | Total matching rows upstream; null when unknown. |
source | object | |
meta | object |
{
"ok": true,
"items": [
{
"fdcId": 1,
"description": "example",
"dataType": "example",
"foodCategory": "example",
"brandOwner": "example",
"brandName": "example",
"servingSize": 1,
"servingSizeUnit": "example",
"publishedDate": "example"
}
],
"total": 1,
"source": {
"provider": "example",
"url": "example",
"license": "example"
},
"meta": {
"mode": "search"
}
}