# RoEx Tonn API The RoEx Tonn API provides endpoints for audio mastering, mixing, stem separation, recombine and mastering, post-production, and analysis. Submit tracks for processing and retrieve previews or final results via download URLs. Stem separation (/separate) splits a stereo track into stems — by default vocals, drums, bass, and other; or, with separationMode "vocals_instrumental", a vocals stem plus a single instrumental backing stem; recombine (/recombine) mixes a vocal against a backing track or licensed beat using a fixed automatic recipe (with an optional +/-6dB vocal trim) and masters the result to a LOW/MEDIUM/HIGH loudness preset. Post-production endpoints support dialogue enhancement, delivery format mastering, loudness compliance checks, sidechain ducking, full multi-track mixing, and ADR-to-location matching. The API supports different musical styles, loudness presets, delivery formats, and sample rates. Registration and manual approval are required before API keys are issued. Start at https://tonn-portal.roexaudio.com/register; approval timing varies. Send X-API-Key (preferred), or the legacy key query parameter. Development keys return simulated results and do not demonstrate audio rendering. Read GET /account for balance, effective credit prices and account restrictions. Preserve each endpoint's request wrapper and enum vocabulary; do not copy genres or sample-rate types between endpoints without checking their schema. Base URL: https://tonn.roexaudio.com Authentication: X-API-Key header (preferred), or legacy key query parameter. Not Bearer auth. Registration: https://tonn-portal.roexaudio.com/register Manual approval is required before keys are issued. Timing varies; check the portal for status. If no key is available, explain registration/approval and stop retrying authentication. Development keys simulate jobs and output URLs; use a production-type test key for real audio. GET /account returns balance, reservations, effective prices, pricing availability and restrictions without charging credits. Do not interpret missing/null pricing as a zero cost. Preview compute has a cost to the service even when no credits are charged. Preserve request wrapper names, task-ID fields, enum spellings and JSON types for each operation. On HTTP 202, poll the SAME retrieval operation with the SAME task ID after Retry-After seconds. Inspect error=true even on HTTP 200: some terminal job failures use that legacy status. Do not blindly retry failed processing submissions. Final retrieval charging is task/workflow-specific; see the operation. ## Discovery https://tonn-portal.roexaudio.com/openapi.json https://tonn-portal.roexaudio.com/llm-summary.json https://tonn-portal.roexaudio.com/docs/ https://tonn-portal.roexaudio.com/docs/agent-guide ## Operations POST /mixpreview Creates a multitrack mix task preview. Doesn't consume any credits. credit_cost={"billing_stage":"none","credits":0,"requires_positive_balance":true} - multitrackData: object (required) - multitrackData.trackData: array (required) - multitrackData.trackData[]: object (required) - multitrackData.trackData[].trackURL: string (required); default="" - multitrackData.trackData[].instrumentGroup: string (required); allowed=["BASS_GROUP", "DRUMS_GROUP", "KICK_GROUP", "SNARE_GROUP", "CYMBALS_GROUP", "VOCAL_GROUP", "BACKING_VOX_GROUP", "BACKING_TRACK_GROUP", "PERCS_GROUP", "STRINGS_GROUP", "SYNTH_GROUP", "FX_GROUP", "KEYS_GROUP", "BRASS_GROUP", "E_GUITAR_GROUP", "ACOUSTIC_GUITAR_GROUP", "OTHER_GROUP1", "OTHER_GROUP2", "OTHER_GROUP3", "OTHER_GROUP4", "OTHER_GROUP5", "UNKNOWN_GROUP", "MIDS_GROUP", "TOMS_GROUP", "WOODWINDS_GROUP", "ELECTRONIC_KIT_GROUP", "ELECTRONIC_BASS_GROUP", "PADS_GROUP"]; default="DRUMS_GROUP" - multitrackData.trackData[].presenceSetting: string (required); allowed=["NORMAL", "LEAD", "BACKGROUND"]; default="NORMAL" - multitrackData.trackData[].panPreference: string (required); allowed=["NO_PREFERENCE", "LEFT", "CENTRE", "RIGHT"]; default="NO_PREFERENCE" - multitrackData.trackData[].reverbPreference: string (required); allowed=["NONE", "LOW", "MEDIUM", "HIGH"]; default="NONE" - multitrackData.musicalStyle: string (required); allowed=["ROCK_INDIE", "POP", "ACOUSTIC", "HIPHOP_GRIME", "ELECTRONIC", "REGGAE_DUB", "ORCHESTRAL", "METAL", "OTHER", "JAZZ", "LO_FI", "LATIN", "TECHNO", "HOUSE", "TRAP", "COUNTRY_ACOUSTIC", "CINEMATIC", "AFROBEAT", "K_POP", "REGGAETON"]; default="ROCK_INDIE" - multitrackData.returnUnmixedTrack: boolean (optional); default=false - multitrackData.createMaster: boolean (optional); default=false - multitrackData.returnStems: boolean (optional); default=true - multitrackData.desiredLoudness: string (optional); allowed=["LOW", "MEDIUM", "HIGH"]; default="MEDIUM" - multitrackData.gainPanOnlyMode: boolean (optional); default=false - multitrackData.sampleRate: string (optional); allowed=["44100", "48000"]; default="44100" - multitrackData.webhookURL: string (optional); default="" Responses: 200, 400, 401, 500, 403, 503 POST /retrievepreviewmix Retrieves the URL for the preview mix. Retrieving mix FX settings consumes credits. credit_cost={"billing_stage":"retrieve_fx_settings","pricing_field":"mix_settings_credits","fallback_credits":175,"variant_pricing_fields":["mix_settings_credits"],"effective_prices_url":"/account","note":"Request options and prior task purchases affect the charge. Development keys simulate processing; they do not render audio."} - multitrackData: object (required) - multitrackData.multitrackTaskId: string (required) - multitrackData.retrieveFXSettings: boolean (required); default=false Responses: 200, 202, 400, 401, 404, 500, 403, 503, 402 POST /retrievefinalmix Retrieves the URL for the final mix. credit_cost={"billing_stage":"retrieve_final","pricing_field":"final_mix_credits","fallback_credits":250,"variant_pricing_fields":["processed_stem_credits","mix_settings_credits"],"effective_prices_url":"/account","note":"Request options and prior task purchases affect the charge. Development keys simulate processing; they do not render audio."} - applyAudioEffectsData: object (required) - applyAudioEffectsData.trackData: array (required) - applyAudioEffectsData.trackData[]: object (required) - applyAudioEffectsData.trackData[].trackURL: string (required); default="" - applyAudioEffectsData.trackData[].gainDb: number (optional); default=0 - applyAudioEffectsData.trackData[].panning_settings: object (optional) - applyAudioEffectsData.trackData[].panning_settings.panning_angle: number (optional) - applyAudioEffectsData.trackData[].eq_settings: object (optional) - applyAudioEffectsData.trackData[].eq_settings.band_1: object (optional) - applyAudioEffectsData.trackData[].eq_settings.band_1.gain: number (optional) - applyAudioEffectsData.trackData[].eq_settings.band_1.q: number (optional) - applyAudioEffectsData.trackData[].eq_settings.band_1.centre_freq: number (optional) - applyAudioEffectsData.trackData[].eq_settings.band_2: object (optional) - applyAudioEffectsData.trackData[].eq_settings.band_2.gain: number (optional) - applyAudioEffectsData.trackData[].eq_settings.band_2.q: number (optional) - applyAudioEffectsData.trackData[].eq_settings.band_2.centre_freq: number (optional) - applyAudioEffectsData.trackData[].eq_settings.band_3: object (optional) - applyAudioEffectsData.trackData[].eq_settings.band_3.gain: number (optional) - applyAudioEffectsData.trackData[].eq_settings.band_3.q: number (optional) - applyAudioEffectsData.trackData[].eq_settings.band_3.centre_freq: number (optional) - applyAudioEffectsData.trackData[].eq_settings.band_4: object (optional) - applyAudioEffectsData.trackData[].eq_settings.band_4.gain: number (optional) - applyAudioEffectsData.trackData[].eq_settings.band_4.q: number (optional) - applyAudioEffectsData.trackData[].eq_settings.band_4.centre_freq: number (optional) - applyAudioEffectsData.trackData[].eq_settings.band_5: object (optional) - applyAudioEffectsData.trackData[].eq_settings.band_5.gain: number (optional) - applyAudioEffectsData.trackData[].eq_settings.band_5.q: number (optional) - applyAudioEffectsData.trackData[].eq_settings.band_5.centre_freq: number (optional) - applyAudioEffectsData.trackData[].eq_settings.band_6: object (optional) - applyAudioEffectsData.trackData[].eq_settings.band_6.gain: number (optional) - applyAudioEffectsData.trackData[].eq_settings.band_6.q: number (optional) - applyAudioEffectsData.trackData[].eq_settings.band_6.centre_freq: number (optional) - applyAudioEffectsData.trackData[].compression_settings: object (optional) - applyAudioEffectsData.trackData[].compression_settings.threshold: number (optional) - applyAudioEffectsData.trackData[].compression_settings.ratio: number (optional) - applyAudioEffectsData.trackData[].compression_settings.attack_ms: number (optional) - applyAudioEffectsData.trackData[].compression_settings.release_ms: number (optional) - applyAudioEffectsData.multitrackTaskId: string (required) - applyAudioEffectsData.returnStems: boolean (required); default=false - applyAudioEffectsData.createMaster: boolean (optional); default=false - applyAudioEffectsData.desiredLoudness: string (optional); allowed=["LOW", "MEDIUM", "HIGH"]; default="MEDIUM" - applyAudioEffectsData.reverbSendGainDb: number (optional); default=0.0 - applyAudioEffectsData.sampleRate: string (optional); allowed=["44100", "48000"]; default="44100" - applyAudioEffectsData.webhookURL: string (optional); default="" Responses: 200, 400, 401, 500, 403, 503, 402 POST /masteringpreview Creates a mastering task preview. credit_cost={"billing_stage":"none","credits":0,"requires_positive_balance":true} - masteringData: object (required) - masteringData.trackData: array (required) - masteringData.trackData[]: object (required) - masteringData.trackData[].trackURL: string (required); default="" - masteringData.musicalStyle: string (required); allowed=["ROCK_INDIE", "POP", "ACOUSTIC", "HIPHOP_GRIME", "ELECTRONIC", "REGGAE_DUB", "ORCHESTRAL", "METAL", "OTHER", "JAZZ", "LO_FI", "LATIN", "TECHNO", "HOUSE", "TRAP", "COUNTRY_ACOUSTIC", "CINEMATIC", "AFROBEAT", "K_POP", "REGGAETON"]; default="ROCK_INDIE" - masteringData.desiredLoudness: string (required); allowed=["LOW", "MEDIUM", "HIGH"]; default="MEDIUM" - masteringData.webhookURL: string (optional); default="" - masteringData.forcedLoudness: boolean (optional); default=false - masteringData.forcedLoudnessInLUFS: integer (optional); default=-14 - masteringData.sampleRate: string (optional); allowed=["44100", "48000"]; default="44100" - masteringData.previewStartTime: number (optional) Responses: 200, 400, 401, 500, 403, 503 POST /retrievepreviewmaster Retrieves the preview mastered track URL. credit_cost={"billing_stage":"none","credits":0} - masteringData: object (required) - masteringData.masteringTaskId: string (required) Responses: 200, 400, 401, 404, 500, 403, 503 POST /retrievefinalmaster Retrieves the final mastered track URL. credit_cost={"billing_stage":"retrieve_final","pricing_field":"final_master_credits","fallback_credits":22,"variant_pricing_fields":[],"effective_prices_url":"/account","note":"Request options and prior task purchases affect the charge. Development keys simulate processing; they do not render audio."} - masteringData: object (required) - masteringData.masteringTaskId: string (required) Responses: 200, 400, 401, 404, 500, 403, 503, 402 POST /mixanalysis Analyses a mixed or mastered track for any problems. credit_cost={"billing_stage":"analysis","pricing_field":"mix_analysis_credits","fallback_credits":5,"variant_pricing_fields":[],"effective_prices_url":"/account","note":"Request options and prior task purchases affect the charge. Development keys simulate processing; they do not render audio."} - mixDiagnosisData: object (required) - mixDiagnosisData.audioFileLocation: string (required) - mixDiagnosisData.isMaster: boolean (required) - mixDiagnosisData.musicalStyle: string (required); allowed=["ROCK", "POP", "TECHNO", "TRAP", "JAZZ", "METAL", "SOUL", "FOLK", "ORCHESTRAL", "PUNK", "BLUES", "AMBIENT", "ACOUSTIC", "EXPERIMENTAL", "HIP_HOP_GRIME", "COUNTRY", "FUNK", "RNB", "INDIE_POP", "INDIE_ROCK", "AFROBEAT", "DRUM_N_BASS", "HOUSE", "TRANCE", "LO_FI", "ELECTRONIC", "REGGAE", "INSTRUMENTAL", "LATIN", "AIRY_EXPANSIVE", "AGGRESSIVE", "BRIGHT", "GRITTY_CRUNCHY", "MELLOW_SMOOTH", "SHARP_BASSY", "THUMPING_BOOMY", "WARM", "BALANCED"] Responses: 200, 400, 401, 500, 403, 503, 402 POST /mixenhancepreview Generate a preview of an enhanced track with optional stem processing credit_cost={"billing_stage":"none","credits":0,"requires_positive_balance":true} - mixReviveData: object (required) - mixReviveData.audioFileLocation: string (required) - mixReviveData.musicalStyle: string (required); allowed=["ROCK_INDIE", "POP", "ACOUSTIC", "HIPHOP_GRIME", "ELECTRONIC", "REGGAE_DUB", "ORCHESTRAL", "METAL", "OTHER", "JAZZ", "LO_FI", "LATIN", "TECHNO", "HOUSE", "TRAP", "COUNTRY_ACOUSTIC", "CINEMATIC", "AFROBEAT", "K_POP", "REGGAETON", "GRITTY_CRUNCHY", "BRIGHT", "WARM", "SHARP_BASSY", "THUMPING_BOOMY", "MELLOW_SMOOTH", "AIRY_EXPANSIVE", "AGGRESSIVE", "BALANCED"]; default="ROCK_INDIE" - mixReviveData.isMaster: boolean (required) - mixReviveData.fixClippingIssues: boolean (required) - mixReviveData.fixStereoWidthIssues: boolean (required) - mixReviveData.fixLoudnessIssues: boolean (required) - mixReviveData.fixTonalProfileIssues: boolean (required) - mixReviveData.applyMastering: boolean (required) - mixReviveData.loudnessPreference: string (optional); allowed=["NO_CHANGE", "STREAMING_LOUDNESS", "MEDIUM", "CD_LOUDNESS"]; default="NO_CHANGE" - mixReviveData.stemProcessing: boolean (required); default=false - mixReviveData.getProcessedStems: boolean (optional) - mixReviveData.webhookURL: string (optional); default="" - mixReviveData.previewStartTime: number (optional) Responses: 200, 400, 401, 500, 503, 403 POST /mixenhance Generate a full length enhanced track with optional stem processing credit_cost={"billing_stage":"none","credits":0} - mixReviveData: object (required) - mixReviveData.audioFileLocation: string (required) - mixReviveData.musicalStyle: string (required); allowed=["ROCK_INDIE", "POP", "ACOUSTIC", "HIPHOP_GRIME", "ELECTRONIC", "REGGAE_DUB", "ORCHESTRAL", "METAL", "OTHER", "JAZZ", "LO_FI", "LATIN", "TECHNO", "HOUSE", "TRAP", "COUNTRY_ACOUSTIC", "CINEMATIC", "AFROBEAT", "K_POP", "REGGAETON", "GRITTY_CRUNCHY", "BRIGHT", "WARM", "SHARP_BASSY", "THUMPING_BOOMY", "MELLOW_SMOOTH", "AIRY_EXPANSIVE", "AGGRESSIVE", "BALANCED"]; default="ROCK_INDIE" - mixReviveData.isMaster: boolean (required) - mixReviveData.fixClippingIssues: boolean (required) - mixReviveData.fixStereoWidthIssues: boolean (required) - mixReviveData.fixLoudnessIssues: boolean (required) - mixReviveData.fixTonalProfileIssues: boolean (required) - mixReviveData.applyMastering: boolean (required) - mixReviveData.loudnessPreference: string (optional); allowed=["NO_CHANGE", "STREAMING_LOUDNESS", "MEDIUM", "CD_LOUDNESS"]; default="NO_CHANGE" - mixReviveData.stemProcessing: boolean (required); default=false - mixReviveData.getProcessedStems: boolean (optional) - mixReviveData.webhookURL: string (optional); default="" - mixReviveData.previewStartTime: number (optional) Responses: 200, 400, 401, 500, 503, 403 POST /retrieveenhancedtrack Retrieves the download URL for the final enhanced track. credit_cost={"billing_stage":"retrieve","pricing_field":"mix_enhance_credits","fallback_credits":250,"variant_pricing_fields":["mix_enhance_preview_stems_credits","mix_enhance_stems_credits"],"effective_prices_url":"/account","note":"Request options and prior task purchases affect the charge. Development keys simulate processing; they do not render audio."} - mixReviveData: object (required) - mixReviveData.mixReviveTaskId: string (required) Responses: 200, 400, 401, 404, 500, 503, 403, 402 POST /audio-cleanup Cleans up an audio signal for a specified instrument track. credit_cost={"billing_stage":"processing","pricing_field":"audio_cleanup","fallback_credits":10,"variant_pricing_fields":[],"effective_prices_url":"/account","note":"Request options and prior task purchases affect the charge. Development keys simulate processing; they do not render audio."} - audioCleanupData: object (required) - audioCleanupData.audioFileLocation: string (required) - audioCleanupData.soundSource: string (required); allowed=["KICK_GROUP", "SNARE_GROUP", "VOCAL_GROUP", "BACKING_VOX_GROUP", "PERCS_GROUP", "E_GUITAR_GROUP", "ACOUSTIC_GUITAR_GROUP", "BRASS_GROUP", "STRINGS_GROUP"] Responses: 200, 400, 401, 500, 403, 503, 402 GET /health Health check for the API. credit_cost={"credits":0,"billing_stage":"none"} Responses: 200, 401 POST /upload Get URLs for uploading and accessing an audio file credit_cost={"billing_stage":"none","credits":0} - filename: string (required) - contentType: string (required); allowed=["audio/wav", "audio/mpeg", "audio/flac", "audio/aiff", "audio/x-aiff"] Responses: 200, 400, 401, 500, 403, 503 POST /postprod/dialogue-enhancement/preview Create a dialogue enhancement preview task. credit_cost={"billing_stage":"none","credits":0,"requires_positive_balance":true} - postProdData: object (required) - postProdData.trackData: array (required) - postProdData.trackData[]: object (required) - postProdData.trackData[].trackURL: string (required) - postProdData.trackData[].trackType: string (required); allowed=["DIALOGUE_MAIN", "DIALOGUE_SECONDARY", "ADR", "VOICEOVER_LP", "VOICEOVER_HP"] - postProdData.trackData[].dialogueEnhancementMode: string (required); allowed=["PRESERVE", "ENHANCE", "AD_ENHANCED"] - postProdData.sampleRate: integer (optional); allowed=[44100, 48000]; default=48000 - postProdData.webhookURL: string (optional) Responses: 200, 400, 401, 403, 500, 503 POST /postprod/dialogue-enhancement/retrievepreview Retrieve dialogue enhancement preview (free). credit_cost={"billing_stage":"none","credits":0} - postProdData: object (required) - postProdData.postprodTaskId: string (required) Responses: 200, 202, 404, 400, 401, 403, 500, 503 POST /postprod/dialogue-enhancement/retrieve Retrieve final dialogue enhancement (charges credits). credit_cost={"billing_stage":"retrieve_final","pricing_field":"dialogue_enhancement_credits","fallback_credits":250,"variant_pricing_fields":[],"effective_prices_url":"/account","note":"Request options and prior task purchases affect the charge. Development keys simulate processing; they do not render audio."} - postProdData: object (required) - postProdData.postprodTaskId: string (required) Responses: 200, 202, 402, 404, 400, 401, 403, 500, 503 POST /postprod/delivery-mastering/preview Create a delivery format mastering preview task. credit_cost={"billing_stage":"none","credits":0,"requires_positive_balance":true} - postProdData: object (required) - postProdData.trackData: array (required) - postProdData.trackData[]: object (required) - postProdData.trackData[].trackURL: string (required) - postProdData.trackData[].trackType: string (optional); allowed=["DIALOGUE_MAIN", "DIALOGUE_SECONDARY", "MUSIC", "SFX", "AMBIENCE", "FOLEY", "ADR", "VOICEOVER_LP", "VOICEOVER_HP", "OTHER"]; default="OTHER" - postProdData.deliveryFormat: string (required); allowed=["FILM", "TV", "STREAMING", "YOUTUBE", "BROADCAST", "ADMIX", "PODCAST"] - postProdData.sampleRate: integer (optional); allowed=[44100, 48000]; default=48000 - postProdData.webhookURL: string (optional) Responses: 200, 400, 401, 403, 500, 503 POST /postprod/delivery-mastering/retrievepreview Retrieve delivery mastering preview (free). credit_cost={"billing_stage":"none","credits":0} - postProdData: object (required) - postProdData.postprodTaskId: string (required) Responses: 200, 202, 404, 400, 401, 403, 500, 503 POST /postprod/delivery-mastering/retrieve Retrieve final delivery mastering (charges credits). credit_cost={"billing_stage":"retrieve_final","pricing_field":"delivery_mastering_credits","fallback_credits":220,"variant_pricing_fields":[],"effective_prices_url":"/account","note":"Request options and prior task purchases affect the charge. Development keys simulate processing; they do not render audio."} - postProdData: object (required) - postProdData.postprodTaskId: string (required) Responses: 200, 202, 402, 404, 400, 401, 403, 500, 503 POST /postprod/loudness-check Submit a loudness/LRA compliance check (analysis only, no processing). credit_cost={"billing_stage":"none","credits":0} - postProdData: object (required) - postProdData.trackData: array (required) - postProdData.trackData[]: object (required) - postProdData.trackData[].trackURL: string (required) - postProdData.deliveryFormat: string (required); allowed=["FILM", "TV", "STREAMING", "YOUTUBE", "BROADCAST", "ADMIX", "PODCAST"] - postProdData.webhookURL: string (optional) Responses: 200, 400, 401, 403, 500, 503 POST /postprod/loudness-check/retrieve Retrieve loudness check results (charges credits). credit_cost={"billing_stage":"retrieve_final","pricing_field":"loudness_check_credits","fallback_credits":15,"variant_pricing_fields":[],"effective_prices_url":"/account","note":"Request options and prior task purchases affect the charge. Development keys simulate processing; they do not render audio."} - postProdData: object (required) - postProdData.postprodTaskId: string (required) Responses: 200, 202, 402, 404, 400, 401, 403, 500, 503 POST /postprod/ducking/preview Create a sidechain ducking preview task (multi-track). credit_cost={"billing_stage":"none","credits":0,"requires_positive_balance":true} - postProdData: object (required) - postProdData.trackData: array (required) - postProdData.trackData[]: object (required) - postProdData.trackData[].trackURL: string (required) - postProdData.trackData[].trackType: string (required); allowed=["DIALOGUE_MAIN", "DIALOGUE_SECONDARY", "MUSIC", "SFX", "AMBIENCE", "FOLEY", "ADR", "VOICEOVER_LP", "VOICEOVER_HP", "OTHER"] - postProdData.trackData[].isSidechain: boolean (optional); default=false - postProdData.trackData[].duckingPreset: string (optional); allowed=["NONE", "LIGHT", "MEDIUM", "HEAVY", "AD_MIX", "CUSTOM"]; default="MEDIUM" - postProdData.trackData[].customDuckAmount: number (optional) - postProdData.trackData[].customDuckThreshold: number (optional) - postProdData.trackData[].customDuckAttack: number (optional) - postProdData.trackData[].customDuckRelease: number (optional) - postProdData.generateStems: boolean (optional); default=false - postProdData.sampleRate: integer (optional); allowed=[44100, 48000]; default=48000 - postProdData.webhookURL: string (optional) Responses: 200, 400, 401, 403, 500, 503 POST /postprod/ducking/retrievepreview Retrieve ducking preview (free). credit_cost={"billing_stage":"none","credits":0} - postProdData: object (required) - postProdData.postprodTaskId: string (required) Responses: 200, 202, 404, 400, 401, 403, 500, 503 POST /postprod/ducking/retrieve Retrieve final ducking result (charges credits). credit_cost={"billing_stage":"retrieve_final","pricing_field":"ducking_credits","fallback_credits":100,"variant_pricing_fields":["stems_export_credits"],"effective_prices_url":"/account","note":"Request options and prior task purchases affect the charge. Development keys simulate processing; they do not render audio."} - postProdData: object (required) - postProdData.postprodTaskId: string (required) Responses: 200, 202, 402, 404, 400, 401, 403, 500, 503 POST /postprod/full-mix/preview Create a full post-production mix preview task (multi-track). credit_cost={"billing_stage":"none","credits":0,"requires_positive_balance":true} - postProdData: object (required) - postProdData.trackData: array (required) - postProdData.trackData[]: object (required) - postProdData.trackData[].trackURL: string (required) - postProdData.trackData[].trackType: string (required); allowed=["DIALOGUE_MAIN", "DIALOGUE_SECONDARY", "MUSIC", "SFX", "AMBIENCE", "FOLEY", "ADR", "VOICEOVER_LP", "VOICEOVER_HP", "OTHER"] - postProdData.trackData[].isSidechain: boolean (optional); default=false - postProdData.trackData[].duckingPreset: string (optional); allowed=["NONE", "LIGHT", "MEDIUM", "HEAVY", "AD_MIX", "CUSTOM"] - postProdData.trackData[].customDuckAmount: number (optional) - postProdData.trackData[].customDuckThreshold: number (optional) - postProdData.trackData[].customDuckAttack: number (optional) - postProdData.trackData[].customDuckRelease: number (optional) - postProdData.trackData[].dialogueEnhancementMode: string (optional); allowed=["PRESERVE", "ENHANCE", "AD_ENHANCED"] - postProdData.trackData[].priority: string (optional); allowed=["LOW", "NORMAL", "HIGH", "CRITICAL"]; default="NORMAL" - postProdData.trackData[].reverbSetting: string (optional); allowed=["NONE", "DRY", "SMALL_ROOM", "MEDIUM_ROOM", "LARGE_ROOM", "MATCH"] - postProdData.deliveryFormat: string (required); allowed=["FILM", "TV", "STREAMING", "YOUTUBE", "BROADCAST", "ADMIX", "PODCAST"] - postProdData.generateStems: boolean (optional); default=false - postProdData.sampleRate: integer (optional); allowed=[44100, 48000]; default=48000 - postProdData.webhookURL: string (optional) Responses: 200, 400, 401, 403, 500, 503 POST /postprod/full-mix/retrievepreview Retrieve full mix preview (free). credit_cost={"billing_stage":"none","credits":0} - postProdData: object (required) - postProdData.postprodTaskId: string (required) Responses: 200, 202, 404, 400, 401, 403, 500, 503 POST /postprod/full-mix/retrieve Retrieve final full mix result (charges credits). credit_cost={"billing_stage":"retrieve_final","pricing_field":"fullmix_credits","fallback_credits":500,"variant_pricing_fields":["stems_export_credits"],"effective_prices_url":"/account","note":"Request options and prior task purchases affect the charge. Development keys simulate processing; they do not render audio."} - postProdData: object (required) - postProdData.postprodTaskId: string (required) Responses: 200, 202, 402, 404, 400, 401, 403, 500, 503 POST /postprod/adr-matching/preview Create an ADR-to-location matching preview task. credit_cost={"billing_stage":"none","credits":0,"requires_positive_balance":true} - postProdData: object (required) - postProdData.trackData: array (required) - postProdData.trackData[]: object (required) - postProdData.trackData[].trackURL: string (required) - postProdData.trackData[].role: string (required); allowed=["REFERENCE", "ADR"] - postProdData.trackData[].reverbSetting: string (optional); allowed=["NONE", "DRY", "SMALL_ROOM", "MEDIUM_ROOM", "LARGE_ROOM", "MATCH"]; default="MATCH" - postProdData.trackData[].adrMatchEnabled: boolean (optional); default=true - postProdData.sampleRate: integer (optional); allowed=[44100, 48000]; default=48000 - postProdData.webhookURL: string (optional) Responses: 200, 400, 401, 403, 500, 503 POST /postprod/adr-matching/retrievepreview Retrieve ADR matching preview (free). credit_cost={"billing_stage":"none","credits":0} - postProdData: object (required) - postProdData.postprodTaskId: string (required) Responses: 200, 202, 404, 400, 401, 403, 500, 503 POST /postprod/adr-matching/retrieve Retrieve final ADR matching result (charges credits). credit_cost={"billing_stage":"retrieve_final","pricing_field":"adr_matching_credits","fallback_credits":400,"variant_pricing_fields":[],"effective_prices_url":"/account","note":"Request options and prior task purchases affect the charge. Development keys simulate processing; they do not render audio."} - postProdData: object (required) - postProdData.postprodTaskId: string (required) Responses: 200, 202, 402, 404, 400, 401, 403, 500, 503 POST /separate Split a stereo track into stems (vocals, drums, bass, other) or vocals + instrumental. credit_cost={"billing_stage":"reserved_on_submit_charged_on_success","pricing_field":"separate_credits","fallback_credits":75,"variant_pricing_fields":[],"effective_prices_url":"/account","note":"Request options and prior task purchases affect the charge. Development keys simulate processing; they do not render audio."} - stemflowData: object (required) - stemflowData.audioFileLocation: string (required) - stemflowData.separationMode: string (optional); allowed=["all_stems", "vocals_instrumental"]; default="all_stems" - stemflowData.webhookURL: string (optional) Responses: 200, 400, 401, 402, 500, 403, 503 GET /separatestatus/{stemflow_task_id} Poll stem separation task status. credit_cost={"billing_stage":"none","credits":0} Responses: 200, 202, 401, 404, 400, 403, 500, 503 POST /retrievestems Retrieve the 4 separated stem URLs (free). credit_cost={"billing_stage":"none","credits":0} - stemflowData: object (required) - stemflowData.stemflowTaskId: string (required) Responses: 200, 202, 401, 404, 400, 403, 500, 503 POST /recombine Mix a vocal against a backing track/beat and master the result (free to submit). credit_cost={"billing_stage":"none","credits":0,"requires_positive_balance":true} - recombineData: object (required) - recombineData.vocalStemURL: string (optional) - recombineData.backingStemURL: string (optional) - recombineData.stemJobId: string (optional) - recombineData.musicalStyle: string (required); allowed=["ROCK_INDIE", "POP", "ACOUSTIC", "HIPHOP_GRIME", "ELECTRONIC", "REGGAE_DUB", "ORCHESTRAL", "METAL", "OTHER", "JAZZ", "LO_FI", "LATIN", "TECHNO", "HOUSE", "TRAP", "COUNTRY_ACOUSTIC", "CINEMATIC", "AFROBEAT", "K_POP", "REGGAETON"] - recombineData.webhookURL: string (optional) - recombineData.desiredLoudness: string (optional); allowed=["LOW", "MEDIUM", "HIGH"]; default="MEDIUM" - recombineData.vocalGainDb: number (optional); default=0.0 Responses: 200, 400, 401, 404, 500, 403, 503 GET /recombinestatus/{recombine_task_id} Poll recombine task status. credit_cost={"billing_stage":"none","credits":0} Responses: 200, 202, 401, 404, 400, 403, 500, 503 POST /retrieverecombinepreview Retrieve a free 30-second MP3 preview of the recombined master. credit_cost={"billing_stage":"none","credits":0} - recombineData: object (required) - recombineData.recombineTaskId: string (required) Responses: 200, 202, 401, 404, 400, 403, 500, 503 POST /retrieverecombine Retrieve the final mastered WAV (charges 250 credits, once). credit_cost={"billing_stage":"retrieve_final","pricing_field":"recombine_credits","fallback_credits":250,"variant_pricing_fields":[],"effective_prices_url":"/account","note":"Request options and prior task purchases affect the charge. Development keys simulate processing; they do not render audio."} - recombineData: object (required) - recombineData.recombineTaskId: string (required) Responses: 200, 202, 401, 402, 404, 500, 400, 403, 503 GET /account Read account status, balance, restrictions and effective operation prices. credit_cost={"billing_stage":"none","credits":0} Responses: 200, 400, 401, 403, 500, 503