<!-- GENERATED from docs/api/rialto400d.yaml by avpro-api's api-spec/apispec.py. Do not edit: change the spec and run `apispec.py docs --into-tree`. -->
# ACP-RIALTO-400D — IP Control API

**Applies to:** AudioControl ACP-RIALTO-400D (subwoofer / mono amplifier with Dante)  
**Interface:** TCP/IP (telnet)  
**API version:** 1  
**Document generated:** 2026-10-30

---

## 1. Connection

| Property | Value |
|---|---|
| Transport | TCP/IP (telnet) |
| Port | **23** |
| Idle timeout | 60 minutes |
| Concurrent sessions | 4 |

Open a raw TCP/telnet session to the unit's IP address on the control port and send commands as text lines.

## 2. Command Format

- Commands are **not case-sensitive** (input is converted to upper-case), except where a command says it keeps text as typed; one command per line.
- Terminate each command with a carriage return or line feed — `CR`, `LF`, or `CRLF` all work.
- Parameters are separated by single spaces.
- `SET` commands change a setting or state. `GET` commands query it.

**Responses**
- A command answers with its keyword followed by the value: `SET VOL 30` and `GET VOL` both return `VOL 30`. Where a command answers differently, its row says so.
- An invalid command returns a line beginning with `CMD ERR:`; a valid command with an out-of-range parameter returns `PARAM ERROR:`.

**Example session**
```
GET POWER  ->  POWER OFF
GET VOL    ->  VOL 30
GET INPUT  ->  INPUT DANTE
GET MODEL  ->  MODEL ACP-RIALTO-400D
```

---

## 3. System & Power

| Command | Description |
|---|---|
| `H` | Show this list of commands |
| `STA` | Show system status |
| `GET STA` | Get settings status (multi-line reply) |
| `SET RBT` | Reboot the device |
| `SET RST` | Reset to factory defaults |
| `SET POWER x` | Turn the device on/off. `x = {ON, OFF}` → e.g. `POWER ON` |
| `GET POWER` | Get current power state → `POWER ON` / `POWER OFF` |
| `SET POWER RECOVERY x` | Power state to restore when mains power is applied. `x = {LAST, ON, OFF}` |
| `GET POWER RECOVERY` | Get the power-recovery setting → e.g. `POWER RECOVERY LAST` |
| `SET POWER OFF TIMER x` | Go to standby after this long without a signal. `x = hHmM` (e.g. `2H30M`, `0H10M`) or `NEVER` |
| `GET POWER OFF TIMER` | Get the standby timer and its countdown (multi-line reply) |
| `GET TRIG IN` | Get the 12 V trigger input state → `TRIG IN ON` / `TRIG IN OFF` |
| `GET SER NUM` | Get the product serial number → e.g. `SER NUM 0131000826000006` |
| `GET MODEL` | Get the unit model → e.g. `MODEL ACP-RIALTO-400D` |
| `GET MODELNAME` | Same as `GET MODEL` (alternative form) |
| `GET VER INF` | Get the firmware version (the DSP program is built into it) → e.g. `MAIN MCU V1.2.93` |
| `GET VER` | Same as `GET VER INF` (alternative form) |
| `GET VERSION` | Same as `GET VER INF` (alternative form) |
| `SET NOTIFY x` | x = {ON, OFF}. ON: this session is sent a line when power, volume, mute or input changes from anywhere (OFF = default) → e.g. `NOTIFY ON` |
| `GET NOTIFY` | Get this session's NOTIFY setting → e.g. `NOTIFY OFF` |

---

## 4. Inputs & Signal Sensing

| Command | Description |
|---|---|
| `SET INPUT x` | Select active audio input. `x = {DIGITAL, ANALOG, DANTE}` → e.g. `INPUT DANTE` |
| `GET INPUT` | Get the active input → e.g. `INPUT DANTE` |
| `SET INPUT GAIN x y` | Set positive gain offset for input `x`. `x = {DIGITAL, ANALOG, DANTE}`, `y = {LOW, MED, HIGH}` |
| `GET INPUT GAIN x` | Get input `x` gain offset. `x = {DIGITAL, ANALOG, DANTE}` → e.g. `INPUT GAIN DIGITAL LOW` |
| `GET INPUT FORMAT` | Get incoming signal type information → e.g. `INPUT FORMAT NONE` |
| `SET VOL DEFEAT x y` | Fixed (defeat) volume for input `x`. `x = {DIGITAL, ANALOG, DANTE}`, `y = {ON, OFF}` |
| `GET VOL DEFEAT x` | Get input `x` volume-defeat state. `x = {DIGITAL, ANALOG, DANTE}` → e.g. `VOL DEFEAT DIGITAL OFF` |
| `SET SIGNAL SENSE x y` | Auto-power on signal detect for input `x`. `x = {DIGITAL, ANALOG, DANTE}`, `y = {ON, OFF}` |
| `GET SIGNAL SENSE x` | Get signal-sense state for input `x`. `x = {DIGITAL, ANALOG, DANTE}` → e.g. `SIGNAL SENSE DIGITAL OFF` |
| `SET PRIORITY x` | Priority input for signal sensing. `x = {DIGITAL, ANALOG, DANTE, NONE}` |
| `GET PRIORITY` | Get the signal-sense priority input → e.g. `PRIORITY NONE` |
| `SET DANTE INPUT x` | Route Dante 1 In (and Dante 2 In too while linked) to a Dante channel. `x = <channel>@<device>` (e.g. `Sub/LFE@AXIS16-020adc`), or `NONE` to clear. Case-sensitive. Routes are stored in the Dante module and survive reboots |
| `SET DANTE INPUT n x` | Route one channel, `n = {1, 2}`. Channel 2 is refused while linked: `PARAM ERROR: DANTE INPUT 2 LINKED, SET DANTE INPUT LINK OFF first` |
| `GET DANTE INPUT` | Dante 1 In's source and state: `DANTE INPUT <channel>@<device>\|NONE\|mixed <status>` (`mixed` = the channels differ). Status `dynamic`/`static` = the flow is up, `none`, `unresolved` = source not on the network, `unknown` = module not answered yet → e.g. `DANTE INPUT L@B5100D-89dfa9 dynamic` |
| `GET DANTE INPUT n` | Get one channel's source, `n = {1, 2}`: `DANTE INPUT n <channel>@<device>\|NONE <status>` → e.g. `DANTE INPUT 1 L@B5100D-89dfa9 dynamic` |
| `SET DANTE INPUT LINK x` | `x = {ON, OFF}`. ON (default): Dante 2 In follows Dante 1 In; channel 1's route is applied to both and a route changed in Dante Controller is put back. OFF: each channel is routed on its own and the DSP sums them. Persisted |
| `GET DANTE INPUT LINK` | Get the link state → e.g. `DANTE INPUT LINK ON` |
| `GET DANTE SOURCES` | List every Dante device found on the network and its TX channels, AVPro devices first: `DANTE SOURCE <device> AVPRO\|OTHER <ip>: <channels...>` (multi-line reply) |
| `SET DANTE LABEL RX|TX n name` | Name a Dante RX or TX channel (the name Dante Controller shows; stored by the module). `n = {1, 2}`, `name` is 1-31 characters (no `= . @`), or `NONE` to clear it back to the default. No settings node. Renaming a TX channel breaks other devices' subscriptions to the old name → e.g. `DANTE LABEL RX 1 Living Room` |
| `GET DANTE LABELS` | Get the Dante RX channel labels, one reply line per channel: `DANTE LABEL RX n <label-or-"-"> (<default name>)`. TX labels are not listed here. No settings node (multi-line reply) |

---

## 5. Volume & Mute

| Command | Description |
|---|---|
| `SET VOL x` | Set speaker volume. `x = 0–100` → e.g. `VOL 30` |
| `SET VOL+ x` | Increase volume by `x` (`x = 1–100`, default 1) → e.g. `VOL 31` |
| `SET VOL- x` | Decrease volume by `x` (`x = 1–100`, default 1) → e.g. `VOL 30` |
| `GET VOL` | Get speaker volume → e.g. `VOL 30` |
| `SET MAX VOL x` | Map maximum volume to 100. `x = 10–100` |
| `GET MAX VOL` | Get maximum-volume setting → e.g. `MAX VOL 100` |
| `SET ON VOL x` | Volume at power-on. `x = 0–100` |
| `GET ON VOL` | Get power-on volume → e.g. `ON VOL 30` |
| `SET MUTE` | Mute speaker output → e.g. `MUTE` |
| `SET UNMUTE` | Unmute speaker output → e.g. `UNMUTE` |
| `GET MUTE` | Get speaker mute state: `MUTE` or `UNMUTE` |

---

## 6. Dante

| Command | Description |
|---|---|
| `SET DVOL x` | Set Dante output volume. `x = 0–100`. While `DVOL FOLLOW` is `ON` it is refused with `DVOL FOLLOW LOCKED` |
| `SET DVOL+ x` | Increase Dante output volume by `x` (default 1). While `DVOL FOLLOW` is `ON` it is refused with `DVOL FOLLOW LOCKED` |
| `SET DVOL- x` | Decrease Dante output volume by `x` (default 1). While `DVOL FOLLOW` is `ON` it is refused with `DVOL FOLLOW LOCKED` |
| `GET DVOL` | Get Dante output volume → e.g. `DVOL 30` |
| `SET DVOL FOLLOW x` | Dante volume follows speaker volume. `x = {ON, OFF}` |
| `GET DVOL FOLLOW` | Get Dante follow mode → e.g. `DVOL FOLLOW ON` |
| `SET DMUTE` | Mute Dante output |
| `SET DUNMUTE` | Unmute Dante output |
| `GET DMUTE` | Get Dante mute state → e.g. `DMUTE OFF` |
| `SET DANTE TX SOURCE x` | What the Dante transmitter sends. `x = {SUB, INPUT}`: `SUB` = the sub output signal, `INPUT` = the active input |
| `GET DANTE TX SOURCE` | Get what the Dante transmitter sends → e.g. `DANTE TX SOURCE SUB` |

---

## 7. Outputs

| Command | Description |
|---|---|
| `SET TEST TONE OUT x` | Play pink noise on output `x`. `x = {NONE, SUB, DANTEL, DANTER}`; `NONE` stops it |
| `GET TEST TONE OUT` | Get the output playing pink noise → e.g. `TEST TONE OUT NONE` |
| `SET TEST TONE FULLBAND x` | Full-bandwidth pink noise (bypass 500 Hz HPF / 2 kHz LPF). `x = {ON, OFF}` |
| `GET TEST TONE FULLBAND` | Get full-bandwidth pink-noise state → e.g. `TEST TONE FULLBAND OFF` |
| `SET OUT CH GAIN x y` | Output gain offset. `x = {SUB, DL, DR}`, `y = -12.0–12.0` dB |
| `GET OUT CH GAIN x` | Get output gain offset. `x = {SUB, DL, DR, ALL}`; `ALL` lists each output → e.g. `OUT CH GAIN SUB 0.0` |
| `SET OUT CH DISTANCE x y z` | Listener distance for output `x`. `x = {SUB, DL, DR}`, `z = {FEET, METERS, MS}`; `y = 0.1–30` feet, `0.03–9` metres or `0.09–26.7` ms |
| `GET OUT CH DISTANCE x y` | Get output distance. `x = {SUB, DL, DR, ALL}`, `y = {FEET, METERS, MS}` → e.g. `OUT CH DISTANCE SUB 12.0 FEET` |
| `SET OUT FREQ XOVER x` | Crossover cutoff frequency (Hz). `x = 40–150` |
| `GET OUT FREQ XOVER` | Get crossover cutoff frequency → e.g. `OUT FREQ XOVER 100` |
| `SET OUT MODE x` | Product mode. `x = {SUB, AMP}`: subwoofer, or full-power mono amplifier |
| `GET OUT MODE` | Get the product mode → e.g. `OUT MODE SUB` |
| `SET OUT FREQ RESPONSE x` | Speaker frequency response. `x = {LIMITED, FULLRANGE}` (the 400D takes no group token) |
| `GET OUT FREQ RESPONSE` | Get the frequency response → e.g. `OUT FREQ RESPONSE FULLRANGE` |

---

## 8. Parametric EQ

| Command | Description |
|---|---|
| `SET OUT CH PEQ x b g f q` | Set user PEQ band `b` of output `x`. `x = {SUB, DL, DR}`, `b = 0–7`, `g = -12.0–12.0` dB, `f` = frequency in Hz (`5–250` on SUB, `5–20000` on DL and DR), `q = 0.1–20` |
| `SET PEQ ENABLE` | Enable the parametric EQ |
| `SET PEQ DISABLE` | Disable the parametric EQ |
| `GET PEQ ENABLE` | Get the parametric-EQ enable state → e.g. `PEQ DISABLED` |
| `SET EQ PRESET n` | Select user-PEQ preset `n` (1-3); loads its stored PEQ bands and speaker-profile state → e.g. `EQ PRESET 1` |
| `GET EQ PRESET` | Get the active preset number → e.g. `EQ PRESET 1` |
| `SET EQ PRESET NAME n name` | Name preset `n` (1-3). `name` is 1-20 printable ASCII characters, no `"` → e.g. `EQ PRESET NAME 1 Movie` |
| `GET EQ PRESET NAME` | Get all three preset names, one reply line per preset (multi-line reply) |
| `GET EQ PRESET NAME n` | Get preset `n`'s name (1-3) → e.g. `EQ PRESET NAME 1 Movie` |
| `SET PEQ FLATTEN` | Reset every user PEQ band to flat |

---

## 9. Speaker Profiles

| Command | Description |
|---|---|
| `SET SP PROFILE SUB NONE` | Clear the speaker profile |
| `SET SP PROFILE CUSTOM` | Reload the saved custom profile |
| `SET SP PROFILE x` | Load a subwoofer profile from the built-in library. `x = 0–2398`; L/R speaker profiles in the library are refused |
| `GET SP PROFILE` | Get the loaded speaker profile → e.g. `SP PROFILE SUB NONE` |
| `SET SP PEQ SUB b t f q g` | Set speaker-profile band `b` of the sub channel. `b = 0–9`, `t = {PK, LS, HS}`, `f` = frequency in Hz, `q` = Q, `g` = gain in dB |
| `GET SP PEQ SUB x` | Get speaker-profile band `x` of the sub channel. `x = {0–9, ALL}` → e.g. `SP PEQ SUB 0 PK 1000 1.000 0.0` |
| `SET SP PEQ ENABLE` | Enable speaker-profile PEQ |
| `SET SP PEQ DISABLE` | Disable speaker-profile PEQ |
| `GET SP PEQ ENABLE` | Get speaker-profile PEQ enable state → e.g. `SP PEQ DISABLED` |
| `SET SP PEQ FLATTEN` | Reset all speaker-profile PEQ bands to flat |
| `SET SP PEQ NAME SUB name` | Name the sub speaker profile. `name` is 1-20 printable ASCII characters → e.g. `SP PEQ NAME SUB My Sub` |
| `SET SP PEQ PREAMP SUB x` | Set the speaker-profile preamp gain. `x` = gain in dB, e.g. `-3.5` |
| `GET SP PEQ PREAMP` | Get the speaker-profile preamp gain → e.g. `SP PEQ PREAMP SUB 0.0` |
| `SET SP PEQ SAVE` | Save the current profile bands as the custom profile |

---

## 10. Display & IR

| Command | Description |
|---|---|
| `SET IR KEYSET x` | IR remote code set. `x = 0–2` |
| `GET IR KEYSET` | Get the IR remote code set → e.g. `IR KEYSET 0 (new8890) of 3` |
| `SET IR FRONT x` | Front-panel IR receiver. `x = {ON, OFF}` |
| `GET IR FRONT` | Get the front-panel IR receiver state → e.g. `IR FRONT ON` |
| `SET LCD x` | Front-panel display. `x = {ON, OFF}` |
| `GET LCD` | Get the display state → e.g. `LCD ON` |
| `SET LCDTIMER x` | Display dim timeout. `x = 0–255` seconds |
| `GET LCDTIMER` | Get the display dim timeout → e.g. `LCDTIMER 180` |

---

## 11. Network

| Command | Description |
|---|---|
| `SET HOSTNAME x` | Set the hostname. `x` = 1–32 letters, digits and hyphens, not starting or ending with a hyphen; kept as typed. With no name the default returns (model plus the last six MAC digits) |
| `GET HOSTNAME` | Get the hostname → e.g. `HOSTNAME ACP-RIALTO-400D-04008F` |
| `GET RIP` | Get gateway/route IP → e.g. `RIP 192.168.001.001` |
| `GET HIP` | Get host IP → e.g. `HIP 192.168.001.039` |
| `GET NMK` | Get subnet mask → e.g. `NMK 255.255.255.000` |
| `GET TIP` | Get control TCP port → e.g. `TIP 23` |
| `GET DHCP` | Get DHCP state → e.g. `DHCP ON` |
| `GET MAC` | Get MAC address → e.g. `MAC 18:8a:6a:04:00:8f` |
| `GET DANTE RIP` | Gateway the Dante module is using now → e.g. `DANTE RIP 192.168.001.001` |
| `GET DANTE HIP` | IP address the Dante module is using now, e.g. `DANTE HIP 192.168.001.037`. `000.000.000.000` until the module has reported it (up to a minute after power-up) |
| `GET DANTE NMK` | Subnet mask the Dante module is using now → e.g. `DANTE NMK 255.255.255.000` |
| `GET DANTE DHCP` | Get Dante DHCP state → e.g. `DANTE DHCP ON` |
