Fueled API for bots reading meal logs

A short guide for a bot you run yourself. Last updated October 30, 2026.

The Fueled API (application programming interface) lets a bot read your meal log. Keys are read-only. A key sees the account that created it and no other account. Create and revoke keys in the app: open You (the profile icon), then Bots.

Fueled shows the full key once. It stores only a hash of the key and cannot show it again. If you lose it, revoke it and create another. Deleting your Fueled account deletes its keys.

Make a key

In You → Bots, name the key and pick one or both scopes:

ScopeWhat the bot can read
meals:readWhat you ate: the name, the day, and the meal slot (breakfast, lunch, dinner, snacks).
nutrition:readCalories and macros (protein, carbs, and fat), as daily totals and, with meals:read, on each meal.

There is no scope that writes, edits, or deletes a meal.

Call it

Send the key as a bearer token. Responses are JSON (JavaScript Object Notation). Dates are calendar days, YYYY-MM-DD, inclusive. If you omit from and to, the range is the last 30 days including today (Coordinated Universal Time). A range cannot be longer than 366 days. limit defaults to 50 and cannot be more than 100. offset defaults to 0.

Meals (needs meals:read):

curl -s \
  -H "Authorization: Bearer fl_live_YOUR_KEY" \
  "https://rankrebels.ai/api/fueled/v1/meals?from=2026-10-01&to=2026-10-30&limit=50"

Daily nutrition (needs nutrition:read). This response has totals, not the names of what you ate:

curl -s \
  -H "Authorization: Bearer fl_live_YOUR_KEY" \
  "https://rankrebels.ai/api/fueled/v1/nutrition?from=2026-10-01&to=2026-10-30"

A meal looks like this when the key has both scopes. Without nutrition:read, the calorie and macro fields are left off.

{
  "ok": true,
  "meals": [
    {
      "id": "meal_id",
      "eaten_on": "2026-10-20",
      "slot": "lunch",
      "name": "Chicken rice bowl",
      "source": "photo",
      "kcal": 640,
      "protein_g": 46,
      "carbs_g": 62,
      "fat_g": 22,
      "estimate": true
    }
  ],
  "page": { "from": "2026-10-01", "to": "2026-10-30", "limit": 50, "offset": 0, "total": 1, "next_offset": null }
}

protein_g, carbs_g, and fat_g are grams. next_offset is the offset to send for the next page, or null when this page is the last.

Limits and errors

Each key can make 60 reads a minute. A burst of bad keys from one network is refused sooner than that.

StatusMeaning
200, ok: trueThe page of meals or days.
400from, to, limit, or offset is not usable.
401The key is missing, unknown, or revoked.
403The key does not include that scope. scope names the one required.
429Too many reads. Wait for the number of seconds in Retry-After.
200, ok: falseFueled could not finish the read. The error string says why. This shape is used so the reason is not replaced by the host.

Questions: [email protected]. The app itself is at Fueled. The privacy policy is at Privacy Policy.