API Reference
REST API for integrating Jyv Desktop with your applications, workflows, and automation tools.
Overview
The Jyv Desktop API allows you to programmatically control audio settings, switch profiles, and integrate Jyv with your custom applications and workflows.
Base URL: http://localhost:3842/api/v1
The API runs locally on your machine. For remote access, see our Enterprise documentation.
Common use cases:
- Build custom dashboards for audio control
- Integrate with home automation systems
- Create Stream Deck plugins
- Automate audio switching based on external events
- Build team collaboration tools
Authentication
Jyv Desktop API uses API keys for authentication. Generate your key in the application:
Generate API key
Open Jyv Desktop → Settings → Developer → API Access
Click Generate New API Key and copy the key.
Use in requests
Include the API key in the
Authorizationheader of all requests:curl -X GET http://localhost:3842/api/v1/profiles \ -H "Authorization: Bearer YOUR_API_KEY" \ -H "Content-Type: application/json"
Security: API keys grant full control over Jyv Desktop. Never commit them to version control or share them publicly. Use environment variables:
# .env file
JYV_API_KEY=your_api_key_hereProfiles API
List all profiles
Get all saved audio profiles:
GET /profiles{
"profiles": [
{
"id": "prof_abc123",
"name": "Work Calls",
"active": true,
"settings": {
"noiseSuppressionLevel": 80,
"voiceEnhancement": true
},
"createdAt": "2025-12-01T10:00:00Z",
"updatedAt": "2025-12-08T15:30:00Z"
}
]
}Get active profile
GET /profiles/activeCreate new profile
POST /profiles
{
"name": "Gaming",
"settings": {
"noiseSuppressionLevel": 60,
"voiceEnhancement": false,
"appVolumes": {
"discord.exe": 100,
"game.exe": 70,
"spotify.exe": 40
}
},
"automation": {
"triggers": [
{
"type": "app_launch",
"app": "steam.exe"
}
]
}
}{
"id": "prof_xyz789",
"name": "Gaming",
"created": true
}Activate profile
POST /profiles/{profile_id}/activatecurl -X POST http://localhost:3842/api/v1/profiles/prof_abc123/activate \
-H "Authorization: Bearer YOUR_API_KEY"Update profile
PATCH /profiles/{profile_id}
{
"name": "Work Calls (Updated)",
"settings": {
"noiseSuppressionLevel": 85
}
}Delete profile
DELETE /profiles/{profile_id}Audio Control API
Get current audio state
GET /audio/state{
"masterVolume": 80,
"micMuted": false,
"runningApps": [
{
"name": "spotify.exe",
"volume": 65,
"muted": false,
"outputDevice": "Headphones"
},
{
"name": "discord.exe",
"volume": 100,
"muted": false,
"outputDevice": "Headphones"
}
]
}Set app volume
POST /audio/volume
{
"app": "spotify.exe",
"volume": 50
}Mute/unmute app
POST /audio/mute
{
"app": "spotify.exe",
"muted": true
}Set microphone state
POST /audio/microphone
{
"muted": false,
"noiseSuppressionLevel": 70,
"voiceEnhancement": true
}Route app to output device
POST /audio/route
{
"app": "discord.exe",
"outputDevice": "Headphones"
}Webhooks
Configure Jyv to send HTTP requests when events occur:
Available events
profile.switched- When profile changesapp.volume_changed- When app volume is adjustedmicrophone.muted- When mic is muted/unmutedmeeting.started- When Jyv detects a meeting startingmeeting.ended- When meeting ends
Configure webhook
POST /webhooks
{
"url": "https://your-server.com/jyv-events",
"events": ["profile.switched", "meeting.started"],
"secret": "your_webhook_secret"
}Webhook payload example
{
"event": "profile.switched",
"timestamp": "2025-12-08T15:30:00Z",
"data": {
"previousProfile": "Work Calls",
"currentProfile": "Gaming",
"triggeredBy": "app_launch",
"trigger": "steam.exe"
}
}Rate Limits
API requests are rate limited to ensure system stability:
- Free tier: 60 requests/minute
- Pro tier: 300 requests/minute
- Enterprise: Custom limits (contact sales)
Rate limit information is included in response headers:
X-RateLimit-Limit: 60
X-RateLimit-Remaining: 45
X-RateLimit-Reset: 1702047600When rate limited, you'll receive a 429 status code:
{
"error": "Rate limit exceeded",
"retryAfter": 30
}SDKs & Libraries
Official SDKs
npm install @jyv/desktop-sdk
import { JyvDesktop } from '@jyv/desktop-sdk';
const jyv = new JyvDesktop({ apiKey: process.env.JYV_API_KEY });
// Switch profile
await jyv.profiles.activate('prof_abc123');
// Set app volume
await jyv.audio.setVolume('spotify.exe', 50);
// Listen for events
jyv.on('profile.switched', (data) => {
console.log('Switched to:', data.currentProfile);
});pip install jyv-desktop
from jyv_desktop import JyvDesktop
jyv = JyvDesktop(api_key=os.environ['JYV_API_KEY'])
# Switch profile
jyv.profiles.activate('prof_abc123')
# Set app volume
jyv.audio.set_volume('spotify.exe', 50)
# Get current state
state = jyv.audio.get_state()
print(state['runningApps'])Community libraries
- Go:
github.com/jyv-community/jyv-go - Rust:
crates.io/crates/jyv-desktop - C#:
NuGet: JyvDesktop.NET
Community libraries are maintained by users. For official support, use JavaScript or Python SDKs.
Example integrations
Check out our examples repository for:
- Stream Deck plugin
- Home Assistant integration
- Elgato Wave Link alternative
- Discord bot for team audio control
- OBS script for automatic profile switching
Was this helpful?
Need more help?
Can't find what you're looking for? Our support team is here to help.