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 modemode
: "dry" or "wet" cooking modedry.setpoint
: Target temperature for dry cookingwet.setpoint
: Target temperature for wet/sous vide cooking
-
timer
: Time-based cooking controlinitial
: Timer duration in secondsstartType
: When to start timer ("immediately", "when-preheated", "manual", "on-detection")
-
heatingElements
: Control individual heating elementstop
,bottom
,rear
: Each withon
boolean value. Restriction: All three can not be on/off at the same time
-
steamGenerators
: Steam and humidity controlmode
: "idle", "relative-humidity", or "steam-percentage"relativeHumidity.setpoint
: Target humidity percentage (0-100)
-
fan
: Convection fan controlspeed
: Fan speed percentage (0-100)
-
vent
: Oven vent controlopen
: Boolean for vent position
-
probe
: Temperature probe settingssetpoint
: 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:
- Add multiple stage objects to the
stages
array - Set
userActionRequired
to control manual transitions:false
: Automatic transition after timer completestrue
: 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
Mode | Oven v1 | Oven v2 |
---|---|---|
Wet Bulb | 75°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 Temperature | 33°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
Type | Oven v1 | Oven v2 | Description |
---|---|---|---|
immediately | ✅ | ✅ | Start timer immediately |
when-preheated | ✅ | ✅ | Start when target temperature reached |
manual | ✅ | ✅ | Start manually via user action |
Stage Transition Types
Type | Oven v1 | Oven v2 | Description |
---|---|---|---|
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