Docs / Open API & Integrations / Mixer API Reference

Mixer API Reference

mixer.proto, 8 services. This is the raw per-parameter control surface — the same one Aura Mixer's own UI drives internally. Prefer the Actions API unless you need something it doesn't cover (individual EQ bands, gate/compressor parameters, output normalization, routing, etc.) — see Overview & Setup for connection and auth details, which apply here identically.

🔒 Every RPC below requires Premium

(Open API itself is a Premium-gated feature), so unlike the app's own UI, you'll never hit a silently-degraded Free-tier value through this surface — everything here runs fully unlocked once you're connected at all.

Every setter returns google.protobuf.Empty — these are fire-and-forget, matching how the app's own UI drives them during a knob drag (no synchronous ack). If you need confirmation a value took, read it back via the corresponding getter where one exists, or via ActionsService.StreamState for mute/solo/fader.

Target IDs (channel_id, output_id, group_id, entity_id) are the same opaque project-local IDs described in the Actions reference — get real ones from StreamState, don't guess.

Deliberately unimplemented

Two RPCs exist in the .proto contract but always return UNIMPLEMENTED — they're internal plumbing, not a control surface:

  • TransportService.SyncActiveChannels
  • ChannelsService.UploadHrirPairs

(The four MeteringService.Stream* RPCs are unimplemented too, for a different reason — see Limitations in the overview.)

TransportService — engine lifecycle & status

RPCRequestResponseNotes
StartEmptyEmptyStarts the audio engine (WASAPI capture + render).
StopEmptyEmptyStops the audio engine.
RefreshEmptyEmptyRe-syncs DSP nodes with the current channel/output list. Rarely needed from outside the app.
ApplySettingsrender_device_id (string)EmptySets the render (output) device. Empty string = system default.
GetStatusEmptyEngineStatusis_running, frame_count, sample_rate, dsp_cpu_percent, capture_overruns, render_underruns.
ResetDiagnosticCountersEmptyEmptyZeroes capture_overruns/render_underruns.
StreamRunStateEmptystream RunStateEvent{is_running}Pushes on every start/stop transition; primed with the current state on connect.

DevicesService — enumeration + live-change stream

RPCRequestResponseNotes
GetCaptureDevicesEmptyDeviceList{devices: [{id, friendly_name}]}Microphones, loopback, and virtual capture endpoints.
GetRenderDevicesEmptyDeviceList (same shape)Speakers/headphones/virtual render endpoints.
GetActiveAudioProcessesEmptyProcessList{processes: [{process_id, process_name, display_name}]}Processes currently producing audio — the app-loopback picker's data source.
DetectDeviceChannelsdevice_id (string)DeviceChannelInfo{channels, mask}Native channel count + WASAPI channel mask for a device.
StreamDeviceEventsEmptystream DeviceEvent{kind}kind is DEVICE_LIST_CHANGED or APP_LOOPBACK_PROCESSES_CHANGED — re-query the relevant list above when either fires.

ChannelsService — per-channel setters + reads

RPCRequestResponseNotes
SetFaderchannel_id, dbEmpty
SetInputGainchannel_id, dbEmptyInput trim.
SetPadchannel_id, value (bool)Empty−20 dB pad.
SetPanchannel_id, value (float)EmptyRange [-100, 100].
SetGateParamchannel_id, key, valueEmptykey: thresh/damping/hyst/atk/hold/rel.
SetCompParamchannel_id, key, valueEmptykey: thresh/ratio/knee/makeup/mix/atk/rel.
SetFxInsertParamchannel_id, insert_id, key, valueEmptyFX insert rack (reverb, delay, etc.) — insert_id identifies the specific insert instance on that channel.
SetSpeakerGainschannel_id, gains (repeated float)EmptyPer-speaker HRTF-fold trim; length-8 array, unused indices ignored.
SetTrebleSoftenchannel_id, value (dB)EmptyBinaural treble-shelf gain for HRTF channels; negative = cut.
SetStereoSpatialchannel_id, width, haas_ms, ms_ratioEmpty
SetPointSourcechannel_id, azimuth, elevation, distance, attenuationEmptyazimuth in [-180, 180]° (positive = right), distance in metres ≥ 0.1.
GetCaptureModeInfochannel_idCaptureModeInfo{mode}mode: exclusive/shared-fallback/shared/loopback/apploop/none.
GetCaptureSampleRatechannel_idSampleRateInfo{sample_rate}Native device sample rate; ≠ 48000 means Windows is resampling the input.
GetAppLoopbackStatuschannel_idAppLoopbackStatus{present, attached, process_id}present: false means the channel isn't an app-loopback channel or the engine is stopped.

BusesService — output-bus setters + monitor gain

RPCRequestResponseNotes
SetOutputFaderoutput_id, dbEmpty
SetOutputGainoutput_id, dbEmptyPre-EQ output trim.
SetOutputMuteoutput_id, value (bool)Empty
SetOutputDelayoutput_id, ms, enabledEmptyms clamped to [0, 500].
SetOutputLimParamoutput_id, key, valueEmptykey: ceiling/release.
SetOutputNormalizationEnabledoutput_id, value (bool)EmptyLUFS loudness normalization.
SetOutputNormalizationTargetoutput_id, value (target LUFS)Empty
SetOutputNormalizationHeadroomoutput_id, value (dBTP)Empty
GetOutputNormalizationGainDboutput_idFloatValue{value}Current normalizer gain being applied, e.g. for a "Δ +3.2 dB" readout.
SetOutputDriftoutput_id, mode, manual_ppmEmptymode: auto/manual.
ApplyBusOutputoutput_id, device_idEmptyAssigns the physical WASAPI device this bus renders to. Empty device_id clears the assignment (bus becomes virtual-only).
SetBusProcessOutputoutput_id, device_id, bus_name, enabledEmptyEnables the hidden per-bus "process output" child process (for OBS/Discord app-capture without a virtual cable).
SetMonitorGainvalue (float)EmptyGlobal monitor output gain — not per-bus, no output_id.

RoutingService — sends, bus-to-bus, VCA

RPCRequestResponseNotes
SetSendDbchannel_id, output_id, dbEmptyChannel→bus send level.
SetBusRouteDbsrc_id, dst_id, dbEmptyBus→bus routing level.
SetVcaGaingroup_id, dbEmptyCurrently a no-op — VCA group membership isn't wired up in the out-of-process engine yet. Present in the contract for forward-compatibility; don't rely on it doing anything right now.

EqService — shared EQ surface (channel or bus)

RPCRequestResponseNotes
SetEqBandentity_id, band_index, type, hz, gain, q, band_enabled, eq_enabledEmptyentity_id is any channel or output-bus id — same EQ node type either way. type: peak/hi_shelf/lo_shelf/hpf/lpf/notch.

MeteringService — point queries

Point-in-time reads only — see Limitations for why the streaming variants (StreamLevels/StreamLufs/StreamGr/StreamSpectrum) aren't available.

RPCRequestResponseNotes
GetChannelLufschannel_idLufsReadoutmomentary, short_term, integrated, true_peak_dbtp, loudness_range_lu. All -∞ when silent/stopped.
GetOutputBusLufsoutput_idLufsReadout
GetMainBusLufsEmptyLufsReadout
ResetChannelLufsIntegratedchannel_idEmpty
ResetOutputBusLufsIntegratedoutput_idEmpty
ResetMainBusLufsIntegratedEmptyEmpty
GetChannelGrchannel_idChannelGrReadout{gate_level_db, gate_gr_db, comp_level_db, comp_gr_db}Gate/compressor level + gain-reduction. -80/0 when stopped or unknown.
GetOutputGroutput_idOutputGrReadout{level_db, lim_gr_db}Bus level + limiter gain-reduction.
GetOutputLatencyMetricsEmptyLatencyMetrics{jitter_us, hw_ms, buf_ms}All 0 when the engine is stopped.

DiagnosticsService — reliability signal stream

RPCRequestResponseNotes
StreamSignalsEmptystream DiagnosticSignal{type, count, detail}Out-of-band reliability events — type examples: engine_start_fail, exclusive_denied, hotswap_recovered. detail carries sanitized tokens only, never device names. Useful for surfacing engine health in your own UI.
stuck? ask on Discord
An unhandled error has occurred. Reload 🗙

Rejoining the server...

Rejoin failed... trying again in seconds.

Failed to rejoin.
Please retry or reload the page.

The session has been paused by the server.

Failed to resume the session.
Please retry or reload the page.