{"openapi":"3.1.0","info":{"title":"MeloLab Public API","version":"1.0.0","description":"Public API uses existing MeloLab credits for models, credits, generation jobs, usage, library tracks, playlists, and MeloPulse workflows."},"servers":[{"url":"https://melolab.ai","description":"MeloLab production"}],"security":[{"BearerAuth":[]}],"paths":{"/api/v1/me":{"get":{"summary":"Get API profile","operationId":"getApiProfile","security":[{"BearerAuth":[]}],"responses":{"200":{"description":"Get API profile","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ProfileResponse"}}}},"401":{"$ref":"#/components/responses/Unauthorized"},"403":{"$ref":"#/components/responses/Forbidden"},"429":{"$ref":"#/components/responses/RateLimited"},"500":{"$ref":"#/components/responses/InternalError"}}}},"/api/v1/credits":{"get":{"summary":"Get MeloLab credits","description":"Public API uses existing MeloLab credits. Read endpoints do not consume credits.","operationId":"getCredits","security":[{"BearerAuth":[]}],"responses":{"200":{"description":"Get MeloLab credits","content":{"application/json":{"schema":{"$ref":"#/components/schemas/CreditsResponse"}}}},"401":{"$ref":"#/components/responses/Unauthorized"},"403":{"$ref":"#/components/responses/Forbidden"},"429":{"$ref":"#/components/responses/RateLimited"},"500":{"$ref":"#/components/responses/InternalError"}}}},"/api/v1/usage":{"get":{"summary":"List API usage","operationId":"listUsage","security":[{"BearerAuth":[]}],"parameters":[{"name":"from","in":"query","schema":{"type":"string","format":"date-time"}},{"name":"to","in":"query","schema":{"type":"string","format":"date-time"}},{"name":"client","in":"query","schema":{"type":"string"}},{"name":"endpoint","in":"query","schema":{"type":"string"}},{"name":"status","in":"query","schema":{"type":"integer"}}],"responses":{"200":{"description":"List API usage","content":{"application/json":{"schema":{"$ref":"#/components/schemas/UsageResponse"}}}},"401":{"$ref":"#/components/responses/Unauthorized"},"403":{"$ref":"#/components/responses/Forbidden"},"429":{"$ref":"#/components/responses/RateLimited"},"500":{"$ref":"#/components/responses/InternalError"}}}},"/api/v1/models":{"get":{"summary":"List models","operationId":"listModels","security":[{"BearerAuth":[]}],"responses":{"200":{"description":"List models","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ModelsResponse"}}}},"401":{"$ref":"#/components/responses/Unauthorized"},"403":{"$ref":"#/components/responses/Forbidden"},"429":{"$ref":"#/components/responses/RateLimited"},"500":{"$ref":"#/components/responses/InternalError"}}}},"/api/v1/models/{model_id}":{"get":{"summary":"Get a model","operationId":"getModel","security":[{"BearerAuth":[]}],"parameters":[{"name":"model_id","in":"path","required":true,"description":"MeloLab model id.","schema":{"type":"string"}}],"responses":{"200":{"description":"Get a model","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ModelResponse"}}}},"401":{"$ref":"#/components/responses/Unauthorized"},"403":{"$ref":"#/components/responses/Forbidden"},"429":{"$ref":"#/components/responses/RateLimited"},"500":{"$ref":"#/components/responses/InternalError"}}}},"/api/v1/generations":{"get":{"summary":"List generations","operationId":"listGenerations","security":[{"BearerAuth":[]}],"parameters":[{"name":"limit","in":"query","schema":{"type":"integer","minimum":1,"maximum":50}}],"responses":{"200":{"description":"List generations","content":{"application/json":{"schema":{"$ref":"#/components/schemas/GenerationListResponse"}}}},"401":{"$ref":"#/components/responses/Unauthorized"},"403":{"$ref":"#/components/responses/Forbidden"},"429":{"$ref":"#/components/responses/RateLimited"},"500":{"$ref":"#/components/responses/InternalError"}}},"post":{"summary":"Create a music generation","description":"Creates an async music generation job. Public API uses existing MeloLab credits and the same refund logic as the web app.","operationId":"createGeneration","security":[{"BearerAuth":[]}],"parameters":[{"name":"Idempotency-Key","in":"header","required":true,"description":"Required for POST /api/v1/generations. Reuse only when retrying the same request body.","schema":{"type":"string","minLength":1,"maxLength":255,"examples":["melopulse-branch-soundtrack-018f7f3a"]}}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"$ref":"#/components/schemas/CreateGenerationRequest"}}}},"responses":{"202":{"description":"Generation accepted.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/GenerationAcceptedResponse"}}}},"400":{"$ref":"#/components/responses/BadRequest"},"401":{"$ref":"#/components/responses/Unauthorized"},"402":{"$ref":"#/components/responses/InsufficientCredits"},"403":{"$ref":"#/components/responses/Forbidden"},"409":{"$ref":"#/components/responses/Conflict"},"429":{"$ref":"#/components/responses/RateLimited"},"500":{"$ref":"#/components/responses/InternalError"},"502":{"$ref":"#/components/responses/ProviderUnavailable"}}}},"/api/v1/generations/{id}":{"get":{"summary":"Get a generation","operationId":"getGeneration","security":[{"BearerAuth":[]}],"parameters":[{"name":"id","in":"path","required":true,"description":"Generation job id.","schema":{"type":"string"}}],"responses":{"200":{"description":"Get a generation","content":{"application/json":{"schema":{"$ref":"#/components/schemas/GenerationResponse"}}}},"401":{"$ref":"#/components/responses/Unauthorized"},"403":{"$ref":"#/components/responses/Forbidden"},"429":{"$ref":"#/components/responses/RateLimited"},"500":{"$ref":"#/components/responses/InternalError"}}}},"/api/v1/library/search":{"get":{"summary":"Search library","operationId":"searchLibrary","security":[{"BearerAuth":[]}],"parameters":[{"name":"q","in":"query","schema":{"type":"string"}},{"name":"mood","in":"query","schema":{"type":"string"}},{"name":"activity","in":"query","schema":{"type":"string"}},{"name":"limit","in":"query","schema":{"type":"integer","minimum":1,"maximum":25}}],"responses":{"200":{"description":"Search library","content":{"application/json":{"schema":{"$ref":"#/components/schemas/LibrarySearchResponse"}}}},"401":{"$ref":"#/components/responses/Unauthorized"},"403":{"$ref":"#/components/responses/Forbidden"},"429":{"$ref":"#/components/responses/RateLimited"},"500":{"$ref":"#/components/responses/InternalError"}}}},"/api/v1/tracks/{id}":{"get":{"summary":"Get a track","operationId":"getTrack","security":[{"BearerAuth":[]}],"parameters":[{"name":"id","in":"path","required":true,"description":"Track id.","schema":{"type":"string"}}],"responses":{"200":{"description":"Get a track","content":{"application/json":{"schema":{"$ref":"#/components/schemas/TrackResponse"}}}},"401":{"$ref":"#/components/responses/Unauthorized"},"403":{"$ref":"#/components/responses/Forbidden"},"429":{"$ref":"#/components/responses/RateLimited"},"500":{"$ref":"#/components/responses/InternalError"}}}},"/api/v1/playlists":{"get":{"summary":"List playlists","operationId":"listPlaylists","security":[{"BearerAuth":[]}],"responses":{"200":{"description":"List playlists","content":{"application/json":{"schema":{"$ref":"#/components/schemas/PlaylistListResponse"}}}},"401":{"$ref":"#/components/responses/Unauthorized"},"403":{"$ref":"#/components/responses/Forbidden"},"429":{"$ref":"#/components/responses/RateLimited"},"500":{"$ref":"#/components/responses/InternalError"}}}},"/api/v1/playlists/{id}":{"get":{"summary":"Get a playlist","operationId":"getPlaylist","security":[{"BearerAuth":[]}],"parameters":[{"name":"id","in":"path","required":true,"description":"Playlist id.","schema":{"type":"string"}}],"responses":{"200":{"description":"Get a playlist","content":{"application/json":{"schema":{"$ref":"#/components/schemas/PlaylistResponse"}}}},"401":{"$ref":"#/components/responses/Unauthorized"},"403":{"$ref":"#/components/responses/Forbidden"},"429":{"$ref":"#/components/responses/RateLimited"},"500":{"$ref":"#/components/responses/InternalError"}}}},"/api/v1/jobs/{job_id}":{"get":{"summary":"Get an async job","description":"Polls an async API job (music, stem split, or vocal removal) and returns outputs when the provider finishes. Requires a valid bearer API key.","operationId":"getApiJob","security":[{"BearerAuth":[]}],"parameters":[{"name":"job_id","in":"path","required":true,"description":"API job id returned when the job was created.","schema":{"type":"string"}}],"responses":{"200":{"description":"Get an async job","content":{"application/json":{"schema":{"$ref":"#/components/schemas/JobResponse"}}}},"401":{"$ref":"#/components/responses/Unauthorized"},"403":{"$ref":"#/components/responses/Forbidden"},"429":{"$ref":"#/components/responses/RateLimited"},"500":{"$ref":"#/components/responses/InternalError"}}}},"/api/v1/logs":{"get":{"summary":"List recent API request logs","description":"Returns up to 100 recent API request logs from the last 30 days. Requires a valid bearer API key.","operationId":"listApiLogs","security":[{"BearerAuth":[]}],"parameters":[{"name":"limit","in":"query","schema":{"type":"integer","minimum":1,"maximum":100}}],"responses":{"200":{"description":"List recent API request logs","content":{"application/json":{"schema":{"$ref":"#/components/schemas/LogsResponse"}}}},"401":{"$ref":"#/components/responses/Unauthorized"},"403":{"$ref":"#/components/responses/Forbidden"},"429":{"$ref":"#/components/responses/RateLimited"},"500":{"$ref":"#/components/responses/InternalError"}}}},"/api/v1/webhook-endpoints":{"get":{"summary":"List active webhook endpoints","description":"Lists the active webhook endpoints for the authenticated account. Requires a valid bearer API key.","operationId":"listWebhookEndpoints","security":[{"BearerAuth":[]}],"responses":{"200":{"description":"List active webhook endpoints","content":{"application/json":{"schema":{"$ref":"#/components/schemas/WebhookEndpointListResponse"}}}},"401":{"$ref":"#/components/responses/Unauthorized"},"403":{"$ref":"#/components/responses/Forbidden"},"429":{"$ref":"#/components/responses/RateLimited"},"500":{"$ref":"#/components/responses/InternalError"}}},"post":{"summary":"Register a webhook endpoint","description":"Registers a public HTTPS webhook endpoint. The full signing secret is returned only once in the response. Requires a valid bearer API key.","operationId":"createWebhookEndpoint","security":[{"BearerAuth":[]}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"$ref":"#/components/schemas/CreateWebhookEndpointRequest"}}}},"responses":{"201":{"description":"Webhook endpoint created.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/WebhookEndpointCreatedResponse"}}}},"400":{"$ref":"#/components/responses/BadRequest"},"401":{"$ref":"#/components/responses/Unauthorized"},"429":{"$ref":"#/components/responses/RateLimited"},"500":{"$ref":"#/components/responses/InternalError"}}}},"/api/v1/webhook-endpoints/{id}":{"patch":{"summary":"Update a webhook endpoint","description":"Updates a webhook endpoint URL or status. Requires a valid bearer API key.","operationId":"updateWebhookEndpoint","security":[{"BearerAuth":[]}],"parameters":[{"name":"id","in":"path","required":true,"description":"Webhook endpoint id.","schema":{"type":"string"}}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"$ref":"#/components/schemas/UpdateWebhookEndpointRequest"}}}},"responses":{"200":{"description":"Webhook endpoint updated.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/WebhookEndpointResponse"}}}},"400":{"$ref":"#/components/responses/BadRequest"},"401":{"$ref":"#/components/responses/Unauthorized"},"404":{"$ref":"#/components/responses/NotFound"},"429":{"$ref":"#/components/responses/RateLimited"},"500":{"$ref":"#/components/responses/InternalError"}}},"delete":{"summary":"Delete a webhook endpoint","description":"Deletes a webhook endpoint. Requires a valid bearer API key.","operationId":"deleteWebhookEndpoint","security":[{"BearerAuth":[]}],"parameters":[{"name":"id","in":"path","required":true,"description":"Webhook endpoint id.","schema":{"type":"string"}}],"responses":{"200":{"description":"Webhook endpoint deleted.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/WebhookEndpointDeletedResponse"}}}},"401":{"$ref":"#/components/responses/Unauthorized"},"404":{"$ref":"#/components/responses/NotFound"},"429":{"$ref":"#/components/responses/RateLimited"},"500":{"$ref":"#/components/responses/InternalError"}}}}},"components":{"securitySchemes":{"BearerAuth":{"type":"http","scheme":"bearer","bearerFormat":"MeloLab API key"}},"schemas":{"SuccessEnvelope":{"type":"object","required":["data"],"properties":{"data":{"type":"object"}}},"ErrorEnvelope":{"type":"object","required":["error"],"properties":{"error":{"type":"object","required":["code","message","request_id"],"properties":{"code":{"type":"string"},"message":{"type":"string"},"request_id":{"type":"string"},"details":{"type":"object"}}}}},"Track":{"type":"object","properties":{"id":{"type":"string"},"title":{"type":"string"},"artist_label":{"type":"string"},"bpm":{"type":"integer","nullable":true},"duration":{"type":"number","nullable":true},"play_url":{"type":"string","nullable":true},"share_url":{"type":"string","nullable":true},"thumbnail_url":{"type":"string","nullable":true},"preview_audio_url":{"type":"string","nullable":true}}},"ProfileResponse":{"allOf":[{"$ref":"#/components/schemas/SuccessEnvelope"},{"type":"object","required":["data"],"properties":{"data":{"type":"object","properties":{"id":{"type":"string"},"email_verified":{"type":"boolean"},"account_tier":{"type":"string","examples":["free","plus","pro"]},"api_available":{"type":"boolean"}}}}}]},"CreditsResponse":{"allOf":[{"$ref":"#/components/schemas/SuccessEnvelope"},{"type":"object","required":["data"],"properties":{"data":{"type":"object","properties":{"available":{"type":"integer"},"monthly_credits":{"type":"integer"},"pack_credits":{"type":"integer"},"total_spent":{"type":"integer"}}}}}]},"UsageResponse":{"allOf":[{"$ref":"#/components/schemas/SuccessEnvelope"},{"type":"object","required":["data"],"properties":{"data":{"type":"object","properties":{"summary":{"type":"object","properties":{"requests":{"type":"integer"},"credits_used":{"type":"integer"},"credits_refunded":{"type":"integer"},"failed_requests":{"type":"integer"}}},"events":{"type":"array","items":{"type":"object","properties":{"request_id":{"type":"string"},"endpoint":{"type":"string"},"method":{"type":"string"},"status_code":{"type":"integer"},"credits_used":{"type":"integer"},"credits_refunded":{"type":"integer"},"created_at":{"type":"string","format":"date-time"}}}}}}}}]},"ModelsResponse":{"allOf":[{"$ref":"#/components/schemas/SuccessEnvelope"},{"type":"object","required":["data"],"properties":{"data":{"type":"object","properties":{"models":{"type":"array","items":{"$ref":"#/components/schemas/ModelResponse"}}}}}}]},"ModelResponse":{"type":"object","properties":{"id":{"type":"string","examples":["suno/v5-5"]},"name":{"type":"string"},"provider_label":{"type":"string"},"supports_lyrics":{"type":"boolean"},"supports_instrumental":{"type":"boolean"},"credit_cost":{"type":"integer"},"status":{"type":"string","examples":["available"]}}},"GenerationAcceptedResponse":{"allOf":[{"$ref":"#/components/schemas/SuccessEnvelope"},{"type":"object","required":["data"],"properties":{"data":{"type":"object","properties":{"id":{"type":"string"},"status":{"type":"string","examples":["queued"]},"model_id":{"type":"string"},"credits_reserved":{"type":"integer"},"created_at":{"type":"string","format":"date-time"},"status_url":{"type":"string"}}}}}]},"GenerationResponse":{"allOf":[{"$ref":"#/components/schemas/SuccessEnvelope"},{"type":"object","required":["data"],"properties":{"data":{"type":"object","properties":{"id":{"type":"string"},"status":{"type":"string","examples":["queued","processing","completed","failed"]},"model_id":{"type":"string"},"credits_charged":{"type":"integer"},"created_at":{"type":"string","format":"date-time"},"completed_at":{"type":"string","format":"date-time","nullable":true},"tracks":{"type":"array","items":{"$ref":"#/components/schemas/Track"}}}}}}]},"GenerationListResponse":{"allOf":[{"$ref":"#/components/schemas/SuccessEnvelope"},{"type":"object","required":["data"],"properties":{"data":{"type":"object","properties":{"generations":{"type":"array","items":{"$ref":"#/components/schemas/GenerationResponse"}}}}}}]},"LibrarySearchResponse":{"allOf":[{"$ref":"#/components/schemas/SuccessEnvelope"},{"type":"object","required":["data"],"properties":{"data":{"type":"object","properties":{"tracks":{"type":"array","items":{"$ref":"#/components/schemas/Track"}},"playlists":{"type":"array","items":{"$ref":"#/components/schemas/PlaylistResponse"}}}}}}]},"TrackResponse":{"allOf":[{"$ref":"#/components/schemas/SuccessEnvelope"},{"type":"object","required":["data"],"properties":{"data":{"type":"object","properties":{"id":{"type":"string"},"title":{"type":"string"},"artist_label":{"type":"string"},"bpm":{"type":"integer","nullable":true},"duration":{"type":"number","nullable":true},"play_url":{"type":"string","nullable":true},"share_url":{"type":"string","nullable":true},"thumbnail_url":{"type":"string","nullable":true},"preview_audio_url":{"type":"string","nullable":true}}}}}]},"PlaylistListResponse":{"allOf":[{"$ref":"#/components/schemas/SuccessEnvelope"},{"type":"object","required":["data"],"properties":{"data":{"type":"object","properties":{"playlists":{"type":"array","items":{"$ref":"#/components/schemas/PlaylistResponse"}}}}}}]},"PlaylistResponse":{"allOf":[{"$ref":"#/components/schemas/SuccessEnvelope"},{"type":"object","required":["data"],"properties":{"data":{"type":"object","properties":{"id":{"type":"string"},"title":{"type":"string"},"track_count":{"type":"integer"},"tracks":{"type":"array","items":{"$ref":"#/components/schemas/Track"}}}}}}]},"JobResponse":{"allOf":[{"$ref":"#/components/schemas/SuccessEnvelope"},{"type":"object","required":["data"],"properties":{"data":{"type":"object","properties":{"job_id":{"type":"string"},"operation":{"type":"string","examples":["music_suno_full","stem_split","vocal_removal"]},"provider":{"type":"string"},"status":{"type":"string","examples":["queued","processing","completed","failed"]},"credits_charged":{"type":"integer"},"outputs":{"type":"array","items":{"type":"object"}},"error":{"$ref":"#/components/schemas/ErrorEnvelope"},"created_at":{"type":"string","format":"date-time"},"completed_at":{"type":"string","format":"date-time","nullable":true}}}}}]},"LogsResponse":{"allOf":[{"$ref":"#/components/schemas/SuccessEnvelope"},{"type":"object","required":["data"],"properties":{"data":{"type":"object","properties":{"logs":{"type":"array","items":{"type":"object","properties":{"id":{"type":"string"},"method":{"type":"string"},"path":{"type":"string"},"status_code":{"type":"integer"},"error_code":{"type":"string","nullable":true},"request_bytes":{"type":"integer","nullable":true},"response_bytes":{"type":"integer","nullable":true},"job_id":{"type":"string","nullable":true},"created_at":{"type":"string","format":"date-time"}}}}}}}}]},"WebhookEndpointResponse":{"allOf":[{"$ref":"#/components/schemas/SuccessEnvelope"},{"type":"object","required":["data"],"properties":{"data":{"type":"object","required":["id","url","status","signing_secret_prefix"],"properties":{"id":{"type":"string"},"url":{"type":"string","format":"uri"},"status":{"type":"string","enum":["active","disabled"]},"signing_secret_prefix":{"type":"string"},"signing_secret":{"type":"string","description":"Full signing secret, returned only once when the endpoint is created."},"created_at":{"type":"string","format":"date-time","nullable":true},"updated_at":{"type":"string","format":"date-time","nullable":true},"disabled_at":{"type":"string","format":"date-time","nullable":true}}}}}]},"WebhookEndpointCreatedResponse":{"allOf":[{"$ref":"#/components/schemas/SuccessEnvelope"},{"type":"object","required":["data"],"properties":{"data":{"type":"object","required":["id","url","status","signing_secret_prefix","signing_secret"],"properties":{"id":{"type":"string"},"url":{"type":"string","format":"uri"},"status":{"type":"string","enum":["active","disabled"]},"signing_secret_prefix":{"type":"string"},"signing_secret":{"type":"string","description":"Full signing secret, returned only once when the endpoint is created."},"created_at":{"type":"string","format":"date-time","nullable":true},"updated_at":{"type":"string","format":"date-time","nullable":true},"disabled_at":{"type":"string","format":"date-time","nullable":true}}}}}]},"WebhookEndpointListResponse":{"allOf":[{"$ref":"#/components/schemas/SuccessEnvelope"},{"type":"object","required":["data"],"properties":{"data":{"type":"object","properties":{"webhook_endpoints":{"type":"array","items":{"type":"object","properties":{"id":{"type":"string"},"url":{"type":"string","format":"uri"},"status":{"type":"string","enum":["active","disabled"]},"signing_secret_prefix":{"type":"string"},"signing_secret":{"type":"string","description":"Full signing secret, returned only once when the endpoint is created."},"created_at":{"type":"string","format":"date-time","nullable":true},"updated_at":{"type":"string","format":"date-time","nullable":true},"disabled_at":{"type":"string","format":"date-time","nullable":true}}}}}}}}]},"WebhookEndpointDeletedResponse":{"allOf":[{"$ref":"#/components/schemas/SuccessEnvelope"},{"type":"object","required":["data"],"properties":{"data":{"type":"object","properties":{"id":{"type":"string"},"deleted":{"type":"boolean"}}}}}]},"CreateGenerationRequest":{"type":"object","required":["model_id","prompt"],"properties":{"model_id":{"type":"string","examples":["suno/v5-5"]},"prompt":{"type":"string","minLength":1,"maxLength":3000},"lyrics":{"type":"string"},"duration":{"type":"integer"},"instrumental":{"type":"boolean"},"client":{"type":"string","examples":["melopulse"]},"metadata":{"type":"object"}}},"CreateWebhookEndpointRequest":{"type":"object","required":["url"],"properties":{"url":{"type":"string","format":"uri","description":"Public HTTPS URL that receives webhook deliveries."}}},"UpdateWebhookEndpointRequest":{"type":"object","properties":{"url":{"type":"string","format":"uri"},"status":{"type":"string","enum":["active","disabled"]}}}},"parameters":{"IdempotencyKey":{"name":"Idempotency-Key","in":"header","required":true,"description":"Required for POST /api/v1/generations. Reuse only when retrying the same request body.","schema":{"type":"string","minLength":1,"maxLength":255,"examples":["melopulse-branch-soundtrack-018f7f3a"]}}},"responses":{"BadRequest":{"description":"The request was invalid.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorEnvelope"}}}},"Unauthorized":{"description":"Bearer API key is missing, invalid, or revoked.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorEnvelope"}}}},"Forbidden":{"description":"The API key does not have the required scope.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorEnvelope"}}}},"NotFound":{"description":"The requested resource was not found.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorEnvelope"}}}},"InsufficientCredits":{"description":"Not enough existing MeloLab credits.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorEnvelope"}}}},"Conflict":{"description":"Idempotency key conflict.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorEnvelope"}}}},"RateLimited":{"description":"Too many requests.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorEnvelope"}}}},"ProviderUnavailable":{"description":"The upstream provider is unavailable.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorEnvelope"}}}},"InternalError":{"description":"Unexpected API platform error.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorEnvelope"}}}}}}}