← Back to API Reference

API: Recipe Management

Recipes control your Annaboto's grow parameters — nutrient dosing, light schedule, and duration across 16 weeks. You can read the default recipe, view your custom overlay, or save a new one.

GET /recipe_base

Returns the device's default (base) recipe template. This is the starting point that custom overlays modify.

Endpoint: GET http://<device-ip>:8080/annaboto/api/recipe_base

Example Request

curl http://192.168.0.103:8080/annaboto/api/recipe_base

GET /recipe_overlay/{name}

Returns the current custom recipe overlay for a specific device. The {name} is the device's MAC address (without colons, lowercase).

Endpoint: GET http://<device-ip>:8080/annaboto/api/recipe_overlay/{name}

Example Request

curl http://192.168.0.103:8080/annaboto/api/recipe_overlay/0025ca1799c6

PUT /recipe_overlay

Saves a custom recipe overlay. This is the main endpoint for customizing your grow schedule.

Endpoint: PUT http://<device-ip>:8080/annaboto/api/recipe_overlay
Content-Type: application/json
Returns: 201 on success, 400 with validation message on error

Request Body Format

The request uses CSV column names from the device's internal recipe format. All rows must have the same set of columns.

{
  "name": "0025ca1799c6",
  "data": [
    {
      "label": "start",
      "in.step ==": "start",
      "in.days >=": "",
      "in.days <": "",
      "((in.op == 'cycle') or (in.button == 1)) ==": 1,
      "in.op ==": "",
      "out.recipe": "",
      "out.step": "next",
      "out.bubbler": "",
      "out.micro": "",
      "out.bloom": "",
      "out.grow": "",
      "out.cal_mag": "",
      "out.lamp_fan1": "",
      "out.light_hours": "",
      "out.lamp_light1": "",
      "out.lamp_light2": ""
    },
    {
      "label": "week1",
      "in.step ==": "week1",
      "in.days >=": "",
      "in.days <": "",
      "((in.op == 'cycle') or (in.button == 1)) ==": "",
      "in.op ==": "",
      "out.recipe": "",
      "out.step": "",
      "out.bubbler": "0.3",
      "out.micro": "0",
      "out.bloom": "0",
      "out.grow": "0",
      "out.cal_mag": "0",
      "out.lamp_fan1": "0.0",
      "out.light_hours": "18",
      "out.lamp_light1": "0.99",
      "out.lamp_light2": "0.0"
    },
    {
      "label": "week2",
      "in.step ==": "week2",
      "in.days >=": "",
      "in.days <": "",
      "((in.op == 'cycle') or (in.button == 1)) ==": "",
      "in.op ==": "",
      "out.recipe": "",
      "out.step": "",
      "out.bubbler": "0.3",
      "out.micro": "0.3",
      "out.bloom": "0.3",
      "out.grow": "0.3",
      "out.cal_mag": "1",
      "out.lamp_fan1": "0.0",
      "out.light_hours": "18",
      "out.lamp_light1": "0.99",
      "out.lamp_light2": "0.99"
    }
  ]
}

Column Reference

Column Type Description
label string Row identifier: "start", "week1" through "week16"
in.step == string Must match label value
((in.op == 'cycle') or (in.button == 1)) == number Cycle trigger condition. Set to 1 on start row only.
out.step string Set to "next" on start row, empty on week rows
out.bubbler string Bubbler intensity (e.g., "0.3")
out.micro string FloraMicro nutrient amount
out.bloom string FloraBloom nutrient amount
out.grow string FloraGrow nutrient amount
out.cal_mag string CALiMAGic amount
out.lamp_fan1 string Lamp fan speed (e.g., "0.0")
out.light_hours string Hours of light per day (e.g., "18" for 18/6 schedule)
out.lamp_light1 string Light 1 brightness, 0.0–1.0 (e.g., "0.99")
out.lamp_light2 string Light 2 brightness, 0.0–1.0 (e.g., "0.99")

Important Rules

Example: Saving a Custom Recipe with curl

curl -X PUT \
  http://192.168.0.103:8080/annaboto/api/recipe_overlay \
  -H "Content-Type: application/json" \
  -d '{
    "name": "0025ca1799c6",
    "data": [
      {"label":"start","in.step ==":"start","in.days >=":"","in.days <":"","((in.op == '\''cycle'\'') or (in.button == 1)) ==":1,"in.op ==":"","out.recipe":"","out.step":"next","out.bubbler":"","out.micro":"","out.bloom":"","out.grow":"","out.cal_mag":"","out.lamp_fan1":"","out.light_hours":"","out.lamp_light1":"","out.lamp_light2":""},
      {"label":"week1","in.step ==":"week1","in.days >=":"","in.days <":"","((in.op == '\''cycle'\'') or (in.button == 1)) ==":"","in.op ==":"","out.recipe":"","out.step":"","out.bubbler":"0.3","out.micro":"0","out.bloom":"0","out.grow":"0","out.cal_mag":"0","out.lamp_fan1":"0.0","out.light_hours":"18","out.lamp_light1":"0.99","out.lamp_light2":"0.0"}
    ]
  }'