kalori Developer Consoleドキュメント

kalori Catalog API v1

外食・コンビニ商品の栄養データ(カロリー・たんぱく質・脂質・炭水化物)を参照する API です。
ベース URL: https://catalog-api.kalori.jp/v1

利用条件は 利用規約、稼働の目安とサポート窓口は サービスレベルの目安 にあります。

クイックスタート

curl "https://catalog-api.kalori.jp/v1/search?q=%E3%81%8A%E3%81%AB%E3%81%8E%E3%82%8A&limit=5" \
  -H "Authorization: Bearer kdk_xxxxxxxx" \
  -H "X-Kalori-End-User: 5f1c0a9e2b7d4c3a"

認証

末端ユーザー ID の作り方(例)

貴社だけが知る salt を鍵にした HMAC を、URL-safe な Base64 に変えて送ります。同じ利用者には常に同じ値になり、
値から利用者を逆算することはできません。

// Node.js
import { createHmac } from "node:crypto";
const endUser = createHmac("sha256", process.env.KALORI_END_USER_SALT)
  .update(String(userId))
  .digest("base64url");           // 43 文字・[A-Za-z0-9_-]

ルート

ルート用途
GET /v1/me契約状態・上限・本日の使用量・当月 MAU
GET /v1/shops掲載チェーン一覧
GET /v1/search?q=&shop=&limit=&offset=商品検索(q または shop のどちらか必須)
GET /v1/products/:id商品 1 件

/v1/search

Product

{
  "id": 12345,
  "shop": { "id": "seven", "name": "セブン-イレブン" },
  "name": "商品名",
  "nutrition": { "calories": 512, "protein": 18.5, "fat": 12, "carbs": 70.2 },
  "source": "official",
  "url": "https://kalori.jp/ja/shops/seven/products/12345/"
}

上限と応答ヘッダ

データ系ルート(/shops, /search, /products/:id)の応答に X-Quota-Used / X-Quota-Limit /
X-Quota-Remaining / X-Quota-Reset / X-Quota-Scopedeveloper_day / developer_hour / end_user_day
が付きます。超過時は 429。認証で弾かれた応答(401 / 403)には付きません。

データの保存(原則禁止)

エラー

{ "error": { "code": "...", "message": "..." } } + HTTP ステータス。

codeHTTP意味
unauthorized401Authorization ヘッダが無い
invalid_format401Bearer kdk_… の形式ではない
unknown_key401鍵が存在しない
key_revoked401失効した鍵(コンソールで再発行)
key_expired401有効期限を過ぎた鍵
developer_suspended403契約が停止中
end_user_required400X-Kalori-End-User が無い
end_user_invalid400X-Kalori-End-User が形式に合わない
bad_request400パラメータ不正(q / shop 欠落、limit / offset の範囲外など)
unknown_shop400shop が /v1/shops に無い
not_found404商品が無い
quota_exceeded429上限超過(X-Quota-Scope にどの窓かが出る)
internal500こちらの障害

5xx はこちらの障害です。数秒おいて指数バックオフで再試行してください(再試行の上限は 3 回程度を推奨)。
400 番台は再試行しても同じ結果になります(429 を除く)。

版の運用

Markdown 版

https://catalog-api.kalori.jp/v1/help で同じ内容を Markdown のまま取得できます(認証不要)。