Skip to main content

Precision Oven Commands

Overview​

This document details the available commands for controlling Anova Precision Ovens via WebSocket API. The API supports two device generations with different capabilities and command structures.

Device Versions​

  • Anova Precision Oven v1
  • Anova Precision Oven v2

Available Commands​

When using a Personal Access Token, you have access to the following set of commands:

  • CMD_APO_START
  • CMD_APO_STOP
  • CMD_APO_SET_TEMPERATURE_UNIT

Command Structure​

Basic Structure​

All commands follow this pattern:

{
"command": "COMMAND_NAME",
"requestId": "[UUID]",
"payload": {
"id": "[device-id]",
"type": "COMMAND_NAME",
"payload": {
// Command-specific payload
}
}
}

Payload Structure Breakdown​

The start cook command payload contains several key areas that control different aspects of the cooking process:

Core Payload Fields​

  • stages: Array of cooking stages that execute sequentially. Each stage defines temperature, timing, and cooking parameters.
  • cookId: Unique UUID v4 identifier for this cooking session.
  • cookerId: Device ID of the oven (Anova Precision Oven v2 only).
  • type: Payload version identifier ("v2" for Anova Precision Oven v2).
  • originSource: Source of the cook command ("ios", "android", "api", "hardware").

Stage Configuration​

Each stage in the stages array contains:

  • id: Unique UUID v4 identifier for the stage.
  • type: Stage type, typically "cook" or "stop".
  • userActionRequired: Boolean controlling stage transitions (false = automatic, true = manual).
  • title: Human-readable stage name.
  • description: Detailed stage description.

Cooking Parameters​

  • temperatureBulbs: Controls oven temperature and mode

    • mode: "dry" or "wet" cooking mode
    • dry.setpoint: Target temperature for dry cooking
    • wet.setpoint: Target temperature for wet/sous vide cooking
  • timer: Time-based cooking control

    • initial: Timer duration in seconds
    • startType: When to start timer ("immediately", "when-preheated", "manual", "on-detection")
  • heatingElements: Control individual heating elements

    • top, bottom, rear: Each with on boolean value. Restriction: All three can not be on/off at the same time
  • steamGenerators: Steam and humidity control

    • mode: "idle", "relative-humidity", or "steam-percentage"
    • relativeHumidity.setpoint: Target humidity percentage (0-100)
  • fan: Convection fan control

    • speed: Fan speed percentage (0-100)
  • vent: Oven vent control

    • open: Boolean for vent position
  • probe: Temperature probe settings

    • setpoint: Target internal temperature

Start Cook Commands​

1. High-Temperature Roasting Example​

Anova Precision Oven v1:

{
"command": "CMD_APO_START",
"payload": {
"id": "[device-id]",
"payload": {
"cookId": "[UUID]",
"stages": [
{
"stepType": "stage",
"id": "[UUID]",
"title": "",
"description": "",
"type": "preheat",
"userActionRequired": false,
"temperatureBulbs": {
"mode": "dry",
"dry": {
"setpoint": {
"celsius": 176.67,
"fahrenheit": 350
}
}
},
"heatingElements": {
"top": { "on": false },
"bottom": { "on": false },
"rear": { "on": true }
},
"fan": { "speed": 100 },
"vent": { "open": false },
"rackPosition": 3,
"stageTransitionType": "automatic"
},
{
"stepType": "stage",
"id": "[UUID]",
"title": "",
"description": "",
"type": "cook",
"userActionRequired": false,
"temperatureBulbs": {
"mode": "dry",
"dry": { "setpoint": { "celsius": 176.67, "fahrenheit": 350 } }
},
"heatingElements": { "top": { "on": false }, "bottom": { "on": false }, "rear": { "on": true } },
"fan": { "speed": 100 },
"vent": { "open": false },
"rackPosition": 3,
"stageTransitionType": "automatic"
}
]
},
"type": "CMD_APO_START"
},
"requestId": "[UUID]"
}

Anova Precision Oven v2:

{
"command": "CMD_APO_START",
"payload": {
"id": "[device-id]",
"payload": {
"stages": [
{
"id": "[UUID]",
"do": {
"type": "cook",
"fan": { "speed": 100 },
"heatingElements": { "top": { "on": false }, "bottom": { "on": false }, "rear": { "on": true } },
"exhaustVent": { "state": "closed" },
"temperatureBulbs": { "mode": "dry", "dry": { "setpoint": { "celsius": 200 } } }
},
"exit": { "conditions": { "and": {} } },
"entry": { "conditions": { "and": { "nodes.temperatureBulbs.dry.current.celsius": { ">=": 200 } } } },
"title": "",
"description": "",
"rackPosition": 3
}
],
"cookId": "[UUID]",
"cookerId": "[device-id]",
"cookableId": "",
"title": "",
"type": "oven_v2",
"originSource": "api",
"cookableType": "manual"
},
"type": "CMD_APO_START"
},
"requestId": "[UUID]"
}

2. Steam Cooking with Humidity Control Example​

Anova Precision Oven v1:

{
"command": "CMD_APO_START",
"payload": {
"id": "[device-id]",
"payload": {
"cookId": "[UUID]",
"stages": [
{
"stepType": "stage",
"id": "[UUID]",
"title": "",
"description": "",
"type": "preheat",
"userActionRequired": false,
"temperatureBulbs": { "mode": "dry", "dry": { "setpoint": { "celsius": 55, "fahrenheit": 130 } } },
"heatingElements": { "top": { "on": true }, "rear": { "on": true }, "bottom": { "on": false } },
"fan": { "speed": 100 },
"vent": { "open": false },
"rackPosition": 3,
"stageTransitionType": "automatic",
"steamGenerators": { "mode": "steam-percentage", "steamPercentage": { "setpoint": 100 } }
},
{
"stepType": "stage",
"id": "[UUID]",
"title": "",
"description": "",
"type": "cook",
"userActionRequired": false,
"temperatureBulbs": { "mode": "dry", "dry": { "setpoint": { "celsius": 55, "fahrenheit": 130 } } },
"heatingElements": { "top": { "on": true }, "rear": { "on": true }, "bottom": { "on": false } },
"fan": { "speed": 100 },
"vent": { "open": false },
"rackPosition": 3,
"stageTransitionType": "automatic",
"steamGenerators": { "mode": "steam-percentage", "steamPercentage": { "setpoint": 100 } }
}
]
},
"type": "CMD_APO_START"
},
"requestId": "[UUID]"
}

Anova Precision Oven v2:

{
"command": "CMD_APO_START",
"payload": {
"id": "[device-id]",
"payload": {
"stages": [
{
"id": "[UUID]",
"do": {
"type": "cook",
"fan": { "speed": 100 },
"heatingElements": { "top": { "on": true }, "rear": { "on": true }, "bottom": { "on": false } },
"exhaustVent": { "state": "closed" },
"steamGenerators": { "mode": "steam-percentage", "steamPercentage": { "setpoint": 100 } },
"temperatureBulbs": { "mode": "dry", "dry": { "setpoint": { "celsius": 180 } } }
},
"exit": { "conditions": { "and": {} } },
"entry": { "conditions": { "and": { "nodes.temperatureBulbs.dry.current.celsius": { ">=": 180 } } } },
"title": "",
"description": "",
"rackPosition": 3
}
],
"cookId": "[UUID]",
"cookerId": "[device-id]",
"cookableId": "",
"title": "",
"type": "oven_v2",
"originSource": "api",
"cookableType": "manual"
},
"type": "CMD_APO_START"
},
"requestId": "[UUID]"
}

Multi-Stage Cooking​

Multi-stage cooking allows you to create complex recipes with different phases. Each stage can have different temperatures, timing, and cooking parameters. Stages execute sequentially, and you can control transitions between them.

How to Add Multiple Stages​

To create a multi-stage cook:

  1. Add multiple stage objects to the stages array
  2. Set userActionRequired to control manual transitions:
    • false: Automatic transition after timer completes
    • true: Requires user confirmation to proceed

Multi-Stage Example​

Anova Precision Oven v1:

{
"command": "CMD_APO_START",
"payload": {
"id": "[device-id]",
"payload": {
"cookId": "[UUID]",
"stages": [
{
"stepType": "stage",
"id": "[UUID]",
"title": "",
"description": "",
"type": "preheat",
"userActionRequired": false,
"temperatureBulbs": { "mode": "dry", "dry": { "setpoint": { "celsius": 54.44, "fahrenheit": 130 } } },
"heatingElements": { "top": { "on": false }, "bottom": { "on": false }, "rear": { "on": true } },
"fan": { "speed": 100 },
"vent": { "open": false },
"rackPosition": 3,
"stageTransitionType": "automatic",
"steamGenerators": { "mode": "relative-humidity", "relativeHumidity": { "setpoint": 100 } }
},
{
"stepType": "stage",
"id": "[UUID]",
"title": "",
"description": "",
"type": "cook",
"userActionRequired": false,
"temperatureBulbs": { "mode": "dry", "dry": { "setpoint": { "celsius": 54.44, "fahrenheit": 130 } } },
"heatingElements": { "top": { "on": false }, "bottom": { "on": false }, "rear": { "on": true } },
"fan": { "speed": 100 },
"vent": { "open": false },
"rackPosition": 3,
"timerAdded": true,
"probeAdded": false,
"timerStartOnDetect": false,
"stageTransitionType": "automatic",
"timer": { "initial": 300 }
},
{
"stepType": "stage",
"id": "[UUID]",
"title": "",
"description": "",
"type": "preheat",
"userActionRequired": false,
"temperatureBulbs": { "mode": "dry", "dry": { "setpoint": { "celsius": 93.33, "fahrenheit": 200 } } },
"heatingElements": { "top": { "on": true }, "rear": { "on": false }, "bottom": { "on": true } },
"fan": { "speed": 100 },
"vent": { "open": false },
"rackPosition": 3,
"stageTransitionType": "automatic"
},
{
"stepType": "stage",
"id": "[UUID]",
"title": "",
"description": "",
"type": "cook",
"userActionRequired": false,
"temperatureBulbs": { "mode": "dry", "dry": { "setpoint": { "celsius": 93.33, "fahrenheit": 200 } } },
"heatingElements": { "top": { "on": true }, "rear": { "on": false }, "bottom": { "on": true } },
"fan": { "speed": 100 },
"vent": { "open": false },
"rackPosition": 3,
"timerAdded": true,
"probeAdded": false,
"timerStartOnDetect": false,
"stageTransitionType": "automatic",
"timer": { "initial": 600 }
}
]
},
"type": "CMD_APO_START"
},
"requestId": "[UUID]"
}

Anova Precision Oven v2:

{
"command": "CMD_APO_START",
"payload": {
"id": "[device-id]",
"payload": {
"stages": [
{
"id": "[UUID]",
"do": {
"type": "cook",
"fan": { "speed": 100 },
"heatingElements": { "top": { "on": false }, "bottom": { "on": false }, "rear": { "on": true } },
"exhaustVent": { "state": "closed" },
"steamGenerators": { "mode": "relative-humidity", "relativeHumidity": { "setpoint": 100 } },
"temperatureBulbs": { "mode": "wet", "wet": { "setpoint": { "celsius": 54.44 } } },
"timer": { "initial": 300, "entry": { "conditions": { "and": { "nodes.temperatureBulbs.wet.current.celsius": { ">=": 54.44 } } } } }
},
"exit": { "conditions": { "and": { "nodes.timer.mode": { "=": "completed" } } } },
"entry": { "conditions": { "and": { "nodes.temperatureBulbs.wet.current.celsius": { ">=": 54.44 } } } },
"title": "",
"description": "",
"rackPosition": 3
},
{
"id": "[UUID]",
"do": {
"type": "cook",
"fan": { "speed": 100 },
"heatingElements": { "top": { "on": true }, "rear": { "on": false }, "bottom": { "on": true } },
"exhaustVent": { "state": "closed" },
"temperatureBulbs": { "mode": "dry", "dry": { "setpoint": { "celsius": 204.44 } } },
"timer": { "initial": 600 }
},
"exit": { "conditions": { "and": { "nodes.timer.mode": { "=": "completed" } } } },
"title": "",
"description": "",
"rackPosition": 3
}
],
"cookId": "[UUID]",
"cookerId": "[device-id]",
"cookableId": "",
"title": "",
"type": "oven_v2",
"originSource": "api",
"cookableType": "manual"
},
"type": "CMD_APO_START"
},
"requestId": "[UUID]"
}

Timer Start Type Examples​

1. Immediate Timer Start​

Anova Precision Oven v1 & v2:

{
"timer": {
"initial": 1800
}
}

2. Start When Preheated​

Anova Precision Oven v1 & v2:

{
"timer": {
"initial": 1200,
"startType": "when-preheated"
}
}

3. Manual Timer Start​

Anova Precision Oven v1 & v2:

{
"timer": {
"initial": 3600,
"startType": "manual"
}
}

4. Probe-Controlled Cook (No Timer)​

Anova Precision Oven v1 & v2:

{
"probe": {
"setpoint": {
"celsius": 65,
"fahrenheit": 149
}
}
}

Probe Commands​

Anova Precision Oven v1 Probe Command​

{
"command": "CMD_APO_SET_PROBE",
"requestId": "[UUID]",
"payload": {
"id": "[device-id]",
"type": "CMD_APO_SET_PROBE",
"payload": {
"setpoint": {
"celsius": 65,
"fahrenheit": 149
}
}
}
}

Anova Precision Oven v2 Probe Command​

{
"command": "CMD_APO_SET_PROBE",
"requestId": "[UUID]",
"payload": {
"id": "[device-id]",
"type": "CMD_APO_SET_PROBE",
"payload": {
"setpoint": {
"celsius": 65
}
}
}
}

Stop Cook Command​

Anova Precision Oven v1 & v2 Compatible:

{
"command": "CMD_APO_STOP",
"requestId": "[UUID]",
"payload": {
"id": "[device-id]",
"type": "CMD_APO_STOP"
}
}

Set Temperature Unit​

Anova Precision Oven v1 & v2 Compatible:

{
"command": "CMD_APO_SET_TEMPERATURE_UNIT",
"requestId": "[UUID]",
"payload": {
"id": "[device-id]",
"type": "CMD_APO_SET_TEMPERATURE_UNIT",
"payload": {
"temperatureUnit": "C"
}
}
}

Temperature Limits​

ModeOven v1Oven v2
Wet Bulb75°F - 212°F (25°C - 100°C)75°F - 212°F (25°C - 100°C)
Dry Bulb (Normal)75°F - 482°F (25°C - 250°C)75°F - 482°F (25°C - 250°C)
Dry Bulb (Bottom Only)75°F - 356°F (25°C - 180°C)75°F - 446°F (25°C - 230°C)
Probe Temperature33°F - 212°F (1°C - 100°C)33°F - 212°F (1°C - 100°C)

Key Difference: Oven v2 has higher temperature limits when using only the bottom heating element

  • Oven v1: Max 356°F (180°C) with bottom heating only
  • Oven v2: Max 446°F (230°C) with bottom heating only

Timer Start Types​

TypeOven v1Oven v2Description
immediately✅✅Start timer immediately
when-preheated✅✅Start when target temperature reached
manual✅✅Start manually via user action

Stage Transition Types​

TypeOven v1Oven v2Description
automatic✅✅Automatic transition after timer
manual✅✅Manual user confirmation required

Device Detection​

To determine device version, check the version field in the device state:

const deviceVersion = device.state.version === 1 ? "Oven v1" : "Oven v2";

Notes​

  • All UUIDs should be properly formatted UUID v4 strings
  • Timer values are in seconds
  • Temperature values should include both Celsius and Fahrenheit for Oven v1 compatibility, but Fahrenheit is optional for Oven v2
  • Device ID is obtained from WebSocket connection messages