Profile Information
Admin Access
Use this key to access the admin dashboard and API endpoints.
Preview Program
Get early access to new features by joining our Preview Program.
Application Pending
Your application is being reviewed. We'll notify you by email once it's been processed.
Welcome to the Preview Program! 🎉
You have access to preview features like DJ Stats, Device Management, MIXEY AI, Leaderboard and MIXERA Connect. Check them out in the sidebar!
Application Not Accepted
Your application was not accepted at this time.
Admin Access
As an admin, you have automatic access to all preview features.
Badges & Leaderboard
Show on Leaderboard
Allow your stats to appear on the public leaderboard
Your Badges
Toggle which badges are visible on your profile and in leaderboards
Security Settings
Change Password
Update your password to keep your account secure.
Email Verification
Active Sessions
You're currently signed in on this device.
Your DJ Statistics
Last updated: TodayPreview Mode - Demo Data
This is a preview of upcoming features. The statistics shown are simulated demo data. Real data will be available once you connect your MIXERA controller.
MIXEY
AIClick the button below to get your personalized weekly summary from MIXEY!
Transition Analysis
Top Genres
Activity
Achievements Unlocked
Power & Climate
For every 100 kWh used, MIXERA plants a tree to offset your carbon footprint.
BPM Range
When You DJ
Most active: Saturday 11PM
Fun Facts
Session Heatmap (Last 12 Weeks)
Personal Records
Community Leaderboard
Preview Mode - Demo Data
This leaderboard uses demo data. Real rankings will be available when you connect your MIXERA controller.
Badge Legend
Rank badges use icons specific to each category (clock for playtime, arrows for transitions, star for sessions, music note for tracks, fire for streaks)
MIXERA Connect
Preview Mode - Demo Data
MIXERA Connect uses demo data. Real DJ connections will be available once the feature is fully launched.
MIXEY Matches
DJs with similar styles and stats
Your DJ Profile
Profile analyzed from your DJ Stats
Select a DJ to start chatting
Choose from your MIXEY matches
Welcome to MIXERA Connect
MIXEY has found DJs with similar styles to yours! Select someone from the matches list to start a conversation and connect with fellow DJs.
MIXEY AI Assistant
AI PoweredPreview Mode - Demo Assistant
MIXEY is currently a demo assistant. Full AI capabilities will be available when the feature launches.
Quick Questions
MIXEY
Always available
Hey there! 👋 I'm MIXEY, your personal MIXERA assistant!
I have access to your account information and can help you with:
- Understanding your badges and how to earn more
- Explaining your DJ statistics
- Device information and warranty status
- Account details and settings
Ask me anything about your MIXERA account! 🎧
Just now
GEMA License Calculator
gema.deEstimate Only - Not Official
This calculator provides rough estimates based on GEMA's public tariff information. Actual fees may vary. Always contact GEMA directly for official quotes and licensing.
Event Details
Enter 0 for free events
Estimated GEMA Fee
Tariff: -€0.00
+ VAT (7% or 19%)
This estimate is based on GEMA's general tariff structure. Special events, recurring events, or venues with existing GEMA contracts may have different rates.
MIXEY
GEMA Expert
Hi! I'm here to help you understand GEMA licensing. Ask me anything about:
- • What is GEMA?
- • Tariff categories
- • When you need a license
- • How to register
Common Tariffs
MIXERA Cloud
5 GB StoragePreview Mode - Demo Data
MIXERA Cloud is in preview. The tracks shown are demo data. Full cloud functionality will be available when the feature launches.
Upload Tracks
Drop files here or click to upload
MP3, WAV, FLAC, AIFF (max 100MB)
Sync Settings
Linked Devices
Your Tracks
| Track | BPM | Key | Genre | Size | Synced | Actions |
|---|
MIXERA Infinity
∞ UpgradesPreview Mode - Demo Data
MIXERA Infinity is in preview. Pricing and features shown are for demonstration. Actual availability and pricing may vary at launch.
Select Devices for Upgrade
Choose which devices to apply connectivity upgrades
Controller Connectivity
Your MIXERA CTRL one includes a built-in eSIM with 10 MB/month for telemetry and device security. Upgrade to unlock cloud music streaming and SoundCloud integration.
Alternative options: You can use all streaming features for free when connected to WiFi/LAN or your phone's hotspot. You can also activate your own eSIM directly on the device.
Basic
Included with your device
- 10 MB/month data
- Telemetry & Stats
- Device locking/security
- Cloud music push
- SoundCloud streaming
Starter
Perfect for occasional use
- 250 MB/month data
- All Basic features
- Cloud music push
- SoundCloud streaming
Pro
For regular performers
- 1 GB/month data
- All Starter features
- Priority data routing
- Data rollover (unused data)
Unlimited
For heavy streaming
- Unlimited data
- All Pro features
- Global roaming included
- Priority support
Use Your Own eSIM
Activate any compatible eSIM directly on your device for full flexibility
MIXERA Cloud Storage
Your account includes 5 GB of cloud storage. Upgrade for more space to store and sync your tracks.
Basic Cloud
Included with MIXERA ID
- 5 GB storage
- Track analysis
- Device sync
Cloud Plus
For growing libraries
- 25 GB storage
- All Basic features
- Version history
Cloud Pro
For professional DJs
- 100 GB storage
- All Plus features
- Priority sync
Pay As You Go
Only pay for what you use
- Flexible storage
- No monthly commitment
- Scale as needed
Connect External Storage
Link your existing Google Drive or Dropbox account for cloud storage.
Not connected
-
Note: Using external storage disables direct push to devices. You'll need to manually download tracks to your device via WiFi/USB.
Your Current Subscription
No active paid plans
Connected Applications
Apps with access to your account
No apps have access to your account yet.
When you use "Login with Mixera ID" on other sites, they'll appear here.
Developer: Your Apps
Create OAuth clients to add "Login with Mixera ID" to your own websites and apps.
App Guidelines
To get your app approved, please ensure:
- Your app has a clear, descriptive name
- Redirect URIs use HTTPS (except localhost for testing)
- Your website URL is valid and accessible
- Your app doesn't impersonate Mixera or other brands
- Your app provides value to users and isn't spam
Apps that violate these guidelines may be denied or revoked. Contact support if you have questions.
Create OAuth Application
App Created - Pending Review
Save these credentials now - the secret won't be shown again!
Note: Your app needs to be reviewed before it can be used.
Need help testing your integration?
Open OAuth Test Page →Developer Documentation
Learn how to integrate "Login with Mixera ID" into your application.
Quick Start
- Create an OAuth app in the section
- Save your
client_idandclient_secret - Wait for your app to be approved by our team
- Implement the OAuth flow in your application
- Exchange the authorization code for user information
OAuth 2.0 Flow
Redirect to Authorization
Send the user to our authorization endpoint:
https://mixera.pro/api/oauth/authorize?client_id=YOUR_CLIENT_ID&redirect_uri=YOUR_REDIRECT_URI&response_type=code&state=RANDOM_STATE
User Authorization
The user logs in and authorizes your app. They are then redirected back to your redirect_uri with a code parameter.
Download our ready-to-use callback page template with MIXERA branding for your redirect URI:
Exchange Code for Token
Exchange the authorization code for user information:
POST https://mixera.pro/api/oauth/token
Content-Type: application/json
{
"client_id": "YOUR_CLIENT_ID",
"client_secret": "YOUR_CLIENT_SECRET",
"code": "AUTHORIZATION_CODE",
"redirect_uri": "YOUR_REDIRECT_URI",
"grant_type": "authorization_code"
}
Receive User Data
On success, you'll receive the user's information:
{
"access_token": "...",
"token_type": "Bearer",
"user": {
"mixeraId": "MXR-XXXXXXXX",
"email": "user@example.com",
"name": "User Name",
"profilePicture": "https://..."
}
}
API Endpoints
/api/oauth/authorize
Initiates the OAuth authorization flow.
Query Parameters:
| client_id | Required. Your application's client ID. |
| redirect_uri | Required. Must match a registered redirect URI. |
| response_type | Required. Must be code. |
| state | Recommended. A random string to prevent CSRF attacks. |
/api/oauth/token
Exchanges an authorization code for user information.
Request Body (JSON):
| client_id | Required. Your application's client ID. |
| client_secret | Required. Your application's client secret. |
| code | Required. The authorization code received. |
| redirect_uri | Required. Must match the original request. |
| grant_type | Required. Must be authorization_code. |
Code Examples
Add a "Login with Mixera ID" button to your website:
<!-- Login Button -->
<button onclick="loginWithMixera()" style="
background: #A259FF;
color: white;
padding: 12px 24px;
border: none;
border-radius: 8px;
font-weight: 600;
cursor: pointer;
">
Login with Mixera ID
</button>
<script>
const CLIENT_ID = 'your_client_id';
const REDIRECT_URI = 'https://yoursite.com/callback';
const API_BASE = 'https://mixera.pro';
function loginWithMixera() {
const state = Math.random().toString(36).substring(7);
sessionStorage.setItem('oauth_state', state);
const authUrl = `${API_BASE}/api/oauth/authorize?` +
`client_id=${CLIENT_ID}&` +
`redirect_uri=${encodeURIComponent(REDIRECT_URI)}&` +
`response_type=code&` +
`state=${state}`;
window.location.href = authUrl;
}
// On your callback page:
async function handleCallback() {
const params = new URLSearchParams(window.location.search);
const code = params.get('code');
const state = params.get('state');
// Verify state
if (state !== sessionStorage.getItem('oauth_state')) {
alert('Invalid state parameter');
return;
}
// Exchange code for token (do this server-side in production!)
const response = await fetch(`${API_BASE}/api/oauth/token`, {
method: 'POST',
headers: { 'Content-Type': 'application/json' },
body: JSON.stringify({
client_id: CLIENT_ID,
client_secret: 'your_client_secret', // Keep secret server-side!
code: code,
redirect_uri: REDIRECT_URI,
grant_type: 'authorization_code'
})
});
const data = await response.json();
console.log('User:', data.user);
}
</script>
Express.js server implementation:
const express = require('express');
const axios = require('axios');
const app = express();
const CLIENT_ID = process.env.MIXERA_CLIENT_ID;
const CLIENT_SECRET = process.env.MIXERA_CLIENT_SECRET;
const REDIRECT_URI = 'https://yoursite.com/auth/callback';
const API_BASE = 'https://mixera.pro';
// Route to initiate OAuth flow
app.get('/auth/mixera', (req, res) => {
const state = Math.random().toString(36).substring(7);
req.session.oauthState = state;
const authUrl = `${API_BASE}/api/oauth/authorize?` +
`client_id=${CLIENT_ID}&` +
`redirect_uri=${encodeURIComponent(REDIRECT_URI)}&` +
`response_type=code&` +
`state=${state}`;
res.redirect(authUrl);
});
// OAuth callback route
app.get('/auth/callback', async (req, res) => {
const { code, state } = req.query;
// Verify state
if (state !== req.session.oauthState) {
return res.status(400).send('Invalid state');
}
try {
// Exchange code for token
const response = await axios.post(`${API_BASE}/api/oauth/token`, {
client_id: CLIENT_ID,
client_secret: CLIENT_SECRET,
code,
redirect_uri: REDIRECT_URI,
grant_type: 'authorization_code'
});
const { user, access_token } = response.data;
// Create session or JWT for the user
req.session.user = user;
res.redirect('/dashboard');
} catch (error) {
console.error('OAuth error:', error.response?.data);
res.status(500).send('Authentication failed');
}
});
app.listen(3000);
Flask server implementation:
from flask import Flask, redirect, request, session, url_for
import requests
import secrets
import os
app = Flask(__name__)
app.secret_key = os.urandom(24)
CLIENT_ID = os.environ.get('MIXERA_CLIENT_ID')
CLIENT_SECRET = os.environ.get('MIXERA_CLIENT_SECRET')
REDIRECT_URI = 'https://yoursite.com/auth/callback'
API_BASE = 'https://mixera.pro'
@app.route('/auth/mixera')
def login():
state = secrets.token_urlsafe(16)
session['oauth_state'] = state
auth_url = (
f"{API_BASE}/api/oauth/authorize?"
f"client_id={CLIENT_ID}&"
f"redirect_uri={REDIRECT_URI}&"
f"response_type=code&"
f"state={state}"
)
return redirect(auth_url)
@app.route('/auth/callback')
def callback():
code = request.args.get('code')
state = request.args.get('state')
# Verify state
if state != session.get('oauth_state'):
return 'Invalid state', 400
# Exchange code for token
response = requests.post(
f"{API_BASE}/api/oauth/token",
json={
'client_id': CLIENT_ID,
'client_secret': CLIENT_SECRET,
'code': code,
'redirect_uri': REDIRECT_URI,
'grant_type': 'authorization_code'
}
)
if response.status_code != 200:
return 'Authentication failed', 500
data = response.json()
user = data['user']
# Store user in session
session['user'] = user
return redirect('/dashboard')
if __name__ == '__main__':
app.run(debug=True)
Error Responses
| Error Code | Description |
|---|---|
invalid_client |
Client ID or secret is invalid |
invalid_grant |
Authorization code is invalid or expired |
invalid_redirect_uri |
Redirect URI doesn't match registered URIs |
app_not_approved |
Your app is pending review or was denied |
access_denied |
User denied the authorization request |
Security Best Practices
- Keep your client secret secure. Never expose it in client-side code. Always make token exchange requests from your server.
- Always use HTTPS for your redirect URIs in production (localhost is allowed for development).
- Validate the state parameter to prevent CSRF attacks. Generate a unique state for each authorization request.
- Store tokens securely. Use HTTP-only cookies or secure server-side sessions.
- Handle errors gracefully. Don't expose detailed error messages to end users.
Need Help?
The Open Communication Protocol (OCP) standardizes communication between MIXERA hardware, accessories, and cloud services.
OCP API Status
Checking...
-
-
-
-
-
-
Table of Contents
1 Goals & Overview
Purpose
Standardize how the DJ controller communicates with:
- Cloud services (telemetry, stats, remote config)
- Connected PC (DAW, MIDI, GUI applications)
- Connected accessories (fader modules, jog wheels, extension PCBs)
Core Principles
- Simple, human-readable message format (JSON) with optional binary extension
- Explicit handshake: Exchange of Serial Number (SN) and Model Number (MN). Missing either allows usage — but with warning
- All cloud connections encrypted (minimum TLS 1.3). Sensitive data only transmitted pseudonymized
- Versioning and compatibility checks before executing critical commands
2 Actors & Transport Layers
Actors
e.g., Raspberry Pi 4 in the device
Motor fader boards, encoders, extensions
DAW, editor, debugging tools
Telemetry, auth, config, updates
Supported Transport Layers
| Connection | Transport Options |
|---|---|
| Controller ↔ Accessory | USB CDC (Serial), I²C/SPI (board-level), UART over GPIO. Optional: MIDI over USB / HID |
| Controller ↔ PC | USB (MIDI/CDC/HID) or WebSocket / TCP over LAN |
| Controller ↔ Cloud | HTTPS (REST), WebSocket over TLS, or MQTT over TLS (TLS 1.3 mandatory) |
Design Decision: Standardize on JSON over framed transport (e.g., length-prefixed), with optional CBOR/binary fallback for high performance.
3 Identification & Handshake
Goal: Ensure both sides know each other's SN & MN.
Principles
- Every unit has:
serial_number(globally unique),model_number,firmware_version(semver) - Handshake always at session start (e.g., after USB connect or TCP connect)
- If SN or MN is missing, handshake still proceeds — but the other side receives
compatibility_warning
Handshake Sequence
Connection established (USB serial open / TCP accept)
Both sides send HELLO with identity:
{
"type": "HELLO",
"payload": {
"serial_number": "MXR-20250701-000123",
"model_number": "MXR-DJCTRL-v2",
"firmware_version": "1.3.0",
"protocol_version": "1.0"
}
}
Receiver validates: known model? compatible protocol_version? (for Cloud: TLS session already established)
Response HELLO_ACK:
{
"type": "HELLO_ACK",
"payload": {
"accepted": true,
"compatibility": "FULL", // FULL | PARTIAL | UNKNOWN
"warnings": [],
"server_time": "2025-12-08T15:42:00Z"
}
}
Extended Authentication (Cloud)
Controller ↔ Cloud: After HELLO, use mTLS (client cert) or JWT-based auth.
Recommendation: Mutual TLS with device client certificate (provisioned in production). Fallback: token-based with rotating keys via PKI.
4 Message Types & Format
Base Format
{
"id": "uuid-v4",
"type": "EVENT" | "CMD" | "REQ" | "RESP" | "HEARTBEAT",
"ts": "2025-12-08T15:42:01Z",
"from": {"role":"controller","serial":"..."},
"to": {"role":"cloud"|"pc"|"accessory","serial":"..."},
"payload": { ... }
}
Message Types
HELLO/HELLO_ACK
— Handshake
CMD
— Control commands (e.g., SET_FADER_POS)
EVENT
— State changes (e.g., FADER_MOVED)
REQ/RESP
— Synchronous queries (e.g., GET_FIRMWARE)
TELEMETRY
— Regular stats to cloud
OTA
— Update commands (signed metadata + URL)
LOG
— Log messages (on demand)
Framing / Binary
- Local (Serial): length-prefixed JSON recommended (4-byte length + payload)
- High performance: CBOR/MsgPack optional, but JSON as baseline
5 Compatibility Check (Model Number)
MN determines compatibility: Controller holds compatibility matrix (model → supported features & firmware ranges).
Compatibility Levels
FULL
All features available, proceed normally
PARTIAL
Some features disabled; continue with warning
UNKNOWN
Proceed but mark telemetry as "unverified"
UI Behavior: Visible warning with option "Continue (unsafe)" or "Disconnect".
6 Warnings & Fallback Policy
When Serial Number is Missing
- Functionality: Full operation possible (if no security-critical functions)
- Policy: User-visible warning; cloud telemetry tagged
serial_missing - Reasoning: Allows developer boards & third-party accessories but retains traceability
When Model Number is Incompatible
- If critical mismatch (e.g., incompatible protocol version for motor control) → disable those features
- Otherwise → operate with reduced functionality
Warning Codes
| Code | Description |
|---|---|
W001 |
serial_missing |
W002 |
model_mismatch |
W003 |
protocol_version_mismatch |
W004 |
uncertified_certificate |
7 Cloud Security & Privacy (Mandatory)
- All cloud connections: TLS 1.3 mandatory, HTTP/2 optional
- Auth: Prefer mTLS (client cert) for device identity. Alternative: JWT signed by device private key; rotate tokens periodically
- Data minimization: Send only required telemetry (e.g., anonymize user IDs)
- Telemetry at rest: Encrypted (AES-256) and access-controlled
- PII policy: Never include owner email/name in periodic stats by default
- Audit logging for config changes & OTA
8 Telemetry / Stats Schema
Minimal Telemetry Event
{
"type": "TELEMETRY",
"payload": {
"device": {
"serial": "MXR-...",
"model": "MXR-DJCTRL-v2",
"fw": "1.3.0"
},
"uptime_seconds": 3600,
"events": {
"fader_moves": 1234,
"cpu_temp_c": 52.3
},
"health": {
"battery": 98,
"errors": []
}
}
}
- Frequency: Configurable (default: 1×/minute). Aggressive sampling only if user opted-in
- Bulk upload: Batch events with compression (gzip) and send over TLS
9 Auth & Key Management
- Device provisioning: Unique device private key + certificate signed by your CA
- Key rotation: Support for cert revocation via CRL/OCSP
- Device compromise: Support remote revoke & factory reset via cloud command
- Accessories without secure element: Mark as
untrusted_accessoryin cloud telemetry
10 OTA & Firmware Updates
- Update manifest signed (Ed25519 / RSA-4096)
- Controller verifies signature before applying
- Incompatibility check using MN +
min_fw_versionin manifest - Rollback plan and atomic update procedure
11 Error Codes, Retries & QoS
Standard Error Envelope
{ "code": 4001, "message": "MISSING_SERIAL", "fatal": false }
- Retries: Exponential backoff for network ops; for control commands prefer ACK/NAK pattern
- Heartbeat: Every 10s default; cloud expects at least 1/min
12 State Machine
On error → ERROR → possible RECOVERY or DISCONNECTED
13 Example: Local Fader Move
Fader board → Controller:
{
"type": "EVENT",
"payload": {"event": "FADER_MOVE", "chan": 3, "pos": 0.734}
}
Controller processes and forwards to PC GUI and (sampled) to Cloud:
{
"type": "TELEMETRY",
"payload": {
"events": [{"event": "FADER_MOVE", "chan": 3, "pos": 0.734, "ts": "..."}]
}
}
All cloud messages via HTTPS POST /v1/telemetry with TLS + client cert.
14 Backward / Forward Compatibility & Versioning
- Protocol uses
protocol_version(semantic major). Major changes increment major and trigger compatibility checks - Add
feature_flagsarray in HELLO to indicate supported optional features
15 UI/UX Recommendations for Warnings
- Warning color: Amber; short message: "Accessory unverified — some features may be limited. Continue?"
- If user continues, log consent in local device & cloud (timestamp + user action)
- Provide "trust this accessory" flow: user can accept and sign the accessory locally (store to whitelist)
16 Testing & Compliance Checklist
- Handshake tests: missing SN, missing MN, malformed JSON
- Security tests: TLS downgrade attempted, invalid cert, revoked cert
- Interoperability: test legacy accessories & new firmware combinations
- Telemetry privacy: verify PII absence
- OTA test: interrupt during update and verify rollback
17 Implementation Roadmap
18 Complete Handshake Example
Controller sends HELLO:
{
"id": "550e8400-e29b-41d4-a716-446655440000",
"type": "HELLO",
"ts": "2025-12-08T15:42:01Z",
"from": {"role": "controller", "serial": "MXR-20250701-000123"},
"to": {"role": "accessory"},
"payload": {
"model_number": "MXR-DJCTRL-v2",
"firmware_version": "1.3.0",
"protocol_version": "1.0",
"feature_flags": ["motorized_faders", "ota"]
}
}
Accessory responds HELLO_ACK (with missing serial):
{
"id": "...",
"type": "HELLO_ACK",
"ts": "2025-12-08T15:42:01Z",
"payload": {
"accepted": true,
"compatibility": "PARTIAL",
"warnings": [{"code": "W001", "message": "serial_missing"}]
}
}
Key Takeaways
- Always HELLO with SN + MN — but allow fallback with warning
- Cloud: Always TLS 1.3; prefer mTLS + signed OTA
- JSON framing as baseline; binary optional
- Version and compatibility checks before critical actions
My Devices
Preview Mode
This section displays mock data for demonstration purposes. Device registration and management features are coming soon.
Manage your registered MIXERA devices, view warranty information, and download software updates.
Register New Device
No Devices Registered
Register your MIXERA device to access warranty info, software updates, and more.
Downloads & Resources
Select a device to view its specific firmware, manuals, and replacement parts.
Device Lock
Lock this device if stolen to prevent unauthorized use
Remove Device
Remove this device from your account
Remove Device
This will remove from your account. You can re-register it later.
Sustainability Dashboard PREVIEW
Track your environmental impact and see how MIXERA helps offset CO₂ emissions through tree planting.
Energy Used
By your MIXERA devices
0 kWh
≈ 0 kg CO₂ produced
Trees Planted
For your account
0 trees
≈ 0 kg CO₂ absorbed/year
Progress to Next Tree
Use 100 more kWh to plant another tree! 🌱
Your Forest
Each tree represents a real tree planted through our partnership with One Tree Planted 🌍
Your CO₂ Balance
Plant more trees to offset your carbon footprint!
MIXERA Community Impact
Together we're making a difference
0
Trees planted
0
Forests created
0
kg CO₂ absorbed/year
Community Forest Preview
Each 🌲 represents 10 trees (1 forest)
What MIXERA Does for the Planet
How it works
For every 100 kWh used by your MIXERA devices, we plant a tree through our partnership with One Tree Planted. Each tree absorbs approximately 22 kg of CO₂ per year, helping to offset your environmental impact.
Danger Zone
Export Your Data
Download a copy of all data associated with your account.
Delete Account
Permanently delete your Mixera account and all associated data. This action cannot be undone.