Developers

Custom API docs for approved FoodBot clients.

Integrate recipes, meal planning, nutrition tracking, and shopping workflows into your own product. Access is private by design: we review the use case with you, then issue an API key for approved client-facing endpoints.

FoodBot is a Scalefort innovation. Product access lives at foodbot.ng, while company and partnership context lives at scalefort.africa.

Request API Access
Versionv1
AuthX-API-Key
Base URLhttps://api.foodbot.io/api/v1

Private client access

API keys are issued manually after a discovery call, onboarding review, and approved use case.

Structured JSON

Every endpoint returns a consistent envelope with success, data, and meta. Failed responses include errors.

Built for nutrition workflows

Recipes, planning, nutrition, and shopping endpoints map directly to FoodBot product flows.

Overview

Built for partner and client integrations

What you send

X-API-Key: fb_live_your_key_here

Response format

{ success, data, meta, errors }

Authentication

Use issued API keys for approved client endpoints

Header

X-API-Key: fb_live_your_key_here

Lifecycle

Keys are generated by the Scalefort team after FoodBot onboarding. We scope access manually, and production access is only granted after review.

Content API

Recipes

Fetch public recipes and search FoodBot recipe content for client applications, partner portals, or discovery tools.

GET/recipes?page=1&pageSize=12&tags=high-protein&tags=quick

List recipes

Returns paginated public recipes with optional tag filtering.

Use this endpoint to populate recipe carousels, content feeds, or category-specific discovery experiences.

Authentication

Approved API key

Headers

  • X-API-Keystring

    Your issued FoodBot client API key.

Query params

  • pagenumber

    Page number starting from 1.

  • pageSizenumber

    Items per page.

  • tagsstring[]

    Repeatable tag filters such as high-protein or quick.

curl --request GET \
  'https://api.foodbot.io/api/v1/recipes?page=1&pageSize=12&tags=high-protein&tags=quick' \
  --header 'X-API-Key: fb_live_your_key_here'

Example response

{
  "success": true,
  "data": [
    {
      "name": "Chicken Suya Rice Bowl",
      "slug": "chicken-suya-rice-bowl",
      "description": "A high-protein bowl with smoky spice and quick prep.",
      "dietaryTags": ["high-protein", "quick"],
      "prepTimeMin": 15,
      "cookTimeMin": 20,
      "servings": 2
    }
  ],
  "meta": {
    "page": 1,
    "pageSize": 12,
    "total": 48
  }
}

Integration notes

  • Results are returned inside the standard API envelope.
  • Pagination details are placed in the meta object.
GET/recipes/search?q=jollof&limit=10

Search recipes

Searches public recipes by text query.

Use this for autocomplete, ingredient-led search, or keyword-led recipe discovery experiences.

Authentication

Approved API key

Headers

  • X-API-Keystring

    Your issued FoodBot client API key.

Query params

  • qstring

    Search term such as jollof, bean stew, or chicken.

  • limitnumber

    Maximum number of results to return.

curl --request GET \
  'https://api.foodbot.io/api/v1/recipes/search?q=jollof&limit=10' \
  --header 'X-API-Key: fb_live_your_key_here'

Example response

{
  "success": true,
  "data": [
    {
      "name": "Classic Jollof Rice",
      "slug": "classic-jollof-rice"
    },
    {
      "name": "Party Jollof Chicken Tray",
      "slug": "party-jollof-chicken-tray"
    }
  ],
  "meta": null
}

Planning API

Meal planning

Generate or fetch meal planning data that can be embedded into partner dashboards or health workflows.

GET/mealplans/current

Get current meal plan

Returns the active meal plan for the approved client context.

Use this to sync the latest active FoodBot meal plan into a customer dashboard or wellness workflow.

Authentication

Approved API key

Headers

  • X-API-Keystring

    Your issued FoodBot client API key.

curl --request GET \
  'https://api.foodbot.io/api/v1/mealplans/current' \
  --header 'X-API-Key: fb_live_your_key_here'

Example response

{
  "success": true,
  "data": {
    "name": "High Protein Week",
    "weekStart": "2026-03-16T00:00:00Z",
    "days": [
      {
        "dayOfWeek": "Monday",
        "meals": [
          { "mealType": "Breakfast", "name": "Greek yogurt parfait" }
        ]
      }
    ]
  },
  "meta": null
}
POST/mealplans/generate

Generate meal plan

Builds a meal plan from goals and planning preferences.

Use this when your client flow needs FoodBot to generate a fresh plan from goal and preference inputs.

Authentication

Approved API key

Headers

  • X-API-Keystring

    Your issued FoodBot client API key.

  • Content-Typestring

    Set to application/json.

Body fields

  • goalstring

    Examples include weight-loss, maintenance, or muscle-gain.

  • daysnumber

    Number of planning days to generate.

  • preferencesstring[]

    Optional dietary or cuisine preferences.

curl --request POST 'https://api.foodbot.io/api/v1/mealplans/generate' \
  --header 'X-API-Key: fb_live_your_key_here' \
  --header 'Content-Type: application/json' \
  --data '{
    "goal": "maintenance",
    "days": 7,
    "preferences": ["high-protein", "west-african"]
  }'

Example response

{
  "success": true,
  "data": {
    "name": "Weight Loss Plan",
    "days": [
      {
        "dayOfWeek": "Monday",
        "meals": [
          { "mealType": "Lunch", "name": "Suya chicken wrap" }
        ]
      }
    ]
  },
  "meta": null
}

Tracking API

Nutrition tracking

Read daily nutrition state or send tracking data to FoodBot for downstream analytics and coaching.

GET/nutrition/today

Get nutrition snapshot

Returns today’s meal entries together with active macro goals.

Useful for wellness dashboards, summary widgets, or external client portals that need a single daily nutrition snapshot.

Authentication

Approved API key

Headers

  • X-API-Keystring

    Your issued FoodBot client API key.

curl --request GET \
  'https://api.foodbot.io/api/v1/nutrition/today' \
  --header 'X-API-Key: fb_live_your_key_here'

Example response

{
  "success": true,
  "data": {
    "entries": [
      {
        "id": "67d90db06d99f0d53cde4301",
        "name": "Oats and eggs",
        "type": "breakfast",
        "calories": 420,
        "protein": 24
      }
    ],
    "goals": {
      "calories": 2200,
      "protein": 160,
      "carbs": 210,
      "fat": 70
    },
    "date": "2026-03-19T00:00:00Z"
  },
  "meta": null
}
POST/nutrition/log

Log a meal

Creates a nutrition log entry for downstream analytics and coaching.

Send normalized meal totals from your client app so FoodBot can keep dashboards, streaks, and insights current.

Authentication

Approved API key

Headers

  • X-API-Keystring

    Your issued FoodBot client API key.

  • Content-Typestring

    Set to application/json.

Body fields

  • namestring

    Meal name displayed in dashboards and recent logs.

  • typestring

    Meal category such as breakfast, lunch, dinner, or snack.

  • caloriesnumber

    Calories for the meal.

  • proteinnumber

    Protein in grams.

  • carbsnumber

    Carbohydrates in grams.

  • fatnumber

    Fat in grams.

curl --request POST 'https://api.foodbot.io/api/v1/nutrition/log' \
  --header 'X-API-Key: fb_live_your_key_here' \
  --header 'Content-Type: application/json' \
  --data '{
    "name": "Oats and eggs",
    "type": "breakfast",
    "calories": 420,
    "protein": 24,
    "carbs": 38,
    "fat": 15
  }'

Example response

{
  "success": true,
  "data": {
    "id": "67d90db06d99f0d53cde4301",
    "recipeName": "Oats and eggs",
    "calories": 420,
    "proteinG": 24
  },
  "meta": null
}
POST/nutrition/exercise-import

Import exercise records

Imports one or more exercise records into FoodBot in a deduplicated batch.

Use this when your client app or partner sync wants to push normalized workout data into FoodBot so dashboards and insights update automatically without manual entry.

Authentication

Bearer JWT for a paid FoodBot account

Headers

  • Authorizationstring

    Bearer token for a Pro or Nutrition Coach user.

  • Content-Typestring

    Set to application/json.

Body fields

  • sourcestring

    Sync source identifier such as health_connect, strava, or client_app.

  • recordsobject[]

    List of normalized exercise records to import.

  • records[].externalIdstring

    Stable source-side id used for deduplication.

  • records[].activitystring

    Workout type such as Running, Walking, Cycling, or Strength.

  • records[].durationMinnumber

    Workout duration in minutes.

  • records[].caloriesBurnednumber

    Calories burned if the source provides it.

  • records[].occurredAtUtcstring

    Optional UTC timestamp for when the workout happened.

curl --request POST 'https://api.foodbot.io/api/v1/nutrition/exercise-import' \
  --header 'Authorization: Bearer your_paid_user_token' \
  --header 'Content-Type: application/json' \
  --data '{
    "source": "client_app",
    "records": [
      {
        "externalId": "workout_20260320_001",
        "activity": "Running",
        "durationMin": 42,
        "caloriesBurned": 380,
        "occurredAtUtc": "2026-03-20T06:15:00Z"
      }
    ]
  }'

Example response

{
  "success": true,
  "data": {
    "source": "client_app",
    "importedCount": 2,
    "skippedCount": 1,
    "failedCount": 0,
    "failures": []
  },
  "meta": null
}

Integration notes

  • This endpoint is available only to paid FoodBot plans.
  • Records are deduplicated by source and externalId.
  • Manual entries should continue using the normal exercise log endpoint.

Operations API

Shopping lists

Generate grocery output from active meal plans and keep completion state in sync across client experiences.

GET/shoppinglist/latest

Get latest shopping list

Returns the latest generated shopping list with flat item data.

Use this to render grouped grocery views or mirror FoodBot shopping state into a partner product.

Authentication

Approved API key

Headers

  • X-API-Keystring

    Your issued FoodBot client API key.

curl --request GET \
  'https://api.foodbot.io/api/v1/shoppinglist/latest' \
  --header 'X-API-Key: fb_live_your_key_here'

Example response

{
  "success": true,
  "data": {
    "id": "67d910d26d99f0d53cde43aa",
    "generatedAt": "2026-03-19T10:20:00Z",
    "items": [
      {
        "id": "d34f1a95-928f-42f0-bc9d-1f6921519136",
        "category": "Produce",
        "emoji": "leaf",
        "name": "Spinach",
        "quantity": "400g",
        "isChecked": false
      }
    ]
  },
  "meta": null
}
PUT/shoppinglist/categories/check-state

Update a full section

Sets every item in a shopping list category to checked or unchecked.

Use this to drive section-level toggles in external grocery or shopping checklist experiences.

Authentication

Approved API key

Headers

  • X-API-Keystring

    Your issued FoodBot client API key.

  • Content-Typestring

    Set to application/json.

Body fields

  • categorystring

    The category name to update, such as Produce.

  • isCheckedboolean

    The target checked state for every item in the category.

curl --request PUT 'https://api.foodbot.io/api/v1/shoppinglist/categories/check-state' \
  --header 'X-API-Key: fb_live_your_key_here' \
  --header 'Content-Type: application/json' \
  --data '{
    "category": "Produce",
    "isChecked": true
  }'

Example response

{
  "success": true,
  "data": {
    "category": "Produce",
    "isChecked": true,
    "updatedCount": 12
  },
  "meta": null
}

Errors

Standard integration responses

400

Bad Request

The request shape, parameters, or body values are invalid.

401

Unauthorized

The API key is missing, invalid, expired, or revoked.

403

Forbidden

Your key exists but does not have access to this endpoint or scope.

404

Not Found

The requested resource could not be found.

429

Rate Limited

Your client exceeded the agreed request budget.

Need access?

Talk to us before you build.

We review your use case, agree on the endpoint surface, then issue an API key for approved production access.