Response examples
Every endpoint listed above has a concrete JSON response example below.
Examples are shortened for readability. Real responses can contain more records and fields, while IDs, counts, URLs, and dates depend on your data and access rights.
Account and aggregated catalog results
GET/api/mobile/me
Example 200 response
{
"id": 42,
"username": "ada",
"email": "ada@example.com",
"roles": [
"ROLE_USER"
],
"personas": [
"musician"
],
"favoriteInstrumentIds": [
10
],
"locale": "en",
"isVerified": true,
"tier": "premium",
"subscriptionPlan": "premium",
"subscriptionTier": "premium",
"subscriptionPlanCode": "premium-monthly",
"groupQuota": 10,
"canMakePrivate": true,
"canUsePaidFeatures": true
}
GET/api/mobile/music-bootstrap
Example 200 response
{
"meta": {
"includes": [
"keys",
"key_scales",
"instruments"
],
"count": {
"keys": 24,
"key_scales": 202,
"instruments": 33
}
},
"data": {
"keys": [
{
"id": 8,
"baseTone": {
"id": 1,
"name": "C",
"midi": 48,
"solfege": "do"
},
"alteration": 0,
"accidentals": 0,
"signature": "",
"frequency": 415.305,
"color": "#ff0000"
}
],
"key_scales": [
{
"id": 1,
"keyId": 8,
"name": "Major (Ionian)",
"type": "scale",
"signature": "1,2,2,1,2,2,2",
"fullName": "C Major (Ionian)",
"keyToneName": "C",
"canonicalPath": "\/chords-and-scales\/c\/major-ionian",
"tones": [
{
"intervalId": 1,
"intervalAbbr": "1",
"noteName": "C",
"midiNumber": 48
},
{
"intervalId": 3,
"intervalAbbr": "2",
"noteName": "D",
"midiNumber": 50
}
]
}
],
"instruments": [
{
"id": 10,
"name": "Bass (4-string)",
"slug": "bass-4-string",
"familyRouteKey": "fretboard",
"familyCode": "FRETBOARD",
"familyName": "Fretboard",
"isPublic": true,
"isPublished": true,
"musicSystemIds": [
1
],
"allowedPlaybackCapabilities": [
"monotonal",
"polytonal"
]
}
]
}
}
GET/api/mobile/entities?include=keys,intervals,instruments
Example 200 response
{
"meta": {
"includes": [
"keys",
"intervals",
"instruments"
],
"count": {
"keys": 24,
"intervals": 25,
"instruments": 33
}
},
"data": {
"keys": [
{
"id": 8,
"baseTone": {
"id": 1,
"name": "C",
"midi": 48,
"solfege": "do"
},
"alteration": 0,
"accidentals": 0,
"signature": "",
"frequency": 415.305,
"color": "#ff0000"
}
],
"intervals": [
{
"id": 5,
"name": "Major Third",
"abbreviation": "M3",
"jazzAbbreviation": "3",
"semitones": 4,
"color": "#FFFF00",
"degree": "III"
}
],
"instruments": [
{
"id": 10,
"name": "Bass (4-string)",
"slug": "bass-4-string",
"familyRouteKey": "fretboard",
"familyCode": "FRETBOARD",
"familyName": "Fretboard",
"isPublic": true,
"isPublished": true,
"musicSystemIds": [
1
],
"allowedPlaybackCapabilities": [
"monotonal",
"polytonal"
]
}
]
}
}
GET/api/mobile/circular-tracks?limit=1
Example 200 response
{
"meta": {
"resource": "circular_tracks",
"count": 1,
"total": 148,
"limit": 1
},
"data": [
{
"id": "rhythm:148",
"kind": "rhythm",
"name": "Circular Dubstep Half Time",
"isPublic": true,
"transport": {
"bpm": 140,
"ppq": 960,
"beatsPerBar": 4,
"beatUnit": 4
},
"ringCount": 4,
"circularTrack": {
"id": "standalone-circular-track",
"type": "CIRCULAR",
"rings": []
},
"source": {
"type": "rhythm",
"rhythmId": 148,
"slug": "circular-dubstep-half-time"
}
}
]
}
Mobile collection and item results
Pitch keys.
GET/api/mobile/keys — Collection result
{
"meta": {
"resource": "keys",
"count": 1,
"filters": []
},
"data": [
{
"id": 8,
"baseTone": {
"id": 1,
"name": "C",
"midi": 48,
"solfege": "do"
},
"alteration": 0,
"accidentals": 0,
"signature": "",
"frequency": 415.305,
"color": "#ff0000"
}
]
}
GET/api/mobile/keys/8 — Item result
{
"meta": {
"resource": "key",
"count": 7,
"filters": []
},
"data": {
"id": 8,
"baseTone": {
"id": 1,
"name": "C",
"midi": 48,
"solfege": "do"
},
"alteration": 0,
"accidentals": 0,
"signature": "",
"frequency": 415.305,
"color": "#ff0000"
}
}
Musical intervals.
GET/api/mobile/intervals — Collection result
{
"meta": {
"resource": "intervals",
"count": 1,
"filters": []
},
"data": [
{
"id": 5,
"name": "Major Third",
"abbreviation": "M3",
"jazzAbbreviation": "3",
"semitones": 4,
"color": "#FFFF00",
"degree": "III"
}
]
}
GET/api/mobile/intervals/5 — Item result
{
"meta": {
"resource": "interval",
"count": 7,
"filters": []
},
"data": {
"id": 5,
"name": "Major Third",
"abbreviation": "M3",
"jazzAbbreviation": "3",
"semitones": 4,
"color": "#FFFF00",
"degree": "III"
}
}
Key and scale relationships.
GET/api/mobile/key-scales — Collection result
{
"meta": {
"resource": "key_scales",
"count": 1,
"filters": []
},
"data": [
{
"id": 1,
"keyId": 8,
"name": "Major (Ionian)",
"type": "scale",
"signature": "1,2,2,1,2,2,2",
"fullName": "C Major (Ionian)",
"keyToneName": "C",
"canonicalPath": "\/chords-and-scales\/c\/major-ionian",
"tones": [
{
"intervalId": 1,
"intervalAbbr": "1",
"noteName": "C",
"midiNumber": 48
},
{
"intervalId": 3,
"intervalAbbr": "2",
"noteName": "D",
"midiNumber": 50
}
]
}
]
}
GET/api/mobile/key-scales/1 — Item result
{
"meta": {
"resource": "key_scale",
"count": 9,
"filters": []
},
"data": {
"id": 1,
"keyId": 8,
"name": "Major (Ionian)",
"type": "scale",
"signature": "1,2,2,1,2,2,2",
"fullName": "C Major (Ionian)",
"keyToneName": "C",
"canonicalPath": "\/chords-and-scales\/c\/major-ionian",
"tones": [
{
"intervalId": 1,
"intervalAbbr": "1",
"noteName": "C",
"midiNumber": 48
},
{
"intervalId": 3,
"intervalAbbr": "2",
"noteName": "D",
"midiNumber": 50
}
]
}
}
Visible harmonies.
GET/api/mobile/harmonies — Collection result
{
"meta": {
"resource": "harmonies",
"count": 1,
"filters": []
},
"data": [
{
"id": 42,
"name": "Autumn Leaves",
"ownerId": 3,
"ownerUsername": "jolymusic",
"isPublic": true,
"events": [
{
"id": 101,
"startTick": 0,
"durationTick": 3840,
"keyId": 8,
"scaleId": 1,
"label": "Cmaj7"
}
],
"sections": [
{
"id": 12,
"sectionType": "A",
"label": "Theme A",
"position": 0,
"repeatCount": 2
}
],
"ownerTags": [
"jazz"
],
"userTags": []
}
]
}
GET/api/mobile/harmonies/42 — Item result
{
"meta": {
"resource": "harmony",
"count": 9,
"filters": []
},
"data": {
"id": 42,
"name": "Autumn Leaves",
"ownerId": 3,
"ownerUsername": "jolymusic",
"isPublic": true,
"events": [
{
"id": 101,
"startTick": 0,
"durationTick": 3840,
"keyId": 8,
"scaleId": 1,
"label": "Cmaj7"
}
],
"sections": [
{
"id": 12,
"sectionType": "A",
"label": "Theme A",
"position": 0,
"repeatCount": 2
}
],
"ownerTags": [
"jazz"
],
"userTags": []
}
}
Circular rhythms.
GET/api/mobile/circular-rhythms — Collection result
{
"meta": {
"resource": "circular_rhythms",
"count": 1,
"filters": []
},
"data": [
{
"id": 148,
"name": "Circular Dubstep Half Time",
"slug": "circular-dubstep-half-time",
"isPublic": true,
"ownerTags": [
"dubstep",
"half-time"
],
"state": {
"bpm": 140,
"ppq": 960,
"beatsPerBar": 4
},
"updatedAt": "2026-06-09T00:30:30+00:00"
}
]
}
GET/api/mobile/circular-rhythms/148 — Item result
{
"meta": {
"resource": "circular_rhythm",
"count": 7,
"filters": []
},
"data": {
"id": 148,
"name": "Circular Dubstep Half Time",
"slug": "circular-dubstep-half-time",
"isPublic": true,
"ownerTags": [
"dubstep",
"half-time"
],
"state": {
"bpm": 140,
"ppq": 960,
"beatsPerBar": 4
},
"updatedAt": "2026-06-09T00:30:30+00:00"
}
}
Sound engine metadata.
GET/api/mobile/sound-engines — Collection result
{
"meta": {
"resource": "sound_engines",
"count": 1,
"filters": []
},
"data": [
{
"id": 1,
"code": "tone",
"label": "Tone.js",
"description": "Browser synthesis and sampling engine",
"isEnabled": true,
"defaultConfig": {
"playMode": "pitched"
},
"supportedPlaybackCapabilities": [
"monotonal",
"polytonal",
"percussion"
]
}
]
}
GET/api/mobile/sound-engines/1 — Item result
{
"meta": {
"resource": "sound_engine",
"count": 7,
"filters": []
},
"data": {
"id": 1,
"code": "tone",
"label": "Tone.js",
"description": "Browser synthesis and sampling engine",
"isEnabled": true,
"defaultConfig": {
"playMode": "pitched"
},
"supportedPlaybackCapabilities": [
"monotonal",
"polytonal",
"percussion"
]
}
}
Visible sound presets.
GET/api/mobile/sound-presets — Collection result
{
"meta": {
"resource": "sound_presets",
"count": 1,
"filters": []
},
"data": [
{
"id": 29,
"name": "Tone.js \u2022 Realistic Acoustic Kit",
"color": "#e67e22",
"isPublic": true,
"isKit": true,
"playbackCapability": "percussion",
"engine": {
"id": 1,
"code": "tone",
"label": "Tone.js"
},
"playback": {
"engineCode": "tone",
"playMode": "percussion",
"toneInstrument": "db-tone:29"
}
}
]
}
GET/api/mobile/sound-presets/29 — Item result
{
"meta": {
"resource": "sound_preset",
"count": 8,
"filters": []
},
"data": {
"id": 29,
"name": "Tone.js \u2022 Realistic Acoustic Kit",
"color": "#e67e22",
"isPublic": true,
"isKit": true,
"playbackCapability": "percussion",
"engine": {
"id": 1,
"code": "tone",
"label": "Tone.js"
},
"playback": {
"engineCode": "tone",
"playMode": "percussion",
"toneInstrument": "db-tone:29"
}
}
}
Published articles.
GET/api/mobile/articles — Collection result
{
"meta": {
"resource": "articles",
"count": 1,
"filters": []
},
"data": [
{
"id": 17,
"title": "Understanding tonal gravity",
"slug": "understanding-tonal-gravity",
"content": "<p>Article content\u2026<\/p>",
"published": true,
"createdAt": "2026-01-12T10:00:00+00:00",
"updatedAt": "2026-06-10T14:30:00+00:00",
"tags": [
"harmony",
"theory"
]
}
]
}
GET/api/mobile/articles/17 — Item result
{
"meta": {
"resource": "article",
"count": 8,
"filters": []
},
"data": {
"id": 17,
"title": "Understanding tonal gravity",
"slug": "understanding-tonal-gravity",
"content": "<p>Article content\u2026<\/p>",
"published": true,
"createdAt": "2026-01-12T10:00:00+00:00",
"updatedAt": "2026-06-10T14:30:00+00:00",
"tags": [
"harmony",
"theory"
]
}
}
Visible media metadata.
GET/api/mobile/media-assets — Collection result
{
"meta": {
"resource": "media_assets",
"count": 1,
"filters": []
},
"data": [
{
"id": 91,
"title": "Practice backing track",
"nameSlug": "practice-backing-track",
"kind": "audio",
"audience": "public",
"mimeType": "audio\/mpeg",
"path": "\/uploads\/media\/practice-backing-track.mp3",
"durationMs": 182000,
"isPublic": true
}
]
}
GET/api/mobile/media-assets/91 — Item result
{
"meta": {
"resource": "media_asset",
"count": 9,
"filters": []
},
"data": {
"id": 91,
"title": "Practice backing track",
"nameSlug": "practice-backing-track",
"kind": "audio",
"audience": "public",
"mimeType": "audio\/mpeg",
"path": "\/uploads\/media\/practice-backing-track.mp3",
"durationMs": 182000,
"isPublic": true
}
}
Instrument catalog.
GET/api/mobile/instruments — Collection result
{
"meta": {
"resource": "instruments",
"count": 1,
"filters": []
},
"data": [
{
"id": 10,
"name": "Bass (4-string)",
"slug": "bass-4-string",
"familyRouteKey": "fretboard",
"familyCode": "FRETBOARD",
"familyName": "Fretboard",
"isPublic": true,
"isPublished": true,
"musicSystemIds": [
1
],
"allowedPlaybackCapabilities": [
"monotonal",
"polytonal"
]
}
]
}
GET/api/mobile/instruments/10 — Item result
{
"meta": {
"resource": "instrument",
"count": 10,
"filters": []
},
"data": {
"id": 10,
"name": "Bass (4-string)",
"slug": "bass-4-string",
"familyRouteKey": "fretboard",
"familyCode": "FRETBOARD",
"familyName": "Fretboard",
"isPublic": true,
"isPublished": true,
"musicSystemIds": [
1
],
"allowedPlaybackCapabilities": [
"monotonal",
"polytonal"
]
}
}
Instrument-row catalog.
GET/api/mobile/instrument-rows — Collection result
{
"meta": {
"resource": "instrument_rows",
"count": 1,
"filters": []
},
"data": [
{
"id": 2137,
"instrumentId": 20,
"instrumentName": "Drum Kit",
"familyCode": "DRUMS",
"midi": 36,
"label": "Kick",
"x": 1,
"y": 3,
"z": 0,
"config": {
"drum": "kick",
"midi": 36,
"isPercussion": true
}
}
]
}
GET/api/mobile/instrument-rows/2137 — Item result
{
"meta": {
"resource": "instrument_row",
"count": 10,
"filters": []
},
"data": {
"id": 2137,
"instrumentId": 20,
"instrumentName": "Drum Kit",
"familyCode": "DRUMS",
"midi": 36,
"label": "Kick",
"x": 1,
"y": 3,
"z": 0,
"config": {
"drum": "kick",
"midi": 36,
"isPercussion": true
}
}
}
Music-system catalog.
GET/api/mobile/music-systems — Collection result
{
"meta": {
"resource": "music_systems",
"count": 1,
"filters": []
},
"data": [
{
"id": 1,
"name": "12-tone equal temperament",
"slug": "tet-12",
"systemType": "equal_temperament",
"octaveRatio": 2,
"divisions": 12,
"isPublic": true,
"intervals": [
{
"stepIndex": 0,
"label": "Unison",
"ratio": 1,
"cents": 0,
"color": "#FF0000"
},
{
"stepIndex": 1,
"label": "Minor Second",
"ratio": 1.059463,
"cents": 100,
"color": "#FF6600"
}
]
}
]
}
GET/api/mobile/music-systems/1 — Item result
{
"meta": {
"resource": "music_system",
"count": 8,
"filters": []
},
"data": {
"id": 1,
"name": "12-tone equal temperament",
"slug": "tet-12",
"systemType": "equal_temperament",
"octaveRatio": 2,
"divisions": 12,
"isPublic": true,
"intervals": [
{
"stepIndex": 0,
"label": "Unison",
"ratio": 1,
"cents": 0,
"color": "#FF0000"
},
{
"stepIndex": 1,
"label": "Minor Second",
"ratio": 1.059463,
"cents": 100,
"color": "#FF6600"
}
]
}
}
Resolved state for one music system.
GET/api/mobile/music-systems/1/state — Item result
{
"meta": {
"resource": "music_system_state",
"count": 5,
"filters": []
},
"data": {
"musicSystemId": 1,
"slug": "tet-12",
"divisions": 12,
"octaveRatio": 2,
"tones": [
{
"stepIndex": 0,
"label": "C",
"cents": 0,
"frequency": 261.626
},
{
"stepIndex": 1,
"label": "C\u266f",
"cents": 100,
"frequency": 277.183
}
]
}
}
Public helper results
GET/api/keys
Example 200 response
[
{
"id": 8,
"baseTone": {
"id": 1,
"name": "C",
"midi": 48,
"solfege": "do"
},
"alteration": 0,
"accidentals": 0,
"signature": "",
"frequency": 415.305,
"color": "#ff0000"
}
]
GET/api/instruments
Example 200 response
[
{
"id": 10,
"name": "Bass (4-string)",
"slug": "bass-4-string",
"familyRouteKey": "fretboard",
"familyCode": "FRETBOARD",
"familyName": "Fretboard",
"isPublic": true,
"isPublished": true,
"musicSystemIds": [
1
],
"allowedPlaybackCapabilities": [
"monotonal",
"polytonal"
]
}
]
GET/api/instruments_select
Example 200 response
{
"items": [
{
"id": 10,
"name": "Bass (4-string)",
"familyCode": "FRETBOARD",
"isPublished": true,
"musicSystemIds": [
1
],
"isFavorite": false,
"slug": "bass-4-string"
}
]
}
GET/api/instrument_rows_select?instrumentId=20
Example 200 response
{
"items": [
{
"id": 2137,
"instrumentId": 20,
"instrumentName": "Drum Kit",
"familyCode": "DRUMS",
"midi": 36,
"label": "Kick",
"x": 1,
"y": 3,
"z": 0,
"config": {
"drum": "kick",
"midi": 36,
"isPercussion": true
}
}
]
}
GET/api/drum-folders.json
Example 200 response
{
"folders": [
{
"label": "acoustic-kit",
"path": "\/samples\/drums\/acoustic-kit"
}
]
}
GET/api/drum-folder-files.json?path=/samples/drums/acoustic-kit
Example 200 response
{
"path": "\/samples\/drums\/acoustic-kit",
"files": [
{
"url": "\/samples\/drums\/acoustic-kit\/kick.wav",
"name": "kick.wav"
}
]
}