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
immediatelyStart timer immediately
when-preheatedStart when target temperature reached
manualStart manually via user action

Stage Transition Types

TypeOven v1Oven v2Description
automaticAutomatic transition after timer
manualManual 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