Skip to API documentation

OrynosMusic API Documentation

Analyze tracks, master audio, and mix stem sessions from your own application.

# Keep the key on your server
export ORYNOSMUSIC_API_KEY="YOUR_API_KEY"

curl --fail-with-body \
  -H "X-API-Key: $ORYNOSMUSIC_API_KEY" \
  -F "file=@track.wav" \
  https://orynosmusic.com/api/analyze
https://orynosmusic.com
On this page

Your first request.

Three steps are enough. Use the API from a trusted backend, CLI, worker, or desktop application.

Get an API key

Ask the OrynosMusic installation owner for a dedicated key. Use one key per integration so it can be rotated independently.

Store it securely

Put the key in a server-side secret or an environment variable such as ORYNOSMUSIC_API_KEY.

Send the header

Add X-API-Key to every request. Never append a key to a URL or query string.

Do not call OrynosMusic directly from public browser JavaScript.

The API intentionally has no cross-origin browser access. A frontend would expose your long-lived key to every visitor. Call OrynosMusic from your own backend and return only the result your app needs.

One key. Every request.

Header keys are stateless and work across CLI tools, backend runtimes, queues, and native applications.

API-key header Recommended
X-API-Key: YOUR_API_KEY

The clearest option for OrynosMusic integrations.

Bearer authorization Supported
Authorization: Bearer YOUR_API_KEY

Useful when your HTTP client already supports bearer tokens.

Keys define ownership and rate limits.

A mastering job belongs to the exact key that submitted it. Send that same key while polling, previewing, and downloading. A different or revoked key receives an intentional 404/401. Never share one production key between unrelated customers.

Mastering is asynchronous.

Orynos AI models: Sun (Pro, 20 credits/track), Moon (Pro, 5), Classic (10), Premier (0). Include ai_model as sun, moon, classic or premier and ai_destination as streaming or loud in settings. Credit-based models require an account session. Legacy requests without a model use the Classic rate. Credits are reserved per track and returned on a failed batch; purchased credits do not expire.

Submit the audio once, poll a lightweight job endpoint, then download before the result expires.

OPTIONAL · POSTAnalyzeMeasure the source and inspect the mastering recommendation.
POSTSubmit masterUpload track(s), settings, and an optional reference.
GET · ~2 SECPoll jobWait for completed or stop on error.
GET · 10 MINDownloadSave the WAV or ZIP while the result is available.
BASE_URL="https://orynosmusic.com"
API_KEY="$ORYNOSMUSIC_API_KEY"

# 1. Submit the mastering job
curl --fail-with-body -H "X-API-Key: $API_KEY" \
  -F "file=@track.wav" \
  -F 'settings={"preset":"AI","ai_model":"premier","target_lufs":-14,"ceiling":-1,"bitdepth":24}' \
  "$BASE_URL/api/master"
# => {"success":true,"job_id":"JOB_ID"}

# 2. Poll approximately every two seconds
curl --fail-with-body -H "X-API-Key: $API_KEY" \
  "$BASE_URL/api/job/JOB_ID"

# 3. Download immediately after completion
curl --fail-with-body -H "X-API-Key: $API_KEY" \
  -OJ "$BASE_URL/api/download/JOB_ID"

The four calls you will use most.

These are the stable, developer-facing processing operations. All multipart examples let your HTTP client generate the boundary automatically.

POST

Analyze a track

/api/analyze

Runs a synchronous technical analysis and adds recommended mastering targets. Use it to explain what OrynosMusic hears before you submit a master.

FieldTypeRequiredDescription
fileAudio fileYesOne file, maximum 250 MiB. Supported: .aac, .aif, .aiff, .caf, .flac, .m4a, .mp3, .ogg, .wav.
20 requests / minuteapplication/jsonSynchronous
POST

Submit a master

/api/master

Queues an asynchronous mastering job. A successful submission returns HTTP 200 and a job_id; it does not contain the rendered audio yet.

FieldTypeRequiredDescription
fileAudio file, repeatedYes1-24 tracks. Combined audio and reference maximum 250 MiB.
settingsJSON stringNoPreset, loudness, ceiling, export depth, tone, and advanced modules. Maximum 65,536 characters.
reference_fileAudio fileNoOptional tonal/loudness reference in a supported format.
8 submissions / minuteMax 3 active jobs / keyQueue capacity 25
GET

Poll and collect

/api/job/<job_id> · /api/preview/<job_id> · /api/download/<job_id>

Poll status every one or two seconds. When status becomes completed, preview inline or download the final attachment. Results expire 5 minutes after completion and live only in the current server process.

StatusMeaningNext action
queuedWaiting for the engine.Poll again.
processingAudio render is running.Use progress for UI; poll again.
completedResult is ready.Download immediately.
errorThe render failed.Show the error and stop polling.
Same API key requiredWAV or ZIP404 hides ownership
POST

Mix a stem session

/api/mix

Renders a complete WAV synchronously. Give this request a long client/proxy timeout; repeated stems parts map to zero-based routing[].index.

FieldTypeRequiredDescription
stemsWAV, repeatedYes1-96 files; total maximum 900 MiB; each up to 12 minutes.
settingsJSON stringYesStyle, per-stem routing, buses, reference matching, and render output.
referenceWAVNoUsed when reference_match is true.
mix-request.sh
curl --fail-with-body \
  -H "X-API-Key: $ORYNOSMUSIC_API_KEY" \
  -F "stems=@vocal.wav" \
  -F "stems=@beat.wav" \
  -F 'settings={"style":{"name":"clean","headroom_db":-6,"sequence_ai_enabled":true,"sequence_strength":0.72,"use_true_peak_limiter":true},"routing":[{"index":0,"category":"vocals"},{"index":1,"category":"music"}],"render":{"output_sr":48000,"bitdepth":24}}' \
  -o orynosmusic_mix.wav \
  "https://orynosmusic.com/api/mix"
4 renders / 5 minutesaudio/wavSynchronousMix v6.0 Sequence Intelligence

Every API operation.

Search by path, action, authentication type, or feature. Open any operation for its request, response, and common errors.

67 operations
Core audio API is the supported server-to-server surface. Account, privacy, community, pack, and artist-page routes power the OrynosMusic website and are documented for completeness; treat their raw schemas as website-internal and subject to change.

Access & privacy

API-key access and the website's optional-advertising consent state.

Website integration
GET /api/access/status Check API access

Reports whether this installation has keys configured and whether the current request is authorized.

PublicStandard
RequestNo request body.
Success response{"configured": true, "authorized": false}
Errors / notesNo endpoint-specific errors.
POST /api/access/verify Create a browser key session

Validates an API key and stores a short-lived, signed browser grant. Intended for the first-party access screen, not server integrations.

PublicFailed-attempt protection
RequestJSON or form: {"api_key":"YOUR_API_KEY","next":"/mastering"}. next must be a local path.
Success response{"ok": true, "next": "/mastering"}
Errors / notes401 INVALID_API_KEY · 429 RATE_LIMITED · 503 API_KEYS_NOT_CONFIGURED
GET /api/privacy/consent Read privacy choice

Returns the advertising-consent state for the current browser/session.

API key or website sessionStandard
RequestNo request body.
Success response{"ok":true,"available":true,"version":"…","decided":true,"advertising":false,"decided_at":0,"receipt_id":"…"}
Errors / notes401 when neither an API key nor first-party website session is present.
POST /api/privacy/consent Update privacy choice

Stores an explicit optional-advertising choice and returns the resulting consent record.

API key or website sessionStandard
RequestJSON: {"advertising": false}
Success response{"ok":true,"decided":true,"advertising":false,"receipt_id":"…"}
Errors / notes400 when advertising is not a boolean · 403 for an invalid cookie-session origin.

Audio engines

Analyze, master, and mix audio with the OrynosMusic processing engines.

Core developer API
POST /api/analyze Analyze a track

Synchronously measures loudness, dynamics, spectrum, stereo image, and returns a mastering recommendation.

API key or signed-in website account20 / minute
Requestmultipart/form-data: file (one supported audio file, maximum 250 MiB).
Success responseJSON analysis object including ai_recommendation.
Errors / notes400 NO_FILE or INVALID_FILE_TYPE · 413 INVALID_FILE_SIZE/PAYLOAD_TOO_LARGE · 500 ANALYSIS_ERROR
POST /api/master Submit mastering job

Queues mastering and returns a job identifier. Free supports three-track batches, the core chain and safety processing. Pro adds 24-track batches, reference matching, Spatial/ADM, Studio workflows, monitoring, delivery, QC and five repair/inspection/export tools.

API key or signed-in website account8 / minute
Requestmultipart/form-data: file (repeat, up to 24), settings (JSON string), optional reference_file. Combined audio maximum 250 MiB.
Success response{"success": true, "job_id": "b6f…"}
Errors / notes400 validation error · 429 CONCURRENCY_LIMIT · 503 QUEUE_FULL · 413 PAYLOAD_TOO_LARGE
POST /api/mix Render a stem mix

Synchronously mixes WAV stems. Free supports 16 stems/500 MiB/8 minutes plus reference matching; Premium supports 96/900 MiB/12 minutes, sequence automation, and hi-res export.

API key or signed-in website account4 / 5 minutes
Requestmultipart/form-data: stems (repeat), settings (required JSON string), optional reference. WAV only.
Success responseBinary audio/wav plus X-Mix-*, X-Vocal-*, and X-Sequence-* diagnostic headers.
Errors / notes400 validation error · 413 PAYLOAD_TOO_LARGE · 503 MIX_BUSY or render error
POST /api/premium/validate Validate supporter access

Checks a legacy donator key or the live supporter rank of the signed-in account.

API key or signed-in website accountStandard
RequestJSON: {"donator_key":"optional-legacy-key"}
Success response{"ok": true}
Errors / notes500 only if validation cannot be completed.

Mastering jobs & files

Poll an asynchronous mastering job, preview it, and download the result.

Core developer API
GET /api/job/<job_id> Read job status

Returns queued, processing, completed, or error state. Poll approximately every two seconds.

Same principal that submitted the jobStandard
RequestPath parameter: job_id returned by POST /api/master.
Success response{"status":"completed","job_id":"…","progress":100,"result":{"output_filename":"…","processing_time":"12.4s","ai_summary":{}}}
Errors / notes404 when the job is missing, expired, or owned by another key/session.
GET /api/preview/<job_id> Stream a preview

Streams the first completed master as inline WAV audio for playback.

Same principal that submitted the jobStandard
RequestPath parameter: completed job_id.
Success responseBinary audio/wav (inline).
Errors / notes404 when unavailable, expired, or not owned by the caller.
GET /api/preview/<job_id>/<kind> Stream a Studio monitor

Streams an available Premium Studio monitor render: mono, phone, small_speaker, or loudness-matched delta.

Same principal that submitted the jobStandard
RequestPath parameters: completed job_id and an allowlisted monitor kind returned by the job result.
Success responseBinary audio/wav (inline).
Errors / notes404 when the variant is unavailable, expired, invalid, or not owned by the caller.
GET /api/download/<job_id> Download a master

Downloads a WAV for a normal single-track master or a ZIP for batch/spatial exports.

Same principal that submitted the jobStandard
RequestPath parameter: completed job_id. Download within 10 minutes of completion.
Success responseBinary audio/wav or application/zip attachment.
Errors / notes404 when unavailable, expired, or not owned by the caller.
GET /api/master/archive List archived renders

Lists the signed-in account's archived renders from the last seven days (Premium render archive).

Website session (Premium)Standard
RequestNo request body.
Success response{"ok":true,"items":[{"id":"…","filename":"…zip","size_bytes":123,"created_at":0,"expires_at":0}]}
Errors / notes401 signed out · 403 Premium required.
GET /api/master/archive/<record_id>/download Download archived render

Streams one archived render that belongs to the signed-in account.

Website session (Premium)Standard
RequestNo request body.
Success responseBinary ZIP or WAV attachment.
Errors / notes401 signed out · 403 Premium required · 404 unknown or expired.
DELETE /api/master/archive/<record_id> Delete archived render

Removes one archived render and its stored file.

Website sessionStandard
RequestNo request body.
Success response{"ok": true}
Errors / notes401 signed out · 404 unknown record.

Accounts

Website-account sessions used by community and publishing features.

Website integration
GET /api/auth/me Read current account

Returns the account attached to the current cookie session, including canonical plan and Premium status.

API key or website sessionStandard
RequestNo request body. Preserve the account cookie for external account workflows.
Success response{"ok":true,"user":{"id":"…","username":"artist","email":"…","premium":true,"plan":"legacy_supporter"}}
Errors / notesuser is null when no account is signed in.
POST /api/auth/login Sign in

Validates credentials and establishes a persistent signed account cookie.

API key or first-party website session30 / 5 minutes
RequestJSON: {"username":"artist","password":"at-least-8-chars"}
Success response{"ok":true,"user":{"id":"…","username":"artist","is_donator":false}}
Errors / notes400 missing fields · 401 invalid credentials.
POST /api/auth/register Create account

Creates a website account and signs it in.

API key or first-party website session10 / hour
RequestJSON: {"username":"artist","email":"you@example.com","password":"at-least-8-chars"}. Username: 3-32 letters, numbers, _, -, or . A valid email is required and is confirmed via a link.
Success response{"ok":true,"user":{"id":"…","username":"artist","email":"you@example.com","email_verified":false},"verification_email_sent":true}
Errors / notes400 invalid username/password/email · 409 username or email already exists.
POST /api/auth/logout Sign out

Revokes existing account sessions while keeping an independent browser API-key grant intact.

API key or website sessionStandard
RequestNo request body.
Success response{"ok": true}
Errors / notesNo endpoint-specific errors.
POST /api/auth/request-verification Resend email confirmation

Sends a fresh 24-hour email-confirmation link to the account's stored address.

Website session5 / hour
RequestNo request body.
Success response{"ok":true,"verification_email_sent":true}
Errors / notes400 no email on the account · 401 signed out.
POST /api/auth/set-email Set account email

Stores a new email address for the signed-in account and sends a confirmation link. The address stays unverified until the link is opened.

Website session6 / hour
RequestJSON: {"email":"you@example.com"}
Success response{"ok":true,"email":"you@example.com","verification_email_sent":true}
Errors / notes400 invalid email · 401 signed out · 409 email already linked to another account.
POST /api/auth/forgot-password Request password reset

Sends a one-hour reset link when the email exists. The response is deliberately identical for unknown emails.

API key or first-party website session6 / hour
RequestJSON: {"email":"artist@example.com"}
Success response{"ok":true,"message":"If the email is registered, we have sent a reset link."}
Errors / notes400 missing email · 429 RATE_LIMITED.
POST /api/auth/reset-password Reset password

Consumes a one-time password-reset token and revokes older account sessions.

API key or first-party website session10 / hour
RequestJSON: {"token":"one-time-token","password":"new-password"}
Success response{"ok": true}
Errors / notes400 invalid/expired token or password shorter than 8 characters.
POST /api/auth/change-password Change password

Checks the current password, stores a new password, and revokes other signed-in browser sessions.

Account cookie required6 / hour
RequestJSON: {"current_password":"current-password","new_password":"new-password"}
Success response{"ok":true,"message":"Password updated. Other signed-in browsers have been signed out."}
Errors / notes400 invalid new password · 401 signed out or current password incorrect.
POST /api/auth/profile Update profile

Updates or clears the email address of the signed-in account.

Account cookie requiredStandard
RequestJSON: {"email":"new@example.com"}. A blank value clears the email.
Success response{"ok":true,"user":{"id":"…","username":"artist","email":"new@example.com","is_donator":false}}
Errors / notes401 login required · 409 email already in use.
GET /api/donators List supporters

Returns up to 500 grandfathered supporter usernames that explicitly opted into public recognition.

API key or website sessionStandard
RequestNo request body.
Success response{"donators":["producer_one","producer_two"]}
Errors / notesNo endpoint-specific errors.

Premium & billing

Read the Premium catalog, manage account workspaces, and start authenticated Paddle billing flows.

Website integration
GET /api/premium/catalog Read Premium catalog

Returns the canonical viewer plan and the current Premium extensions for each product area.

API key or website sessionStandard
RequestNo request body.
Success response{"viewer":{"premium":false,"plan":"free"},"groups":{"mastering":[…]},"billing_ready":false}
Errors / notesNo endpoint-specific errors.
GET /api/premium/library/<area> Read Premium workspace

Lists the signed-in account's small, structured workspace records for mastering, mixing, packs, community, or artist pages.

Premium account cookie requiredStandard
RequestPath parameter: area.
Success response{"ok":true,"area":"mastering","items":[]}
Errors / notes401 login required · 403 ENTITLEMENT_REQUIRED · 404 unknown workspace.
POST /api/premium/library/<area> Create Premium workspace item

Stores a named, size-limited settings or planning record for one library-mode Premium feature.

Premium account cookie requiredStandard
RequestJSON: {"feature_code":"master.cloud_presets","title":"Warm release","payload":{"notes":"…"}}
Success response{"ok":true,"id":"…"}
Errors / notes400 invalid feature/name · 403 ENTITLEMENT_REQUIRED · 409 workspace limit · 413 item too large.
DELETE /api/premium/library/<area>/<item_id> Delete Premium workspace item

Deletes one account-owned Premium workspace record.

Account owner cookie requiredStandard
RequestPath parameters: area and item_id.
Success response{"ok":true}
Errors / notes401 login required · 404 item not found.
GET /api/billing/status Read billing status

Returns canonical Free/Premium state and whether checkout is fully configured.

API key or website sessionStandard
RequestNo request body.
Success response{"ok":true,"viewer":{"premium":false},"checkout_ready":false}
Errors / notesNo endpoint-specific errors.
GET /api/billing/catalog Read verified billing catalog

Returns the server-verified Paddle product plus monthly and annual prices without exposing credentials.

API key or website sessionStandard
RequestNo request body.
Success response{"ok":true,"verified":true,"product":{"id":"pro_…"},"prices":{"monthly":{"id":"pri_…","display":"€11.99/month"}}}
Errors / notes503 BILLING_NOT_READY or CATALOG_UNAVAILABLE.
POST /api/billing/checkout-intent Create checkout intent

Verifies the Paddle catalog, then creates a 60-minute account-bound intent for an allowlisted recurring price. It does not grant Premium.

Signed-in Free account requiredStandard
RequestJSON: {"price_id":"pri_…"}
Success response{"ok":true,"environment":"sandbox","price_id":"pri_…","checkout_intent":"…","client_token":"test_…","customer_email":null}
Errors / notes400 unknown price · 401 login required · 409 ALREADY_PREMIUM · 503 BILLING_NOT_READY or CATALOG_UNAVAILABLE.
POST /api/billing/reconcile Recover billing state

Safely backfills a missed Paddle notification by exact verified email/customer and the configured catalog. Browser checkout success is never trusted for access.

Signed-in account with a uniquely verified email required6 requests / 5 minutes; server cooldown also applies
RequestEmpty JSON object.
Success response{"ok":true,"viewer":{"premium":true},"reconciliation":{"attempted":true,"updated":true,"state":"updated"}}
Errors / notes401 login required. Remote/storage/catalog failures are reported as a fail-closed reconciliation state without exposing Paddle identifiers.
POST /api/billing/portal Create billing portal session

Creates a short-lived Paddle customer-portal URL for subscription management.

Account cookie with mapped Paddle customer requiredStandard
RequestEmpty JSON object.
Success response{"ok":true,"url":"https://…"}
Errors / notes401 login required · 404 no billing profile · 503 Paddle unavailable.

Sound packs

Discover, preview, upload, and download community sound packs.

Website integration
GET /api/packs Search packs

Returns up to 200 packs filtered by free-text query and style.

API key or website sessionStandard
RequestQuery: q (optional), style (optional).
Success response{"count":1,"items":[{"id":"…","title":"Drum Kit","style":"Drums","downloads":12}]}
Errors / notesNo endpoint-specific errors.
POST /api/packs Upload a pack

Publishes an account-owned public sound or Premium multi-file/unlisted bundle, up to 1 GiB.

Account cookie requiredStandard
Requestmultipart/form-data: file (repeat), title (2-120), style, optional bpm/key/tags/description, visibility=public|unlisted, optional share_expires_at.
Success response{"ok":true,"pack_id":"…","file_count":1,"share_url":"/packs/share/…"}
Errors / notes400 invalid metadata/file · 401 login required · 403 ENTITLEMENT_REQUIRED · 409 storage full · 413 payload too large.
GET /api/packs/<pack_id>/preview Preview a pack

Streams the stored pack asset inline when a previewable file is available.

API key or website sessionStandard
RequestPath parameter: pack_id.
Success responseBinary file response.
Errors / notes404 when the pack/file is unavailable.
GET /api/packs/<pack_id>/download Download a pack

Downloads a pack attachment and increments its download count.

Account cookie requiredStandard
RequestPath parameter: pack_id.
Success responseBinary attachment.
Errors / notes401 login required · 404 when unavailable.
POST /api/packs/<pack_id>/share Rotate unlisted share link

Moves an owned pack between public and unlisted state and replaces any previous share token.

Premium pack owner cookie requiredStandard
RequestJSON: {"enabled":true,"expires_at":1893456000}
Success response{"ok":true,"visibility":"unlisted","share_url":"/packs/share/…"}
Errors / notes401 login required · 403 ENTITLEMENT_REQUIRED · 404 pack not found.
GET /api/packs/analytics Read pack analytics

Returns 7-90 days of aggregate preview and download counts for the account's packs.

Premium creator cookie requiredStandard
RequestQuery: days=7..90 (default 90).
Success response{"ok":true,"days":90,"items":[{"day":"2026-08-09","previews":4,"downloads":1}]}
Errors / notes401 login required · 403 ENTITLEMENT_REQUIRED.
GET /api/packs/share/<token>/preview Preview unlisted pack

Streams the first audio file while the revocable share token remains valid.

Valid unlisted share tokenStandard
RequestPath parameter: opaque token from the owner.
Success responseBinary inline audio response.
Errors / notes404 invalid, expired, or replaced token.
GET /api/packs/share/<token>/download Download unlisted pack

Downloads the shared audio or a ZIP for a multi-file bundle.

Valid unlisted share tokenStandard
RequestPath parameter: opaque token from the owner.
Success responseBinary audio or ZIP attachment.
Errors / notes404 invalid, expired, or replaced token.

Community

Read community content and perform signed-in social actions.

Website integration
GET /api/community/posts List posts

Returns up to 200 community posts with optional search, category, and sorting.

API key or website sessionStandard
RequestQuery: q, cat, and sort=hot|new (all optional).
Success response{"items":[{"id":"…","title":"Mix feedback","category":"Feedback","upvotes":4}]}
Errors / notesNo endpoint-specific errors.
POST /api/community/posts Create a post

Publishes a post as the signed-in account.

Account cookie requiredStandard
RequestJSON: {"title":"3-160 chars","content":"up to 12000 chars","category":"Feedback"}.
Success response{"ok": true}
Errors / notes400 invalid title/content · 401 login required. Unknown categories fall back to General.
GET /api/community/posts/<pid> Read post and comments

Returns one post, its comments, vote totals, and user_voted state for the current account.

API key or website sessionStandard
RequestPath parameter: pid.
Success response{"post":{"id":"…","user_voted":false},"comments":[]}
Errors / notes404 when the post does not exist.
POST /api/community/posts/<pid>/upvote Toggle post vote

Adds or removes the current account's upvote.

Account cookie requiredStandard
RequestPath parameter: pid. No request body.
Success response{"voted":true,"upvotes":5}
Errors / notes401 login required · 404 post not found.
POST /api/community/posts/<pid>/comments Add a comment

Adds a non-empty comment of up to 6,000 characters.

Account cookie requiredStandard
RequestJSON: {"content":"Your feedback"}
Success response{"ok": true}
Errors / notes400 invalid content · 401 login required · 404 post not found.
POST /api/community/comments/<cid>/upvote Toggle comment vote

Adds or removes the current account's comment upvote.

Account cookie requiredStandard
RequestPath parameter: cid. No request body.
Success response{"ok": true}
Errors / notes401 login required · 404 comment not found.
GET /api/community/drafts List drafts and scheduled posts

Returns up to 50 account-owned drafts and scheduled posts for the planning workspace.

Premium account cookie requiredStandard
RequestNo request body.
Success response{"ok":true,"items":[{"id":"…","state":"draft","title":"…"}]}
Errors / notes401 login required · 403 ENTITLEMENT_REQUIRED.
PATCH /api/community/posts/<pid>/draft Update or publish draft

Updates an owned draft/scheduled post and can publish it immediately or choose a validated future time.

Premium draft owner cookie requiredStandard
RequestJSON: {"title":"…","content":"…","category":"Feedback","state":"draft|scheduled|published","scheduled_at":1893456000}
Success response{"ok":true,"id":"…","state":"published"}
Errors / notes400 invalid fields/time · 403 ENTITLEMENT_REQUIRED · 404 draft not found · 409 already published.
DELETE /api/community/posts/<pid>/draft Delete draft

Deletes an owned draft or scheduled post before publication.

Premium draft owner cookie requiredStandard
RequestPath parameter: pid.
Success response{"ok":true}
Errors / notes403 ENTITLEMENT_REQUIRED · 404 draft not found · 409 already published.
GET /api/community/follows List saved threads

Returns the account's saved public threads for later review.

Premium account cookie requiredStandard
RequestNo request body.
Success response{"ok":true,"items":[{"id":"…","title":"…","comment_count":3}]}
Errors / notes401 login required · 403 ENTITLEMENT_REQUIRED.
POST /api/community/posts/<pid>/follow Save or follow thread

Stores bookmark and weekly-review preferences for one thread without instant push notifications.

Premium account cookie requiredStandard
RequestJSON: {"bookmarked":true,"weekly_digest":false}
Success response{"ok":true,"bookmarked":true,"weekly_digest":false}
Errors / notes401 login required · 403 ENTITLEMENT_REQUIRED · 404 post not found.
PATCH /api/community/posts/<pid>/feedback Resolve structured feedback

Marks an owned structured feedback request open/resolved and optionally identifies one helpful comment.

Premium post owner cookie requiredStandard
RequestJSON: {"status":"resolved","accepted_comment_id":"…"}
Success response{"ok":true,"status":"resolved","accepted_comment_id":"…"}
Errors / notes400 invalid status · 403 ENTITLEMENT_REQUIRED · 404 post/comment not found.

Artist pages

Read and publish the signed-in account's public link-page configuration.

Website integration
GET /api/linktree/config Read artist-page config

Returns the account's saved configuration or an editable default.

Account cookie requiredStandard
RequestNo request body.
Success response{"ok":true,"alias":"artist","profile_name":"Artist","bio":"…","avatar_url":"","links":[],"theme":"dark"}
Errors / notes401 login required.
POST /api/linktree/config Publish artist-page config

Publishes an alias, profile, theme, and up to 12 validated HTTP(S) links.

Account cookie requiredStandard
RequestJSON: {"alias":"artist","profile_name":"Artist","bio":"…","avatar_url":"https://…","links":[{"label":"Listen","url":"https://…"}],"theme":"dark"}
Success response{"ok": true}
Errors / notes400 invalid fields/URLs · 401 login required · 409 alias already in use.
GET /api/linktree/analytics Read artist-page analytics

Returns 90 days of privacy-safe aggregate page views and stable per-link click counts.

Premium page owner cookie requiredStandard
RequestNo request body.
Success response{"ok":true,"days":90,"items":[{"day":"2026-08-09","link_id":"page","page_views":5,"clicks":0}]}
Errors / notes401 login required · 403 ENTITLEMENT_REQUIRED.

DSP profiles & Discord

Adaptive DSP paths, private reference profiles, account connections and measured comparisons.

Website integration
GET /api/studio/catalog Read studio catalog

Lists the three DSP engines, your own custom models, verified Discord link and OAuth readiness.

API key or website sessionStandard
RequestNo body.
Success response{"engines":[],"models":[],"discord":null,"discord_available":false,"premium":false}
Errors / notes401 missing website/API access.
POST /api/studio/models Learn a custom DSP profile

Learns robust spectral and dynamics statistics from 3–8 different mastered references. Saves statistics, not uploaded audio. Up to five private profiles.

Pro account cookie requiredStandard; one active training slot
RequestMultipart: name and references (3–8 WAV/FLAC/AIFF, 32 MB each, 100 MB total). Analyses up to 60 seconds per file.
Success response{"success":true,"id":"…","name":"My sound","profile":{}}
Errors / notes400 invalid/duplicate references or quota · 401 sign in · 403 Pro required · 413 too large · 503 busy.
DELETE /api/studio/models/<model_id> Delete your DSP profile

Deletes a saved profile belonging to the current account.

Account cookie requiredStandard
RequestProfile ID in URL.
Success response{"success":true}
Errors / notes401 sign in · 404 profile not owned/found.
POST /api/account/discord/start Start Discord connection

Starts the identify-only authorization-code flow. A single-use state is bound to the logged-in account and expires after ten minutes.

Account cookie requiredStandard
RequestNo body.
Success response{"url":"https://discord.com/oauth2/authorize?…"}
Errors / notes401 sign in · 503 Discord OAuth not configured.
DELETE /api/account/discord Disconnect Discord

Removes the verified identity link and disables member-only DSP recipes and listening packs.

Account cookie requiredStandard
RequestNo body.
Success response{"success":true}
Errors / notes401 sign in.
POST /api/studio/feedback Save render feedback

Appends satisfaction and an optional comment to the private UTF-8 feedback text file. Render receipts expire after 30 days.

Render owner account cookie requiredStandard; once per render
RequestJSON: {"render_id":"…","satisfied":true,"comment":"…"} (comment ≤2,000 characters).
Success response{"success":true}
Errors / notes400 invalid satisfaction/comment · 401 sign in · 404 render not owned/found · 409 already submitted.
POST /api/studio/compare Measure provider exports

Renders the same original through all three new engines at -14 LUFS / -1 dBTP, then measures those renders alongside user-provided LANDR/BandLab exports. Source identity of vendor files is not independently verified.

Account cookie requiredStandard; one active comparison slot
RequestMultipart: original and at least one of landr/bandlab. 32 MB each, 100 MB total; measures first 60 seconds.
Success response{"rows":[],"method":"…"}
Errors / notes400 invalid audio/duration/no provider export · 401 sign in · 413 too large · 503 busy.

AI models & credits

Account-bound weekly and permanent mastering credits.

Website integration
GET /api/credits Read credit balance and AI models

Returns model costs, weekly/purchased balances, next Monday 00:00 UTC reset, and pack availability. Verified Free receives 200/week; Pro 2000/week.

Website account cookieStandard
RequestNo body.
Success response{"wallet":{"weekly":200,"purchased":0,"total":200},"models":[],"packs":[]}
Errors / notes401 sign in required.
POST /api/credits/checkout Start a credit-pack checkout

Creates an account-bound one-time Paddle intent. Credits are granted only by verified transaction.completed, never by a browser callback.

Verified Pro account cookieStandard
RequestJSON: {"pack":"1000"}; alternatives 2500 or 10000.
Success response{"price_id":"pri_…","credit_intent":"…","client_token":"…","environment":"sandbox","customer_email":"…"}
Errors / notes400 unknown pack · 401 sign in · 403 Pro/email required · 503 Paddle price/catalog unavailable.

Settings and models.

Start with the minimal examples. Add advanced processing only when you need direct control.

Master settings

A minimal payload for streaming-focused material.

  • presetAI, DSP_MudCleaner, Glue, Punchy, Smooth, or EDM.
  • target_lufsClamped from −18 to −8 LUFS.
  • ceilingClamped from −3 to −0.1 dBTP.
  • bitdepth16, 24, or 32; invalid values become 24.
  • bass_adj / mid_adj / high_adjManual tone, each −12 to +12 dB.
  • width / saturationWidth 0.5-1.5; saturation 0-6.

Spatial mastering

Enable a packaged spatial export only when the client can consume ZIP results.

  • binaural_spatial_masterCreates a headphone-ready binaural master.
  • adm_exportAdds ADM/BW64 assets and metadata where available.
  • spatial_amount0-1 intensity.
  • spatial_sample_rate48,000 or 96,000 Hz.

Mix settings

Routing follows the order of repeated multipart stem files. Categories normalize to drums, bass, vocals, music, and fx.

  • styleclean, punchy, warm, or aggressive, plus headroom, vocal presence, sequence intelligence, reverb, delay, ducking, and limiter controls.
  • routing[]index, category, gain trim (−18…18 dB), pan (−1…1), compression (0…1), width (0…2), filters, polarity, solo/mute, and sends.
  • busesPer-category gain, glue, tone (neutral/bright/dark), width, reverb, and delay sends.
  • render.output_srSource/null, 44.1, 48, 88.2, 96, 176.4, or 192 kHz.
  • render.bitdepth16 or 24-bit WAV output.
  • reference_matchSet true and include the reference multipart file.
minimal-master-settings.json
{
  "preset": "AI",
  "ai_model": "premier", "target_lufs": -14,
  "ceiling": -1,
  "bitdepth": 24
}

Errors, limits, and retries.

Check HTTP status and JSON error bodies before treating a response as audio. Back off when the server tells you to.

StatusCode / conditionWhat to do
400Invalid inputFix field names, multipart parts, JSON settings, formats, or bounds. Do not retry unchanged.
401API_KEY_REQUIRED / API_KEY_OR_LOGIN_REQUIREDSend a configured key on every request. Never place it in the URL.
403Invalid session originFor website-cookie mutations, use the same origin. Header-key server calls are not cross-site browser calls.
404Missing or non-owned job/resourceConfirm the ID and the submitting key. Completed job results may already have expired.
413PAYLOAD_TOO_LARGE / file limitReduce upload size or split the workload within the documented endpoint limits.
429RATE_LIMITED / CONCURRENCY_LIMITHonor Retry-After when present; otherwise wait for an active mastering job to finish.
503QUEUE_FULL / MIX_BUSYRetry with exponential backoff and jitter. Avoid synchronized retry storms.
500Processing errorLog a request correlation on your side, retry once if safe, then contact support without sending API keys.

Upload limits

Analyze/master audio: 250 MiB. Master: up to 24 tracks. Mix: 96 WAV stems / 900 MiB total. Mix stem duration: 12 minutes each.

Job lifetime

Active mastering jobs time out after 5 minutes. Completed files expire after 5 minutes and are stored in memory, so a process restart removes them.

Rate-limit headers

A global 429 response includes Retry-After in seconds. Apply exponential backoff plus a small random delay.

Transport

Use HTTPS in production, long upload/render timeouts, streaming downloads, and automatic multipart boundaries generated by your HTTP client.

API support

Bring the request, response status, and a redacted error to Discord. Never post an API key, reset token, or private audio URL.

Open Discord
Confirm your email address to receive subscription and account notices.