Developer Documentation - Agent API and Mix Analysis API
MixMaster Pro Agent API
Enterprise-grade integration guide for the Mix Analysis API and AI Mix Analysis pipeline. Authenticate existing users, upload audio, poll jobs, and return the public result contract - never internal analyzer payloads.
Seven-step linear pipeline. Each step returns an identifier for the next call. Use On this page to jump between steps from Generate API Key through Final Result.
Base path: /agent-api. Authenticate with an API key, upload audio, queue a job, poll until complete, then consume the JSON result. analysis_url is a user-facing web link - not an API endpoint.
AuthenticationData handoffAnalysis pipeline
Workflow
Step
Action
Input
Output
1
Generate API Key
User Account
API Key
2
Exchange Token
API Key
Access Token
3
Create Upload
Access Token
Upload ID
4
Upload Audio
Upload URL
Uploaded File
5
Start Analysis
Upload ID
Job ID
6
Poll Status
Job ID
Analysis ID
7
Get Result
Analysis ID
Analysis URL
Step 1
Generate API Key
Create a persistent API key once in your MixMaster Pro account. Copy the full key when shown - it is not displayed again.
Request
Sign in, open Account → API Key, and click Generate API Key.
https://mixmasterpro.io/account
Response
{"api_key": "mmp_agent_xxxxxxxxxxxxxxxx"","prefix": "mmp_agent_Ep8I"","created_at": "2026-06-20T12:00:00.000Z""}The full key is shown once at creation. Copy it immediately.
Save this value
YOUR_AGENT_API_KEY
Then: POST /agent-api/auth/token with header X-Agent-Api-Key: YOUR_AGENT_API_KEY
Manage keys in Account → API Key. Copy the full key when shown - it is not displayed again.
Step 2
Exchange Token
Exchange your API key for a short-lived Bearer access token. Use this token on all subsequent Agent API calls.
{"id": "43bfb582-b321-43a4-af10-825ea64714bc"","job_id": "43bfb582-b321-43a4-af10-825ea64714bc"","status": "processing""}Repeat every 2-3 seconds until status is "completed" or "failed".
Save this value
When status === "completed": analysis_id
Then: Read mix_score, grade, and analysis_url from the same completed GET response
Common mistake: calling GET /agent-api/analyses/{analysis_id} before completion returns 404. Poll with job_id until status is completed.
OpenAPI reference
Schemas, request payloads, and response samples from the live OpenAPI spec.
Interactive OpenAPI panels are desktop-only on this page. Filter to the "analyses" tag after opening. Use Swagger on mobile for the full reference.
One continuous script from API key through completed analysis JSON. Replace YOUR_AGENT_API_KEY and mix.wav, then run top to bottom.
# Full Agent API flow (curl) - API key through final analysis_url
# Requires: curl, jq, and an Agent API key from Account → API Key
# 0) Exchange persistent API key for short-lived Bearer token
TOKEN=$(curl -sS -X POST https://mixmasterpro.io/agent-api/auth/token \
-H "Content-Type: application/json" \
-H "X-Agent-Api-Key: YOUR_AGENT_API_KEY" \
-d '{"agent_id":"my-integration","label":"curl QA"}' | jq -r .access_token)
# Save access_token - use Authorization: Bearer for steps below
# 1) Create presigned upload - save upload_id
UP=$(curl -sS -X POST https://mixmasterpro.io/agent-api/uploads/create \
-H "Authorization: Bearer $TOKEN" \
-H "Content-Type: application/json" \
-d '{"filename":"mix.wav"}')
UPLOAD_ID=$(echo "$UP" | jq -r .upload_id)
PRESIGN=$(echo "$UP" | jq -r .presigned_upload_url)
# 2) PUT audio bytes to presigned_upload_url
curl -sS -X PUT "$PRESIGN" -H "Content-Type: audio/wav" --data-binary @mix.wav
# 3) Start analysis job - save job_id
JOB=$(curl -sS -X POST https://mixmasterpro.io/agent-api/analyses \
-H "Authorization: Bearer $TOKEN" \
-H "Content-Type: application/json" \
-d "{\"upload_id\":\"$UPLOAD_ID\"}")
JOB_ID=$(echo "$JOB" | jq -r .job_id)
# 4) Poll GET /analyses/{job_id} until status === "completed"
until STATUS=$(curl -sS "https://mixmasterpro.io/agent-api/analyses/$JOB_ID" \
-H "Authorization: Bearer $TOKEN" | jq -r .status); \
[ "$STATUS" = "completed" ] || [ "$STATUS" = "failed" ]; do
echo "status=$STATUS (sleep 3s)"
sleep 3
done
# 5) Final response - analysis_url is here (no separate URL endpoint)
curl -sS "https://mixmasterpro.io/agent-api/analyses/$JOB_ID" \
-H "Authorization: Bearer $TOKEN" | jq .
# Example completed response shape:
# {
# "id": "550e8400-e29b-41d4-a716-446655440000",
# "job_id": "550e8400-e29b-41d4-a716-446655440000",
# "analysis_id": "7c9e6679-7425-40de-944b-e07fc1f90ae7",
# "status": "completed",
# "mix_score": 87,
# "grade": "EXCELLENT",
# "analysis_url": "https://mixmasterpro.io/studio/analysis.details/7c9e6679-7425-40de-944b-e07fc1f90ae7",
# "certificate_available": true,
# "certificate_url": "https://mixmasterpro.io/studio/shared.mix.score/7c9e6679-7425-40de-944b-e07fc1f90ae7"
# }
Result Contract
Public fields returned when status is completed. Internal analyzer payloads are never exposed.
When status is completed, the API returns only the public fields below. Do not expect diagnosis, action_items, raw_audio_full_json, canonical_v1, intelligence_packet, or Python analyzer payloads.
certificate_available: true when mix_score is 80 or higher. When eligible, certificate_url points to the Share Analysis Score page.
Grade labels match the certificate product: EXCEPTIONAL, EXCELLENT, VERY GOOD, GOOD MIX, and DECENT MIX. Users view and share certificates on MixMaster Pro - agents only receive eligibility and URLs.
Discovery APIs
Bearer-authenticated read-only endpoints for agent routing and commerce integrations:
Method
Path
Purpose
GET
/agent-api/reviews
Paginated user reviews and Trustpilot summary.
GET
/agent-api/articles
Learning Center article list.
GET
/agent-api/articles/search
Search articles by query string.
GET
/agent-api/articles/:slug
Single article by slug.
GET
/agent-api/capabilities
Product capability flags for agent routing.
GET
/agent-api/about
Company and product metadata.
GET
/agent-api/recommendation-signals
Structured recommendation signals for commerce agents.
GET
/agent-api/manifest
Agent discovery manifest (public, no Bearer required).
GET
/agent-api/openapi.json
OpenAPI 3.0 specification (public).
GET
/developers/swagger
Swagger UI interactive docs in the app shell (public).
GET
/developers
Developer Documentation with inline OpenAPI reference per section (public).
OpenAPI reference
Schemas, request payloads, and response samples from the live OpenAPI spec.
Interactive OpenAPI panels are desktop-only on this page. Filter to the "discovery" tag after opening. Use Swagger on mobile for the full reference.
Separate fixed windows per category (user, token, and IP composite checks):
Token mint: 10 per user per hour (IP bucket at 2x)
Uploads: 30 per hour per user and token
Analyses: 20 per hour per user and token
Discovery: 120 per minute per user and token
HTTP 429 responses include a Retry-After header.
Credits and plan enforcement
Agent analysis consumes the same free monthly quota, monthly upload fair-use cap (300/month including revisions), Pro trial rules, and pay-as-you-go credits as the UI. Insufficient quota returns 403 with free_monthly_analysis_limit, monthly_analysis_upload_limit, or plan-specific messaging.
Security model
Bearer tokens are opaque, hashed at rest, expiring, and revocable.
No anonymous agent access or agent-side signup/payment flows.
R2 keys are ownership-checked before analyze.
Reviews and articles APIs are read-only for agents.
Completed responses pass an internal forbidden-field guard before leaving the API.
See api/docs/agent/security.md in the repository for full threat model notes.
Error codes
HTTP
Meaning
400
Missing filename, upload_id, or token revoke identifier.
401
Missing or invalid session (token mint) or Bearer token.
403
Quota exhausted, invalid r2_key ownership, or plan restriction.
404
Analysis job or token not found.
429
Rate limit exceeded. Retry after Retry-After seconds.
500
Unexpected server error or internal contract guard triggered.
Best practices
Mint tokens server-side or in the user's authenticated browser - never embed session cookies in public clients.
Store Bearer tokens securely and revoke them when the user disconnects your integration.
Save job_id from POST /agent-api/analyses and poll GET /agent-api/analyses/{job_id} until status is completed.
Read analysis_url from the completed poll response - there is no separate URL endpoint.
After completion, GET /agent-api/analyses/{analysis_id} returns the same result if you only stored analysis_id.
Poll with exponential backoff (start at 2-3s, cap around 15s).
Send users to analysis_url on MixMaster Pro for action items, mentor chat, and certificates (requires their login).
Do not fetch analysis_url from your backend - use mix_score, grade, and analysis_id from the Agent API response.
Never expect diagnosis, action_items, raw_audio_full_json, or other internal analyzer fields.
Handle 403 free_monthly_analysis_limit or monthly_analysis_upload_limit by surfacing upgrade or Studio+ contact paths in your agent UX.
Use /agent-api/capabilities before promising Audio Tools features - they remain UI-only.
FAQ
MixMaster Pro for AI assistants
See how ChatGPT, Claude, Gemini, and other AI tools can recommend professional mix analysis to producers.