Schema
Here’s the data contract for submitting a release. The MVP fields below remain the hard runtime requirements for backwards compatibility. New REST/MCP clients should also provide DSP selection, label, C/P copyright credits, track type, and role credits when collecting metadata.
You can fetch the schema in two ways (after MCP authentication):
get_release_schematoolresources/readformcp://schemas/release-required
Before building payloads, agents should also read mcp://docs/metadata-rules-hitlist (or call get_metadata_rules) for policy rules that are not all expressed in the JSON schema: generic artist names, UPC, AI disclosure, cover songs, and more.
Most clients load resources automatically after resources/list, but you can always call them directly if you need a fresh copy.
Release Fields
| Field | Required | Notes |
|---|---|---|
title | Yes | Release title |
primary_artist_name | Yes | Main artist |
genre | Yes | Music genre |
release_date | Yes | Format: YYYY-MM-DD |
cover_art_file_url | Yes | From upload endpoint |
distribution_store_ids | New clients | Non-empty supported DSP store IDs, or null for all supported stores |
label | New clients | Record label name |
sub_genre | No | Optional second genre |
audio_language | No | Release audio language ISO code, e.g. en |
metadata_language | No | Release metadata language ISO code, e.g. en |
pline_year / pline_owner | New clients | P-line copyright credit |
cline_year / cline_owner | New clients | C-line copyright credit |
contributors | New clients | Role credits such as Producer and Engineer |
artist_locals | No | Localized artist names using Revelator languageId |
Track Fields
| Field | Required | Notes |
|---|---|---|
title | Yes | No placeholders |
audio_file_url | Yes | From upload endpoint |
explicit_flag | Yes | Boolean |
writers | Yes | Array, at least one |
track_type | New clients | original, cover, or public_domain |
isrc | No | Optional valid ISRC |
language | No | Track language ISO code, e.g. en |
lyrics | No | Plain text lyrics |
pline_year / pline_owner | New clients | Track-level P-line copyright credit |
cline_year / cline_owner | New clients | Track-level C-line copyright credit |
contributors | New clients | Role credits such as Producer and Engineer |
artist_locals | No | Localized artist names using Revelator languageId |
Validation Rules
- Single tracks:
track.titlemust matchrelease.title, andtrack.title_versionmust matchrelease.title_version - Writers: Each
writer.namemust be a full legal name (first + last) - Explicit flag: Must be boolean
trueorfalse - Primary artist: Must be a real artist/band name, not generic labels like “Christmas Music” or “Yoga Music” (see Agent Setup /
mcp://docs/metadata-rules-hitlist) - UPC: Never user-supplied, ONCE generates at distribution
- DSP selection: New clients should set
release.distribution_store_idsfromget_distribution_stores; usenullfor all supported stores and never send an empty array - Remix: Do not send
remixastrack_type; usetitle_version: "Remix"and aRemixercontributor - Localization:
artist_localsis supported for artist names; localized release/track title and version fields are not persisted yet
AI Content & Billing
Every audio upload is run through the Vobile/Pex AI Song Detector. You can also declare AI content explicitly on a track:
| Field | Type | Notes |
|---|---|---|
contains_ai | boolean | Set to true if the track contains AI-generated content. Maps to Revelator track property 8 (Includes AI). |
Use the detect_audio_ai tool to read the cached detection result (predicted model + confidence) before submission.
Billing is 1 credit per human song and 2 credits per AI-detected song on every surface (regular MCP, AIMD, in-app upload, OMG generation). Provenance is recorded for analytics but does not change the rate.
Example Payload
{
"release": {
"title": "My Release",
"primary_artist_name": "Artist Name",
"genre": "Pop",
"sub_genre": "Dance Pop",
"release_date": "2026-02-01",
"label": "Artist Name Records",
"audio_language": "en",
"metadata_language": "en",
"distribution_store_ids": [1, 9, 13, 319],
"pline_year": "2026",
"pline_owner": "Artist Name Records",
"cline_year": "2026",
"cline_owner": "Artist Name Records",
"cover_art_file_url": "/api/files/cover-art/USER_ID/cover.jpg",
"contributors": [
{ "name": "First Producer", "role": "Producer" },
{ "name": "First Engineer", "role": "Engineer" }
]
},
"tracks": [
{
"title": "My Release",
"primary_artist_name": "Artist Name",
"audio_file_url": "/api/files/audio/USER_ID/track.wav",
"explicit_flag": false,
"track_type": "original",
"language": "en",
"pline_year": "2026",
"pline_owner": "Artist Name Records",
"cline_year": "2026",
"cline_owner": "Artist Name Records",
"writers": [{ "name": "First Last" }],
"contributors": [
{ "name": "First Producer", "role": "Producer" },
{ "name": "First Engineer", "role": "Engineer" }
]
}
]
}