{"openapi":"3.1.1","info":{"title":"Formula AI API","version":"1","description":"Методы нашего сервиса. Доступность модели и её параметров определяется опубликованным проверенным маршрутом. Suno: 23 музыкальные и вспомогательные операции, схемы и ограничения параметров. Streaming текста, изображений и аудио: SSE, сохранённые части и собственный расчёт."},"servers":[{"url":"https://formula-ai.ru/api/v1"}],"security":[{"ClientKey":[]}],"paths":{"/estimate":{"post":{"operationId":"estimateCost","summary":"Предварительная оценка без генерации и списания","requestBody":{"required":true,"content":{"application/json":{"schema":{"$ref":"#/components/schemas/CostEstimateInput"}}}},"responses":{"200":{"description":"Приблизительная оценка либо неизвестная стоимость.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/CostEstimate"}}}},"default":{"description":"Ошибка доступа или параметров.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}}}}},"/models":{"get":{"operationId":"listModels","summary":"Опубликованные модели","responses":{"200":{"description":"Собственные данные клиента.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Models"}}}},"default":{"description":"Ошибка доступа или параметров.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}}}}},"/balance":{"get":{"operationId":"getBalance","summary":"Баланс клиента","responses":{"200":{"description":"Собственные данные клиента.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Balance"}}}},"default":{"description":"Ошибка доступа или параметров.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}}}}},"/balance/transactions":{"get":{"operationId":"listTransactions","summary":"Финансовая история","responses":{"200":{"description":"Собственные данные клиента.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Transactions"}}}},"default":{"description":"Ошибка доступа или параметров.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}}},"parameters":[{"name":"page","in":"query","schema":{"type":"integer","minimum":1,"maximum":1000000,"default":1},"description":"По 50 записей, от новых к старым."}]}},"/requests":{"get":{"operationId":"listRequests","summary":"История запросов","responses":{"200":{"description":"Собственные данные клиента.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Requests"}}}},"default":{"description":"Ошибка доступа или параметров.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}}},"parameters":[{"name":"page","in":"query","schema":{"type":"integer","minimum":1,"maximum":1000000,"default":1},"description":"По 50 записей, от новых к старым."}]}},"/usage":{"get":{"operationId":"listUsage","summary":"История использования","responses":{"200":{"description":"Собственные данные клиента.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Requests"}}}},"default":{"description":"Ошибка доступа или параметров.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}}},"parameters":[{"name":"page","in":"query","schema":{"type":"integer","minimum":1,"maximum":1000000,"default":1},"description":"По 50 записей, от новых к старым."}]}},"/requests/{id}":{"get":{"operationId":"getRequest","summary":"Состояние собственного запроса","responses":{"200":{"description":"Собственные данные клиента.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Request"}}}},"default":{"description":"Ошибка доступа или параметров.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}}},"parameters":[{"name":"id","in":"path","required":true,"schema":{"$ref":"#/components/schemas/PublicId"}}]}},"/requests/{id}/cancel":{"post":{"operationId":"cancelRequest","summary":"Отменить собственный незавершённый запрос","description":"Тело не требуется. Повторная отмена возвращает тот же cancelled. Отмена завершённого запроса — 409. До отправки поставщику генерация не создаётся; после отправки HTTP/SSE прерывается по сигналу воркера, внешняя остановка не гарантируется. Фактические расходы и возвраты продолжают сверяться; поздний результат не изменяет cancelled.","parameters":[{"name":"id","in":"path","required":true,"schema":{"$ref":"#/components/schemas/PublicId"}}],"responses":{"200":{"description":"Запрос отменён в Formula AI. Проверьте billing.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Request"}}}},"401":{"description":"Неверный или отозванный ключ.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"404":{"description":"Запрос не найден у владельца ключа.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"409":{"description":"Запрос уже завершён.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}}}}},"/chat/completions":{"post":{"operationId":"createChat","summary":"Диалог, изображения и аудио","description":"JSON-объект. Действуют ограничения выбранной модели и серверного окружения. Параметры допускаются только совместимым проверенным маршрутом; неподдержанные поля не отбрасываются. Повтор с прежним Idempotency-Key возвращает существующую операцию. После очистки её содержимого возвращается 410.","parameters":[{"name":"Idempotency-Key","in":"header","required":false,"schema":{"type":"string","minLength":1,"maxLength":191,"pattern":"^[A-Za-z0-9._:\\-]+$"},"description":"Область ключа — клиент. Изменение параметров с прежним ключом даёт 409."},{"name":"Prefer","in":"header","schema":{"type":"string"},"description":"respond-async: вернуть собственный ID без ожидания поставщика, в том числе при stream=true. Формат тела и Idempotency-Key сохраняются. Готовый повтор возвращает сохранённый результат."}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"$ref":"#/components/schemas/ChatInput"}}}},"responses":{"200":{"description":"Готовый результат и клиентский расчёт.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ChatResult"}},"text/event-stream":{"schema":{"type":"string","description":"При stream=true: data: JSON и пустая строка; завершение data: [DONE]. Последний JSON содержит ai_service.status/billing. После начала выдачи ошибка передаётся в data.error; проверяйте итоговый статус."},"x-item-schema":{"$ref":"#/components/schemas/StreamChunk"},"x-error-schema":{"$ref":"#/components/schemas/StreamError"}}},"headers":{"X-Generation-ID":{"schema":{"$ref":"#/components/schemas/PublicId"}}}},"202":{"description":"Операция принята. Опросите GET /requests/{id}.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Request"}}},"headers":{"X-Generation-ID":{"schema":{"$ref":"#/components/schemas/PublicId"}},"Location":{"schema":{"type":"string"},"description":"Путь GET /api/v1/requests/{id}."},"Preference-Applied":{"schema":{"type":"string","const":"respond-async"}}}},"502":{"description":"Генерация завершилась ошибкой. Проверьте billing.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/GenerationError"}}},"headers":{"X-Generation-ID":{"schema":{"$ref":"#/components/schemas/PublicId"}}}},"default":{"description":"Ошибка валидации, настроек, доступа или баланса.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}},"headers":{"X-Generation-ID":{"schema":{"$ref":"#/components/schemas/PublicId"}}}}}}},"/images":{"post":{"operationId":"createImages","summary":"Генерация и редактирование изображений","description":"JSON-объект. Действуют ограничения выбранной модели и серверного окружения. Параметры допускаются только совместимым проверенным маршрутом; неподдержанные поля не отбрасываются. Повтор с прежним Idempotency-Key возвращает существующую операцию. После очистки её содержимого возвращается 410.","parameters":[{"name":"Idempotency-Key","in":"header","required":false,"schema":{"type":"string","minLength":1,"maxLength":191,"pattern":"^[A-Za-z0-9._:\\-]+$"},"description":"Область ключа — клиент. Изменение параметров с прежним ключом даёт 409."},{"name":"Prefer","in":"header","schema":{"type":"string"},"description":"respond-async: вернуть собственный ID без ожидания поставщика, в том числе при stream=true. Формат тела и Idempotency-Key сохраняются. Готовый повтор возвращает сохранённый результат."}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"$ref":"#/components/schemas/ImageInput"}}}},"responses":{"200":{"description":"Готовый результат и клиентский расчёт.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ImageResult"}},"text/event-stream":{"schema":{"type":"string","description":"При stream=true события data.type: partial_image, completed, settled с префиксом image_generation.; затем [DONE]. Превью зависит от модели."},"x-item-schema":{"$ref":"#/components/schemas/ImageStreamEvent"},"x-error-schema":{"$ref":"#/components/schemas/StreamError"}}},"headers":{"X-Generation-ID":{"schema":{"$ref":"#/components/schemas/PublicId"}}}},"202":{"description":"Операция принята. Опросите GET /requests/{id}.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Request"}}},"headers":{"X-Generation-ID":{"schema":{"$ref":"#/components/schemas/PublicId"}},"Location":{"schema":{"type":"string"},"description":"Путь GET /api/v1/requests/{id}."},"Preference-Applied":{"schema":{"type":"string","const":"respond-async"}}}},"502":{"description":"Генерация завершилась ошибкой. Проверьте billing.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/GenerationError"}}},"headers":{"X-Generation-ID":{"schema":{"$ref":"#/components/schemas/PublicId"}}}},"default":{"description":"Ошибка валидации, настроек, доступа или баланса.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}},"headers":{"X-Generation-ID":{"schema":{"$ref":"#/components/schemas/PublicId"}}}}}}},"/images/generations":{"post":{"operationId":"generateImages","summary":"Псевдоним /images","description":"JSON-объект. Действуют ограничения выбранной модели и серверного окружения. Параметры допускаются только совместимым проверенным маршрутом; неподдержанные поля не отбрасываются. Повтор с прежним Idempotency-Key возвращает существующую операцию. После очистки её содержимого возвращается 410.","parameters":[{"name":"Idempotency-Key","in":"header","required":false,"schema":{"type":"string","minLength":1,"maxLength":191,"pattern":"^[A-Za-z0-9._:\\-]+$"},"description":"Область ключа — клиент. Изменение параметров с прежним ключом даёт 409."},{"name":"Prefer","in":"header","schema":{"type":"string"},"description":"respond-async: вернуть собственный ID без ожидания поставщика, в том числе при stream=true. Формат тела и Idempotency-Key сохраняются. Готовый повтор возвращает сохранённый результат."}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"$ref":"#/components/schemas/ImageInput"}}}},"responses":{"200":{"description":"Готовый результат и клиентский расчёт.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ImageResult"}},"text/event-stream":{"schema":{"type":"string","description":"При stream=true события data.type: partial_image, completed, settled с префиксом image_generation.; затем [DONE]. Превью зависит от модели."},"x-item-schema":{"$ref":"#/components/schemas/ImageStreamEvent"},"x-error-schema":{"$ref":"#/components/schemas/StreamError"}}},"headers":{"X-Generation-ID":{"schema":{"$ref":"#/components/schemas/PublicId"}}}},"202":{"description":"Операция принята. Опросите GET /requests/{id}.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Request"}}},"headers":{"X-Generation-ID":{"schema":{"$ref":"#/components/schemas/PublicId"}},"Location":{"schema":{"type":"string"},"description":"Путь GET /api/v1/requests/{id}."},"Preference-Applied":{"schema":{"type":"string","const":"respond-async"}}}},"502":{"description":"Генерация завершилась ошибкой. Проверьте billing.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/GenerationError"}}},"headers":{"X-Generation-ID":{"schema":{"$ref":"#/components/schemas/PublicId"}}}},"default":{"description":"Ошибка валидации, настроек, доступа или баланса.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}},"headers":{"X-Generation-ID":{"schema":{"$ref":"#/components/schemas/PublicId"}}}}}}},"/videos":{"post":{"operationId":"createVideo","summary":"Генерация видео","description":"JSON-объект. Действуют ограничения выбранной модели и серверного окружения. Параметры допускаются только совместимым проверенным маршрутом; неподдержанные поля не отбрасываются. Повтор с прежним Idempotency-Key возвращает существующую операцию. После очистки её содержимого возвращается 410.","parameters":[{"name":"Idempotency-Key","in":"header","required":false,"schema":{"type":"string","minLength":1,"maxLength":191,"pattern":"^[A-Za-z0-9._:\\-]+$"},"description":"Область ключа — клиент. Изменение параметров с прежним ключом даёт 409."},{"name":"Prefer","in":"header","schema":{"type":"string"},"description":"respond-async: вернуть собственный ID без ожидания поставщика, в том числе при stream=true. Формат тела и Idempotency-Key сохраняются. Готовый повтор возвращает сохранённый результат."}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"$ref":"#/components/schemas/VideoInput"}}}},"responses":{"202":{"description":"Операция принята. Опросите GET /requests/{id}.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Request"}}},"headers":{"X-Generation-ID":{"schema":{"$ref":"#/components/schemas/PublicId"}},"Location":{"schema":{"type":"string"},"description":"Путь GET /api/v1/requests/{id}."},"Preference-Applied":{"schema":{"type":"string","const":"respond-async"}}}},"502":{"description":"Генерация завершилась ошибкой. Проверьте billing.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/GenerationError"}}},"headers":{"X-Generation-ID":{"schema":{"$ref":"#/components/schemas/PublicId"}}}},"default":{"description":"Ошибка валидации, настроек, доступа или баланса.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}},"headers":{"X-Generation-ID":{"schema":{"$ref":"#/components/schemas/PublicId"}}}}}}},"/music/generations":{"post":{"operationId":"createMusic","summary":"Генерация музыки","description":"JSON-объект. Действуют ограничения выбранной модели и серверного окружения. Параметры допускаются только совместимым проверенным маршрутом; неподдержанные поля не отбрасываются. Повтор с прежним Idempotency-Key возвращает существующую операцию. После очистки её содержимого возвращается 410.","parameters":[{"name":"Idempotency-Key","in":"header","required":false,"schema":{"type":"string","minLength":1,"maxLength":191,"pattern":"^[A-Za-z0-9._:\\-]+$"},"description":"Область ключа — клиент. Изменение параметров с прежним ключом даёт 409."},{"name":"Prefer","in":"header","schema":{"type":"string"},"description":"respond-async: вернуть собственный ID без ожидания поставщика, в том числе при stream=true. Формат тела и Idempotency-Key сохраняются. Готовый повтор возвращает сохранённый результат."}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"$ref":"#/components/schemas/MusicInput"}}}},"responses":{"202":{"description":"Операция принята. Опросите GET /requests/{id}.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Request"}}},"headers":{"X-Generation-ID":{"schema":{"$ref":"#/components/schemas/PublicId"}},"Location":{"schema":{"type":"string"},"description":"Путь GET /api/v1/requests/{id}."},"Preference-Applied":{"schema":{"type":"string","const":"respond-async"}}}},"502":{"description":"Генерация завершилась ошибкой. Проверьте billing.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/GenerationError"}}},"headers":{"X-Generation-ID":{"schema":{"$ref":"#/components/schemas/PublicId"}}}},"default":{"description":"Ошибка валидации, настроек, доступа или баланса.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}},"headers":{"X-Generation-ID":{"schema":{"$ref":"#/components/schemas/PublicId"}}}}}}},"/embeddings":{"post":{"operationId":"createEmbeddings","summary":"Эмбеддинги текста","description":"JSON-объект. Действуют ограничения выбранной модели и серверного окружения. Параметры допускаются только совместимым проверенным маршрутом; неподдержанные поля не отбрасываются. Повтор с прежним Idempotency-Key возвращает существующую операцию. После очистки её содержимого возвращается 410.","parameters":[{"name":"Idempotency-Key","in":"header","required":false,"schema":{"type":"string","minLength":1,"maxLength":191,"pattern":"^[A-Za-z0-9._:\\-]+$"},"description":"Область ключа — клиент. Изменение параметров с прежним ключом даёт 409."},{"name":"Prefer","in":"header","schema":{"type":"string"},"description":"respond-async: вернуть собственный ID без ожидания поставщика, в том числе при stream=true. Формат тела и Idempotency-Key сохраняются. Готовый повтор возвращает сохранённый результат."}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"$ref":"#/components/schemas/EmbeddingInput"}}}},"responses":{"200":{"description":"Готовый результат и клиентский расчёт.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/EmbeddingResult"}}},"headers":{"X-Generation-ID":{"schema":{"$ref":"#/components/schemas/PublicId"}}}},"202":{"description":"Операция принята. Опросите GET /requests/{id}.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Request"}}},"headers":{"X-Generation-ID":{"schema":{"$ref":"#/components/schemas/PublicId"}},"Location":{"schema":{"type":"string"},"description":"Путь GET /api/v1/requests/{id}."},"Preference-Applied":{"schema":{"type":"string","const":"respond-async"}}}},"502":{"description":"Генерация завершилась ошибкой. Проверьте billing.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/GenerationError"}}},"headers":{"X-Generation-ID":{"schema":{"$ref":"#/components/schemas/PublicId"}}}},"default":{"description":"Ошибка валидации, настроек, доступа или баланса.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}},"headers":{"X-Generation-ID":{"schema":{"$ref":"#/components/schemas/PublicId"}}}}}}},"/rerank":{"post":{"operationId":"createRerank","summary":"Переранжирование документов","description":"JSON-объект. Действуют ограничения выбранной модели и серверного окружения. Параметры допускаются только совместимым проверенным маршрутом; неподдержанные поля не отбрасываются. Повтор с прежним Idempotency-Key возвращает существующую операцию. После очистки её содержимого возвращается 410.","parameters":[{"name":"Idempotency-Key","in":"header","required":false,"schema":{"type":"string","minLength":1,"maxLength":191,"pattern":"^[A-Za-z0-9._:\\-]+$"},"description":"Область ключа — клиент. Изменение параметров с прежним ключом даёт 409."},{"name":"Prefer","in":"header","schema":{"type":"string"},"description":"respond-async: вернуть собственный ID без ожидания поставщика, в том числе при stream=true. Формат тела и Idempotency-Key сохраняются. Готовый повтор возвращает сохранённый результат."}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"$ref":"#/components/schemas/RerankInput"}}}},"responses":{"200":{"description":"Готовый результат и клиентский расчёт.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/RerankResult"}}},"headers":{"X-Generation-ID":{"schema":{"$ref":"#/components/schemas/PublicId"}}}},"202":{"description":"Операция принята. Опросите GET /requests/{id}.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Request"}}},"headers":{"X-Generation-ID":{"schema":{"$ref":"#/components/schemas/PublicId"}},"Location":{"schema":{"type":"string"},"description":"Путь GET /api/v1/requests/{id}."},"Preference-Applied":{"schema":{"type":"string","const":"respond-async"}}}},"502":{"description":"Генерация завершилась ошибкой. Проверьте billing.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/GenerationError"}}},"headers":{"X-Generation-ID":{"schema":{"$ref":"#/components/schemas/PublicId"}}}},"default":{"description":"Ошибка валидации, настроек, доступа или баланса.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}},"headers":{"X-Generation-ID":{"schema":{"$ref":"#/components/schemas/PublicId"}}}}}}},"/decisions":{"post":{"operationId":"createDecisions","summary":"Структурированные решения","description":"JSON-объект. Действуют ограничения выбранной модели и серверного окружения. Параметры допускаются только совместимым проверенным маршрутом; неподдержанные поля не отбрасываются. Повтор с прежним Idempotency-Key возвращает существующую операцию. После очистки её содержимого возвращается 410.","parameters":[{"name":"Idempotency-Key","in":"header","required":false,"schema":{"type":"string","minLength":1,"maxLength":191,"pattern":"^[A-Za-z0-9._:\\-]+$"},"description":"Область ключа — клиент. Изменение параметров с прежним ключом даёт 409."},{"name":"Prefer","in":"header","schema":{"type":"string"},"description":"respond-async: вернуть собственный ID без ожидания поставщика, в том числе при stream=true. Формат тела и Idempotency-Key сохраняются. Готовый повтор возвращает сохранённый результат."}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"$ref":"#/components/schemas/DecisionInput"}}}},"responses":{"200":{"description":"Готовый результат и клиентский расчёт.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/DecisionResult"}}},"headers":{"X-Generation-ID":{"schema":{"$ref":"#/components/schemas/PublicId"}}}},"202":{"description":"Операция принята. Опросите GET /requests/{id}.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Request"}}},"headers":{"X-Generation-ID":{"schema":{"$ref":"#/components/schemas/PublicId"}},"Location":{"schema":{"type":"string"},"description":"Путь GET /api/v1/requests/{id}."},"Preference-Applied":{"schema":{"type":"string","const":"respond-async"}}}},"502":{"description":"Генерация завершилась ошибкой. Проверьте billing.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/GenerationError"}}},"headers":{"X-Generation-ID":{"schema":{"$ref":"#/components/schemas/PublicId"}}}},"default":{"description":"Ошибка валидации, настроек, доступа или баланса.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}},"headers":{"X-Generation-ID":{"schema":{"$ref":"#/components/schemas/PublicId"}}}}}}},"/audio/transcriptions":{"post":{"operationId":"createTranscription","summary":"Преобразование речи в текст","description":"JSON-объект. Действуют ограничения выбранной модели и серверного окружения. Параметры допускаются только совместимым проверенным маршрутом; неподдержанные поля не отбрасываются. Повтор с прежним Idempotency-Key возвращает существующую операцию. После очистки её содержимого возвращается 410.","parameters":[{"name":"Idempotency-Key","in":"header","required":false,"schema":{"type":"string","minLength":1,"maxLength":191,"pattern":"^[A-Za-z0-9._:\\-]+$"},"description":"Область ключа — клиент. Изменение параметров с прежним ключом даёт 409."},{"name":"Prefer","in":"header","schema":{"type":"string"},"description":"respond-async: вернуть собственный ID без ожидания поставщика, в том числе при stream=true. Формат тела и Idempotency-Key сохраняются. Готовый повтор возвращает сохранённый результат."}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"$ref":"#/components/schemas/TranscriptionInput"}}}},"responses":{"200":{"description":"Готовый результат и клиентский расчёт.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/TranscriptionResult"}}},"headers":{"X-Generation-ID":{"schema":{"$ref":"#/components/schemas/PublicId"}}}},"202":{"description":"Операция принята. Опросите GET /requests/{id}.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Request"}}},"headers":{"X-Generation-ID":{"schema":{"$ref":"#/components/schemas/PublicId"}},"Location":{"schema":{"type":"string"},"description":"Путь GET /api/v1/requests/{id}."},"Preference-Applied":{"schema":{"type":"string","const":"respond-async"}}}},"502":{"description":"Генерация завершилась ошибкой. Проверьте billing.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/GenerationError"}}},"headers":{"X-Generation-ID":{"schema":{"$ref":"#/components/schemas/PublicId"}}}},"default":{"description":"Ошибка валидации, настроек, доступа или баланса.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}},"headers":{"X-Generation-ID":{"schema":{"$ref":"#/components/schemas/PublicId"}}}}}}},"/audio/speech":{"post":{"operationId":"createSpeech","summary":"Синтез речи","description":"JSON-объект. Действуют ограничения выбранной модели и серверного окружения. Параметры допускаются только совместимым проверенным маршрутом; неподдержанные поля не отбрасываются. Повтор с прежним Idempotency-Key возвращает существующую операцию. После очистки её содержимого возвращается 410.","parameters":[{"name":"Idempotency-Key","in":"header","required":false,"schema":{"type":"string","minLength":1,"maxLength":191,"pattern":"^[A-Za-z0-9._:\\-]+$"},"description":"Область ключа — клиент. Изменение параметров с прежним ключом даёт 409."},{"name":"Prefer","in":"header","schema":{"type":"string"},"description":"respond-async: вернуть собственный ID без ожидания поставщика, в том числе при stream=true. Формат тела и Idempotency-Key сохраняются. Готовый повтор возвращает сохранённый результат."}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"$ref":"#/components/schemas/SpeechInput"}}}},"responses":{"202":{"description":"Операция принята. Опросите GET /requests/{id}.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Request"}}},"headers":{"X-Generation-ID":{"schema":{"$ref":"#/components/schemas/PublicId"}},"Location":{"schema":{"type":"string"},"description":"Путь GET /api/v1/requests/{id}."},"Preference-Applied":{"schema":{"type":"string","const":"respond-async"}}}},"502":{"description":"Генерация завершилась ошибкой. Проверьте billing.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/GenerationError"}}},"headers":{"X-Generation-ID":{"schema":{"$ref":"#/components/schemas/PublicId"}}}},"default":{"description":"Ошибка валидации, настроек, доступа или баланса.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}},"headers":{"X-Generation-ID":{"schema":{"$ref":"#/components/schemas/PublicId"}}}},"200":{"description":"Готовые бинарные байты аудио. Состояние и расчёт доступны через GET /requests/{X-Generation-ID}.","headers":{"X-Generation-ID":{"schema":{"$ref":"#/components/schemas/PublicId"}}},"content":{"audio/mpeg":{"schema":{"type":"string","format":"binary"}},"audio/pcm":{"schema":{"type":"string","format":"binary"}}}}}}},"/media/{id}":{"get":{"operationId":"getMedia","summary":"Собственный сохранённый файл","parameters":[{"name":"Range","in":"header","schema":{"type":"string"},"description":"Один диапазон bytes=0-1023 либо bytes=-1024."},{"name":"id","in":"path","required":true,"schema":{"$ref":"#/components/schemas/PublicId"}}],"responses":{"200":{"description":"Бинарный файл. Content-Type соответствует проверенному содержимому.","headers":{"Content-Length":{"schema":{"type":"integer"}},"Accept-Ranges":{"schema":{"type":"string","const":"bytes"}},"Content-Range":{"schema":{"type":"string"}}},"content":{"application/octet-stream":{"schema":{"type":"string","format":"binary"}}}},"206":{"description":"Бинарный файл. Content-Type соответствует проверенному содержимому.","headers":{"Content-Length":{"schema":{"type":"integer"}},"Accept-Ranges":{"schema":{"type":"string","const":"bytes"}},"Content-Range":{"schema":{"type":"string"}}},"content":{"application/octet-stream":{"schema":{"type":"string","format":"binary"}}}},"416":{"description":"Невозможный либо неподдержанный диапазон.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"410":{"description":"Срок хранения истёк.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"default":{"description":"Ошибка доступа или файл не найден.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}}}}},"/music/extend":{"post":{"operationId":"create_music_extend","summary":"Suno: extend","description":"JSON-объект. Действуют ограничения выбранной модели и серверного окружения. Параметры допускаются только совместимым проверенным маршрутом; неподдержанные поля не отбрасываются. Повтор с прежним Idempotency-Key возвращает существующую операцию. После очистки её содержимого возвращается 410.","parameters":[{"name":"Idempotency-Key","in":"header","required":false,"schema":{"type":"string","minLength":1,"maxLength":191,"pattern":"^[A-Za-z0-9._:\\-]+$"},"description":"Область ключа — клиент. Изменение параметров с прежним ключом даёт 409."},{"name":"Prefer","in":"header","schema":{"type":"string"},"description":"respond-async: вернуть собственный ID без ожидания поставщика, в том числе при stream=true. Формат тела и Idempotency-Key сохраняются. Готовый повтор возвращает сохранённый результат."}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"$ref":"#/components/schemas/SunoInput_music_extend"}}}},"responses":{"202":{"description":"Операция принята. Опросите GET /requests/{id}.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Request"}}},"headers":{"X-Generation-ID":{"schema":{"$ref":"#/components/schemas/PublicId"}},"Location":{"schema":{"type":"string"},"description":"Путь GET /api/v1/requests/{id}."},"Preference-Applied":{"schema":{"type":"string","const":"respond-async"}}}},"502":{"description":"Генерация завершилась ошибкой. Проверьте billing.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/GenerationError"}}},"headers":{"X-Generation-ID":{"schema":{"$ref":"#/components/schemas/PublicId"}}}},"default":{"description":"Ошибка валидации, настроек, доступа или баланса.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}},"headers":{"X-Generation-ID":{"schema":{"$ref":"#/components/schemas/PublicId"}}}}}}},"/music/upload-and-cover-audio":{"post":{"operationId":"create_music_upload_and_cover_audio","summary":"Suno: upload and cover audio","description":"JSON-объект. Действуют ограничения выбранной модели и серверного окружения. Параметры допускаются только совместимым проверенным маршрутом; неподдержанные поля не отбрасываются. Повтор с прежним Idempotency-Key возвращает существующую операцию. После очистки её содержимого возвращается 410.","parameters":[{"name":"Idempotency-Key","in":"header","required":false,"schema":{"type":"string","minLength":1,"maxLength":191,"pattern":"^[A-Za-z0-9._:\\-]+$"},"description":"Область ключа — клиент. Изменение параметров с прежним ключом даёт 409."},{"name":"Prefer","in":"header","schema":{"type":"string"},"description":"respond-async: вернуть собственный ID без ожидания поставщика, в том числе при stream=true. Формат тела и Idempotency-Key сохраняются. Готовый повтор возвращает сохранённый результат."}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"$ref":"#/components/schemas/SunoInput_music_upload_and_cover_audio"}}}},"responses":{"202":{"description":"Операция принята. Опросите GET /requests/{id}.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Request"}}},"headers":{"X-Generation-ID":{"schema":{"$ref":"#/components/schemas/PublicId"}},"Location":{"schema":{"type":"string"},"description":"Путь GET /api/v1/requests/{id}."},"Preference-Applied":{"schema":{"type":"string","const":"respond-async"}}}},"502":{"description":"Генерация завершилась ошибкой. Проверьте billing.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/GenerationError"}}},"headers":{"X-Generation-ID":{"schema":{"$ref":"#/components/schemas/PublicId"}}}},"default":{"description":"Ошибка валидации, настроек, доступа или баланса.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}},"headers":{"X-Generation-ID":{"schema":{"$ref":"#/components/schemas/PublicId"}}}}}}},"/music/upload-and-extend-audio":{"post":{"operationId":"create_music_upload_and_extend_audio","summary":"Suno: upload and extend audio","description":"JSON-объект. Действуют ограничения выбранной модели и серверного окружения. Параметры допускаются только совместимым проверенным маршрутом; неподдержанные поля не отбрасываются. Повтор с прежним Idempotency-Key возвращает существующую операцию. После очистки её содержимого возвращается 410.","parameters":[{"name":"Idempotency-Key","in":"header","required":false,"schema":{"type":"string","minLength":1,"maxLength":191,"pattern":"^[A-Za-z0-9._:\\-]+$"},"description":"Область ключа — клиент. Изменение параметров с прежним ключом даёт 409."},{"name":"Prefer","in":"header","schema":{"type":"string"},"description":"respond-async: вернуть собственный ID без ожидания поставщика, в том числе при stream=true. Формат тела и Idempotency-Key сохраняются. Готовый повтор возвращает сохранённый результат."}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"$ref":"#/components/schemas/SunoInput_music_upload_and_extend_audio"}}}},"responses":{"202":{"description":"Операция принята. Опросите GET /requests/{id}.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Request"}}},"headers":{"X-Generation-ID":{"schema":{"$ref":"#/components/schemas/PublicId"}},"Location":{"schema":{"type":"string"},"description":"Путь GET /api/v1/requests/{id}."},"Preference-Applied":{"schema":{"type":"string","const":"respond-async"}}}},"502":{"description":"Генерация завершилась ошибкой. Проверьте billing.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/GenerationError"}}},"headers":{"X-Generation-ID":{"schema":{"$ref":"#/components/schemas/PublicId"}}}},"default":{"description":"Ошибка валидации, настроек, доступа или баланса.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}},"headers":{"X-Generation-ID":{"schema":{"$ref":"#/components/schemas/PublicId"}}}}}}},"/music/add-instrumental":{"post":{"operationId":"create_music_add_instrumental","summary":"Suno: add instrumental","description":"JSON-объект. Действуют ограничения выбранной модели и серверного окружения. Параметры допускаются только совместимым проверенным маршрутом; неподдержанные поля не отбрасываются. Повтор с прежним Idempotency-Key возвращает существующую операцию. После очистки её содержимого возвращается 410.","parameters":[{"name":"Idempotency-Key","in":"header","required":false,"schema":{"type":"string","minLength":1,"maxLength":191,"pattern":"^[A-Za-z0-9._:\\-]+$"},"description":"Область ключа — клиент. Изменение параметров с прежним ключом даёт 409."},{"name":"Prefer","in":"header","schema":{"type":"string"},"description":"respond-async: вернуть собственный ID без ожидания поставщика, в том числе при stream=true. Формат тела и Idempotency-Key сохраняются. Готовый повтор возвращает сохранённый результат."}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"$ref":"#/components/schemas/SunoInput_music_add_instrumental"}}}},"responses":{"202":{"description":"Операция принята. Опросите GET /requests/{id}.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Request"}}},"headers":{"X-Generation-ID":{"schema":{"$ref":"#/components/schemas/PublicId"}},"Location":{"schema":{"type":"string"},"description":"Путь GET /api/v1/requests/{id}."},"Preference-Applied":{"schema":{"type":"string","const":"respond-async"}}}},"502":{"description":"Генерация завершилась ошибкой. Проверьте billing.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/GenerationError"}}},"headers":{"X-Generation-ID":{"schema":{"$ref":"#/components/schemas/PublicId"}}}},"default":{"description":"Ошибка валидации, настроек, доступа или баланса.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}},"headers":{"X-Generation-ID":{"schema":{"$ref":"#/components/schemas/PublicId"}}}}}}},"/music/add-vocals":{"post":{"operationId":"create_music_add_vocals","summary":"Suno: add vocals","description":"JSON-объект. Действуют ограничения выбранной модели и серверного окружения. Параметры допускаются только совместимым проверенным маршрутом; неподдержанные поля не отбрасываются. Повтор с прежним Idempotency-Key возвращает существующую операцию. После очистки её содержимого возвращается 410.","parameters":[{"name":"Idempotency-Key","in":"header","required":false,"schema":{"type":"string","minLength":1,"maxLength":191,"pattern":"^[A-Za-z0-9._:\\-]+$"},"description":"Область ключа — клиент. Изменение параметров с прежним ключом даёт 409."},{"name":"Prefer","in":"header","schema":{"type":"string"},"description":"respond-async: вернуть собственный ID без ожидания поставщика, в том числе при stream=true. Формат тела и Idempotency-Key сохраняются. Готовый повтор возвращает сохранённый результат."}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"$ref":"#/components/schemas/SunoInput_music_add_vocals"}}}},"responses":{"202":{"description":"Операция принята. Опросите GET /requests/{id}.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Request"}}},"headers":{"X-Generation-ID":{"schema":{"$ref":"#/components/schemas/PublicId"}},"Location":{"schema":{"type":"string"},"description":"Путь GET /api/v1/requests/{id}."},"Preference-Applied":{"schema":{"type":"string","const":"respond-async"}}}},"502":{"description":"Генерация завершилась ошибкой. Проверьте billing.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/GenerationError"}}},"headers":{"X-Generation-ID":{"schema":{"$ref":"#/components/schemas/PublicId"}}}},"default":{"description":"Ошибка валидации, настроек, доступа или баланса.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}},"headers":{"X-Generation-ID":{"schema":{"$ref":"#/components/schemas/PublicId"}}}}}}},"/music/time-stamped-lyrics":{"post":{"operationId":"create_music_time_stamped_lyrics","summary":"Suno: time stamped lyrics","description":"JSON-объект. Действуют ограничения выбранной модели и серверного окружения. Параметры допускаются только совместимым проверенным маршрутом; неподдержанные поля не отбрасываются. Повтор с прежним Idempotency-Key возвращает существующую операцию. После очистки её содержимого возвращается 410.","parameters":[{"name":"Idempotency-Key","in":"header","required":false,"schema":{"type":"string","minLength":1,"maxLength":191,"pattern":"^[A-Za-z0-9._:\\-]+$"},"description":"Область ключа — клиент. Изменение параметров с прежним ключом даёт 409."},{"name":"Prefer","in":"header","schema":{"type":"string"},"description":"respond-async: вернуть собственный ID без ожидания поставщика, в том числе при stream=true. Формат тела и Idempotency-Key сохраняются. Готовый повтор возвращает сохранённый результат."}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"$ref":"#/components/schemas/SunoInput_music_time_stamped_lyrics"}}}},"responses":{"202":{"description":"Операция принята. Опросите GET /requests/{id}.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Request"}}},"headers":{"X-Generation-ID":{"schema":{"$ref":"#/components/schemas/PublicId"}},"Location":{"schema":{"type":"string"},"description":"Путь GET /api/v1/requests/{id}."},"Preference-Applied":{"schema":{"type":"string","const":"respond-async"}}}},"502":{"description":"Генерация завершилась ошибкой. Проверьте billing.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/GenerationError"}}},"headers":{"X-Generation-ID":{"schema":{"$ref":"#/components/schemas/PublicId"}}}},"default":{"description":"Ошибка валидации, настроек, доступа или баланса.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}},"headers":{"X-Generation-ID":{"schema":{"$ref":"#/components/schemas/PublicId"}}}}}}},"/music/boost-music-style":{"post":{"operationId":"create_music_boost_music_style","summary":"Suno: boost music style","description":"JSON-объект. Действуют ограничения выбранной модели и серверного окружения. Параметры допускаются только совместимым проверенным маршрутом; неподдержанные поля не отбрасываются. Повтор с прежним Idempotency-Key возвращает существующую операцию. После очистки её содержимого возвращается 410.","parameters":[{"name":"Idempotency-Key","in":"header","required":false,"schema":{"type":"string","minLength":1,"maxLength":191,"pattern":"^[A-Za-z0-9._:\\-]+$"},"description":"Область ключа — клиент. Изменение параметров с прежним ключом даёт 409."},{"name":"Prefer","in":"header","schema":{"type":"string"},"description":"respond-async: вернуть собственный ID без ожидания поставщика, в том числе при stream=true. Формат тела и Idempotency-Key сохраняются. Готовый повтор возвращает сохранённый результат."}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"$ref":"#/components/schemas/SunoInput_music_boost_music_style"}}}},"responses":{"202":{"description":"Операция принята. Опросите GET /requests/{id}.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Request"}}},"headers":{"X-Generation-ID":{"schema":{"$ref":"#/components/schemas/PublicId"}},"Location":{"schema":{"type":"string"},"description":"Путь GET /api/v1/requests/{id}."},"Preference-Applied":{"schema":{"type":"string","const":"respond-async"}}}},"502":{"description":"Генерация завершилась ошибкой. Проверьте billing.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/GenerationError"}}},"headers":{"X-Generation-ID":{"schema":{"$ref":"#/components/schemas/PublicId"}}}},"default":{"description":"Ошибка валидации, настроек, доступа или баланса.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}},"headers":{"X-Generation-ID":{"schema":{"$ref":"#/components/schemas/PublicId"}}}}}}},"/music/cover-generate":{"post":{"operationId":"create_music_cover_generate","summary":"Suno: cover generate","description":"JSON-объект. Действуют ограничения выбранной модели и серверного окружения. Параметры допускаются только совместимым проверенным маршрутом; неподдержанные поля не отбрасываются. Повтор с прежним Idempotency-Key возвращает существующую операцию. После очистки её содержимого возвращается 410.","parameters":[{"name":"Idempotency-Key","in":"header","required":false,"schema":{"type":"string","minLength":1,"maxLength":191,"pattern":"^[A-Za-z0-9._:\\-]+$"},"description":"Область ключа — клиент. Изменение параметров с прежним ключом даёт 409."},{"name":"Prefer","in":"header","schema":{"type":"string"},"description":"respond-async: вернуть собственный ID без ожидания поставщика, в том числе при stream=true. Формат тела и Idempotency-Key сохраняются. Готовый повтор возвращает сохранённый результат."}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"$ref":"#/components/schemas/SunoInput_music_cover_generate"}}}},"responses":{"202":{"description":"Операция принята. Опросите GET /requests/{id}.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Request"}}},"headers":{"X-Generation-ID":{"schema":{"$ref":"#/components/schemas/PublicId"}},"Location":{"schema":{"type":"string"},"description":"Путь GET /api/v1/requests/{id}."},"Preference-Applied":{"schema":{"type":"string","const":"respond-async"}}}},"502":{"description":"Генерация завершилась ошибкой. Проверьте billing.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/GenerationError"}}},"headers":{"X-Generation-ID":{"schema":{"$ref":"#/components/schemas/PublicId"}}}},"default":{"description":"Ошибка валидации, настроек, доступа или баланса.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}},"headers":{"X-Generation-ID":{"schema":{"$ref":"#/components/schemas/PublicId"}}}}}}},"/music/replace-section":{"post":{"operationId":"create_music_replace_section","summary":"Suno: replace section","description":"JSON-объект. Действуют ограничения выбранной модели и серверного окружения. Параметры допускаются только совместимым проверенным маршрутом; неподдержанные поля не отбрасываются. Повтор с прежним Idempotency-Key возвращает существующую операцию. После очистки её содержимого возвращается 410.","parameters":[{"name":"Idempotency-Key","in":"header","required":false,"schema":{"type":"string","minLength":1,"maxLength":191,"pattern":"^[A-Za-z0-9._:\\-]+$"},"description":"Область ключа — клиент. Изменение параметров с прежним ключом даёт 409."},{"name":"Prefer","in":"header","schema":{"type":"string"},"description":"respond-async: вернуть собственный ID без ожидания поставщика, в том числе при stream=true. Формат тела и Idempotency-Key сохраняются. Готовый повтор возвращает сохранённый результат."}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"$ref":"#/components/schemas/SunoInput_music_replace_section"}}}},"responses":{"202":{"description":"Операция принята. Опросите GET /requests/{id}.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Request"}}},"headers":{"X-Generation-ID":{"schema":{"$ref":"#/components/schemas/PublicId"}},"Location":{"schema":{"type":"string"},"description":"Путь GET /api/v1/requests/{id}."},"Preference-Applied":{"schema":{"type":"string","const":"respond-async"}}}},"502":{"description":"Генерация завершилась ошибкой. Проверьте billing.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/GenerationError"}}},"headers":{"X-Generation-ID":{"schema":{"$ref":"#/components/schemas/PublicId"}}}},"default":{"description":"Ошибка валидации, настроек, доступа или баланса.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}},"headers":{"X-Generation-ID":{"schema":{"$ref":"#/components/schemas/PublicId"}}}}}}},"/music/generate-persona":{"post":{"operationId":"create_music_generate_persona","summary":"Suno: generate persona","description":"JSON-объект. Действуют ограничения выбранной модели и серверного окружения. Параметры допускаются только совместимым проверенным маршрутом; неподдержанные поля не отбрасываются. Повтор с прежним Idempotency-Key возвращает существующую операцию. После очистки её содержимого возвращается 410.","parameters":[{"name":"Idempotency-Key","in":"header","required":false,"schema":{"type":"string","minLength":1,"maxLength":191,"pattern":"^[A-Za-z0-9._:\\-]+$"},"description":"Область ключа — клиент. Изменение параметров с прежним ключом даёт 409."},{"name":"Prefer","in":"header","schema":{"type":"string"},"description":"respond-async: вернуть собственный ID без ожидания поставщика, в том числе при stream=true. Формат тела и Idempotency-Key сохраняются. Готовый повтор возвращает сохранённый результат."}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"$ref":"#/components/schemas/SunoInput_music_generate_persona"}}}},"responses":{"202":{"description":"Операция принята. Опросите GET /requests/{id}.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Request"}}},"headers":{"X-Generation-ID":{"schema":{"$ref":"#/components/schemas/PublicId"}},"Location":{"schema":{"type":"string"},"description":"Путь GET /api/v1/requests/{id}."},"Preference-Applied":{"schema":{"type":"string","const":"respond-async"}}}},"502":{"description":"Генерация завершилась ошибкой. Проверьте billing.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/GenerationError"}}},"headers":{"X-Generation-ID":{"schema":{"$ref":"#/components/schemas/PublicId"}}}},"default":{"description":"Ошибка валидации, настроек, доступа или баланса.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}},"headers":{"X-Generation-ID":{"schema":{"$ref":"#/components/schemas/PublicId"}}}}}}},"/music/mashup":{"post":{"operationId":"create_music_mashup","summary":"Suno: mashup","description":"JSON-объект. Действуют ограничения выбранной модели и серверного окружения. Параметры допускаются только совместимым проверенным маршрутом; неподдержанные поля не отбрасываются. Повтор с прежним Idempotency-Key возвращает существующую операцию. После очистки её содержимого возвращается 410.","parameters":[{"name":"Idempotency-Key","in":"header","required":false,"schema":{"type":"string","minLength":1,"maxLength":191,"pattern":"^[A-Za-z0-9._:\\-]+$"},"description":"Область ключа — клиент. Изменение параметров с прежним ключом даёт 409."},{"name":"Prefer","in":"header","schema":{"type":"string"},"description":"respond-async: вернуть собственный ID без ожидания поставщика, в том числе при stream=true. Формат тела и Idempotency-Key сохраняются. Готовый повтор возвращает сохранённый результат."}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"$ref":"#/components/schemas/SunoInput_music_mashup"}}}},"responses":{"202":{"description":"Операция принята. Опросите GET /requests/{id}.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Request"}}},"headers":{"X-Generation-ID":{"schema":{"$ref":"#/components/schemas/PublicId"}},"Location":{"schema":{"type":"string"},"description":"Путь GET /api/v1/requests/{id}."},"Preference-Applied":{"schema":{"type":"string","const":"respond-async"}}}},"502":{"description":"Генерация завершилась ошибкой. Проверьте billing.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/GenerationError"}}},"headers":{"X-Generation-ID":{"schema":{"$ref":"#/components/schemas/PublicId"}}}},"default":{"description":"Ошибка валидации, настроек, доступа или баланса.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}},"headers":{"X-Generation-ID":{"schema":{"$ref":"#/components/schemas/PublicId"}}}}}}},"/music/suno-recovery-audio":{"post":{"operationId":"create_music_suno_recovery_audio","summary":"Suno: suno recovery audio","description":"JSON-объект. Действуют ограничения выбранной модели и серверного окружения. Параметры допускаются только совместимым проверенным маршрутом; неподдержанные поля не отбрасываются. Повтор с прежним Idempotency-Key возвращает существующую операцию. После очистки её содержимого возвращается 410.","parameters":[{"name":"Idempotency-Key","in":"header","required":false,"schema":{"type":"string","minLength":1,"maxLength":191,"pattern":"^[A-Za-z0-9._:\\-]+$"},"description":"Область ключа — клиент. Изменение параметров с прежним ключом даёт 409."},{"name":"Prefer","in":"header","schema":{"type":"string"},"description":"respond-async: вернуть собственный ID без ожидания поставщика, в том числе при stream=true. Формат тела и Idempotency-Key сохраняются. Готовый повтор возвращает сохранённый результат."}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"$ref":"#/components/schemas/SunoInput_music_suno_recovery_audio"}}}},"responses":{"202":{"description":"Операция принята. Опросите GET /requests/{id}.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Request"}}},"headers":{"X-Generation-ID":{"schema":{"$ref":"#/components/schemas/PublicId"}},"Location":{"schema":{"type":"string"},"description":"Путь GET /api/v1/requests/{id}."},"Preference-Applied":{"schema":{"type":"string","const":"respond-async"}}}},"502":{"description":"Генерация завершилась ошибкой. Проверьте billing.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/GenerationError"}}},"headers":{"X-Generation-ID":{"schema":{"$ref":"#/components/schemas/PublicId"}}}},"default":{"description":"Ошибка валидации, настроек, доступа или баланса.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}},"headers":{"X-Generation-ID":{"schema":{"$ref":"#/components/schemas/PublicId"}}}}}}},"/music/convert-to-wav-format":{"post":{"operationId":"create_music_convert_to_wav_format","summary":"Suno: convert to wav format","description":"JSON-объект. Действуют ограничения выбранной модели и серверного окружения. Параметры допускаются только совместимым проверенным маршрутом; неподдержанные поля не отбрасываются. Повтор с прежним Idempotency-Key возвращает существующую операцию. После очистки её содержимого возвращается 410.","parameters":[{"name":"Idempotency-Key","in":"header","required":false,"schema":{"type":"string","minLength":1,"maxLength":191,"pattern":"^[A-Za-z0-9._:\\-]+$"},"description":"Область ключа — клиент. Изменение параметров с прежним ключом даёт 409."},{"name":"Prefer","in":"header","schema":{"type":"string"},"description":"respond-async: вернуть собственный ID без ожидания поставщика, в том числе при stream=true. Формат тела и Idempotency-Key сохраняются. Готовый повтор возвращает сохранённый результат."}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"$ref":"#/components/schemas/SunoInput_music_convert_to_wav_format"}}}},"responses":{"202":{"description":"Операция принята. Опросите GET /requests/{id}.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Request"}}},"headers":{"X-Generation-ID":{"schema":{"$ref":"#/components/schemas/PublicId"}},"Location":{"schema":{"type":"string"},"description":"Путь GET /api/v1/requests/{id}."},"Preference-Applied":{"schema":{"type":"string","const":"respond-async"}}}},"502":{"description":"Генерация завершилась ошибкой. Проверьте billing.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/GenerationError"}}},"headers":{"X-Generation-ID":{"schema":{"$ref":"#/components/schemas/PublicId"}}}},"default":{"description":"Ошибка валидации, настроек, доступа или баланса.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}},"headers":{"X-Generation-ID":{"schema":{"$ref":"#/components/schemas/PublicId"}}}}}}},"/music/create-music-video":{"post":{"operationId":"create_music_create_music_video","summary":"Suno: create music video","description":"JSON-объект. Действуют ограничения выбранной модели и серверного окружения. Параметры допускаются только совместимым проверенным маршрутом; неподдержанные поля не отбрасываются. Повтор с прежним Idempotency-Key возвращает существующую операцию. После очистки её содержимого возвращается 410.","parameters":[{"name":"Idempotency-Key","in":"header","required":false,"schema":{"type":"string","minLength":1,"maxLength":191,"pattern":"^[A-Za-z0-9._:\\-]+$"},"description":"Область ключа — клиент. Изменение параметров с прежним ключом даёт 409."},{"name":"Prefer","in":"header","schema":{"type":"string"},"description":"respond-async: вернуть собственный ID без ожидания поставщика, в том числе при stream=true. Формат тела и Idempotency-Key сохраняются. Готовый повтор возвращает сохранённый результат."}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"$ref":"#/components/schemas/SunoInput_music_create_music_video"}}}},"responses":{"202":{"description":"Операция принята. Опросите GET /requests/{id}.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Request"}}},"headers":{"X-Generation-ID":{"schema":{"$ref":"#/components/schemas/PublicId"}},"Location":{"schema":{"type":"string"},"description":"Путь GET /api/v1/requests/{id}."},"Preference-Applied":{"schema":{"type":"string","const":"respond-async"}}}},"502":{"description":"Генерация завершилась ошибкой. Проверьте billing.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/GenerationError"}}},"headers":{"X-Generation-ID":{"schema":{"$ref":"#/components/schemas/PublicId"}}}},"default":{"description":"Ошибка валидации, настроек, доступа или баланса.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}},"headers":{"X-Generation-ID":{"schema":{"$ref":"#/components/schemas/PublicId"}}}}}}},"/music/generate-lyrics":{"post":{"operationId":"create_music_generate_lyrics","summary":"Suno: generate lyrics","description":"JSON-объект. Действуют ограничения выбранной модели и серверного окружения. Параметры допускаются только совместимым проверенным маршрутом; неподдержанные поля не отбрасываются. Повтор с прежним Idempotency-Key возвращает существующую операцию. После очистки её содержимого возвращается 410.","parameters":[{"name":"Idempotency-Key","in":"header","required":false,"schema":{"type":"string","minLength":1,"maxLength":191,"pattern":"^[A-Za-z0-9._:\\-]+$"},"description":"Область ключа — клиент. Изменение параметров с прежним ключом даёт 409."},{"name":"Prefer","in":"header","schema":{"type":"string"},"description":"respond-async: вернуть собственный ID без ожидания поставщика, в том числе при stream=true. Формат тела и Idempotency-Key сохраняются. Готовый повтор возвращает сохранённый результат."}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"$ref":"#/components/schemas/SunoInput_music_generate_lyrics"}}}},"responses":{"202":{"description":"Операция принята. Опросите GET /requests/{id}.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Request"}}},"headers":{"X-Generation-ID":{"schema":{"$ref":"#/components/schemas/PublicId"}},"Location":{"schema":{"type":"string"},"description":"Путь GET /api/v1/requests/{id}."},"Preference-Applied":{"schema":{"type":"string","const":"respond-async"}}}},"502":{"description":"Генерация завершилась ошибкой. Проверьте billing.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/GenerationError"}}},"headers":{"X-Generation-ID":{"schema":{"$ref":"#/components/schemas/PublicId"}}}},"default":{"description":"Ошибка валидации, настроек, доступа или баланса.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}},"headers":{"X-Generation-ID":{"schema":{"$ref":"#/components/schemas/PublicId"}}}}}}},"/music/validation-phrase":{"post":{"operationId":"create_music_validation_phrase","summary":"Suno: validation phrase","description":"JSON-объект. Действуют ограничения выбранной модели и серверного окружения. Параметры допускаются только совместимым проверенным маршрутом; неподдержанные поля не отбрасываются. Повтор с прежним Idempotency-Key возвращает существующую операцию. После очистки её содержимого возвращается 410.","parameters":[{"name":"Idempotency-Key","in":"header","required":false,"schema":{"type":"string","minLength":1,"maxLength":191,"pattern":"^[A-Za-z0-9._:\\-]+$"},"description":"Область ключа — клиент. Изменение параметров с прежним ключом даёт 409."},{"name":"Prefer","in":"header","schema":{"type":"string"},"description":"respond-async: вернуть собственный ID без ожидания поставщика, в том числе при stream=true. Формат тела и Idempotency-Key сохраняются. Готовый повтор возвращает сохранённый результат."}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"$ref":"#/components/schemas/SunoInput_music_validation_phrase"}}}},"responses":{"202":{"description":"Операция принята. Опросите GET /requests/{id}.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Request"}}},"headers":{"X-Generation-ID":{"schema":{"$ref":"#/components/schemas/PublicId"}},"Location":{"schema":{"type":"string"},"description":"Путь GET /api/v1/requests/{id}."},"Preference-Applied":{"schema":{"type":"string","const":"respond-async"}}}},"502":{"description":"Генерация завершилась ошибкой. Проверьте billing.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/GenerationError"}}},"headers":{"X-Generation-ID":{"schema":{"$ref":"#/components/schemas/PublicId"}}}},"default":{"description":"Ошибка валидации, настроек, доступа или баланса.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}},"headers":{"X-Generation-ID":{"schema":{"$ref":"#/components/schemas/PublicId"}}}}}}},"/music/create-voice":{"post":{"operationId":"create_music_create_voice","summary":"Suno: create voice","description":"JSON-объект. Действуют ограничения выбранной модели и серверного окружения. Параметры допускаются только совместимым проверенным маршрутом; неподдержанные поля не отбрасываются. Повтор с прежним Idempotency-Key возвращает существующую операцию. После очистки её содержимого возвращается 410.","parameters":[{"name":"Idempotency-Key","in":"header","required":false,"schema":{"type":"string","minLength":1,"maxLength":191,"pattern":"^[A-Za-z0-9._:\\-]+$"},"description":"Область ключа — клиент. Изменение параметров с прежним ключом даёт 409."},{"name":"Prefer","in":"header","schema":{"type":"string"},"description":"respond-async: вернуть собственный ID без ожидания поставщика, в том числе при stream=true. Формат тела и Idempotency-Key сохраняются. Готовый повтор возвращает сохранённый результат."}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"$ref":"#/components/schemas/SunoInput_music_create_voice"}}}},"responses":{"202":{"description":"Операция принята. Опросите GET /requests/{id}.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Request"}}},"headers":{"X-Generation-ID":{"schema":{"$ref":"#/components/schemas/PublicId"}},"Location":{"schema":{"type":"string"},"description":"Путь GET /api/v1/requests/{id}."},"Preference-Applied":{"schema":{"type":"string","const":"respond-async"}}}},"502":{"description":"Генерация завершилась ошибкой. Проверьте billing.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/GenerationError"}}},"headers":{"X-Generation-ID":{"schema":{"$ref":"#/components/schemas/PublicId"}}}},"default":{"description":"Ошибка валидации, настроек, доступа или баланса.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}},"headers":{"X-Generation-ID":{"schema":{"$ref":"#/components/schemas/PublicId"}}}}}}},"/music/regenerate-phrase":{"post":{"operationId":"create_music_regenerate_phrase","summary":"Suno: regenerate phrase","description":"JSON-объект. Действуют ограничения выбранной модели и серверного окружения. Параметры допускаются только совместимым проверенным маршрутом; неподдержанные поля не отбрасываются. Повтор с прежним Idempotency-Key возвращает существующую операцию. После очистки её содержимого возвращается 410.","parameters":[{"name":"Idempotency-Key","in":"header","required":false,"schema":{"type":"string","minLength":1,"maxLength":191,"pattern":"^[A-Za-z0-9._:\\-]+$"},"description":"Область ключа — клиент. Изменение параметров с прежним ключом даёт 409."},{"name":"Prefer","in":"header","schema":{"type":"string"},"description":"respond-async: вернуть собственный ID без ожидания поставщика, в том числе при stream=true. Формат тела и Idempotency-Key сохраняются. Готовый повтор возвращает сохранённый результат."}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"$ref":"#/components/schemas/SunoInput_music_regenerate_phrase"}}}},"responses":{"202":{"description":"Операция принята. Опросите GET /requests/{id}.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Request"}}},"headers":{"X-Generation-ID":{"schema":{"$ref":"#/components/schemas/PublicId"}},"Location":{"schema":{"type":"string"},"description":"Путь GET /api/v1/requests/{id}."},"Preference-Applied":{"schema":{"type":"string","const":"respond-async"}}}},"502":{"description":"Генерация завершилась ошибкой. Проверьте billing.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/GenerationError"}}},"headers":{"X-Generation-ID":{"schema":{"$ref":"#/components/schemas/PublicId"}}}},"default":{"description":"Ошибка валидации, настроек, доступа или баланса.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}},"headers":{"X-Generation-ID":{"schema":{"$ref":"#/components/schemas/PublicId"}}}}}}},"/music/check-voice":{"post":{"operationId":"create_music_check_voice","summary":"Suno: check voice","description":"JSON-объект. Действуют ограничения выбранной модели и серверного окружения. Параметры допускаются только совместимым проверенным маршрутом; неподдержанные поля не отбрасываются. Повтор с прежним Idempotency-Key возвращает существующую операцию. После очистки её содержимого возвращается 410.","parameters":[{"name":"Idempotency-Key","in":"header","required":false,"schema":{"type":"string","minLength":1,"maxLength":191,"pattern":"^[A-Za-z0-9._:\\-]+$"},"description":"Область ключа — клиент. Изменение параметров с прежним ключом даёт 409."},{"name":"Prefer","in":"header","schema":{"type":"string"},"description":"respond-async: вернуть собственный ID без ожидания поставщика, в том числе при stream=true. Формат тела и Idempotency-Key сохраняются. Готовый повтор возвращает сохранённый результат."}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"$ref":"#/components/schemas/SunoInput_music_check_voice"}}}},"responses":{"202":{"description":"Операция принята. Опросите GET /requests/{id}.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Request"}}},"headers":{"X-Generation-ID":{"schema":{"$ref":"#/components/schemas/PublicId"}},"Location":{"schema":{"type":"string"},"description":"Путь GET /api/v1/requests/{id}."},"Preference-Applied":{"schema":{"type":"string","const":"respond-async"}}}},"502":{"description":"Генерация завершилась ошибкой. Проверьте billing.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/GenerationError"}}},"headers":{"X-Generation-ID":{"schema":{"$ref":"#/components/schemas/PublicId"}}}},"default":{"description":"Ошибка валидации, настроек, доступа или баланса.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}},"headers":{"X-Generation-ID":{"schema":{"$ref":"#/components/schemas/PublicId"}}}}}}},"/music/separate-vocals":{"post":{"operationId":"create_music_separate_vocals","summary":"Suno: separate vocals","description":"JSON-объект. Действуют ограничения выбранной модели и серверного окружения. Параметры допускаются только совместимым проверенным маршрутом; неподдержанные поля не отбрасываются. Повтор с прежним Idempotency-Key возвращает существующую операцию. После очистки её содержимого возвращается 410.","parameters":[{"name":"Idempotency-Key","in":"header","required":false,"schema":{"type":"string","minLength":1,"maxLength":191,"pattern":"^[A-Za-z0-9._:\\-]+$"},"description":"Область ключа — клиент. Изменение параметров с прежним ключом даёт 409."},{"name":"Prefer","in":"header","schema":{"type":"string"},"description":"respond-async: вернуть собственный ID без ожидания поставщика, в том числе при stream=true. Формат тела и Idempotency-Key сохраняются. Готовый повтор возвращает сохранённый результат."}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"$ref":"#/components/schemas/SunoInput_music_separate_vocals"}}}},"responses":{"202":{"description":"Операция принята. Опросите GET /requests/{id}.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Request"}}},"headers":{"X-Generation-ID":{"schema":{"$ref":"#/components/schemas/PublicId"}},"Location":{"schema":{"type":"string"},"description":"Путь GET /api/v1/requests/{id}."},"Preference-Applied":{"schema":{"type":"string","const":"respond-async"}}}},"502":{"description":"Генерация завершилась ошибкой. Проверьте billing.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/GenerationError"}}},"headers":{"X-Generation-ID":{"schema":{"$ref":"#/components/schemas/PublicId"}}}},"default":{"description":"Ошибка валидации, настроек, доступа или баланса.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}},"headers":{"X-Generation-ID":{"schema":{"$ref":"#/components/schemas/PublicId"}}}}}}},"/music/generate-midi-from-audio":{"post":{"operationId":"create_music_generate_midi_from_audio","summary":"Suno: generate midi from audio","description":"JSON-объект. Действуют ограничения выбранной модели и серверного окружения. Параметры допускаются только совместимым проверенным маршрутом; неподдержанные поля не отбрасываются. Повтор с прежним Idempotency-Key возвращает существующую операцию. После очистки её содержимого возвращается 410.","parameters":[{"name":"Idempotency-Key","in":"header","required":false,"schema":{"type":"string","minLength":1,"maxLength":191,"pattern":"^[A-Za-z0-9._:\\-]+$"},"description":"Область ключа — клиент. Изменение параметров с прежним ключом даёт 409."},{"name":"Prefer","in":"header","schema":{"type":"string"},"description":"respond-async: вернуть собственный ID без ожидания поставщика, в том числе при stream=true. Формат тела и Idempotency-Key сохраняются. Готовый повтор возвращает сохранённый результат."}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"$ref":"#/components/schemas/SunoInput_music_generate_midi_from_audio"}}}},"responses":{"202":{"description":"Операция принята. Опросите GET /requests/{id}.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Request"}}},"headers":{"X-Generation-ID":{"schema":{"$ref":"#/components/schemas/PublicId"}},"Location":{"schema":{"type":"string"},"description":"Путь GET /api/v1/requests/{id}."},"Preference-Applied":{"schema":{"type":"string","const":"respond-async"}}}},"502":{"description":"Генерация завершилась ошибкой. Проверьте billing.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/GenerationError"}}},"headers":{"X-Generation-ID":{"schema":{"$ref":"#/components/schemas/PublicId"}}}},"default":{"description":"Ошибка валидации, настроек, доступа или баланса.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}},"headers":{"X-Generation-ID":{"schema":{"$ref":"#/components/schemas/PublicId"}}}}}}},"/music/sounds":{"post":{"operationId":"create_music_sounds","summary":"Suno: sounds","description":"JSON-объект. Действуют ограничения выбранной модели и серверного окружения. Параметры допускаются только совместимым проверенным маршрутом; неподдержанные поля не отбрасываются. Повтор с прежним Idempotency-Key возвращает существующую операцию. После очистки её содержимого возвращается 410.","parameters":[{"name":"Idempotency-Key","in":"header","required":false,"schema":{"type":"string","minLength":1,"maxLength":191,"pattern":"^[A-Za-z0-9._:\\-]+$"},"description":"Область ключа — клиент. Изменение параметров с прежним ключом даёт 409."},{"name":"Prefer","in":"header","schema":{"type":"string"},"description":"respond-async: вернуть собственный ID без ожидания поставщика, в том числе при stream=true. Формат тела и Idempotency-Key сохраняются. Готовый повтор возвращает сохранённый результат."}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"$ref":"#/components/schemas/SunoInput_music_sounds"}}}},"responses":{"202":{"description":"Операция принята. Опросите GET /requests/{id}.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Request"}}},"headers":{"X-Generation-ID":{"schema":{"$ref":"#/components/schemas/PublicId"}},"Location":{"schema":{"type":"string"},"description":"Путь GET /api/v1/requests/{id}."},"Preference-Applied":{"schema":{"type":"string","const":"respond-async"}}}},"502":{"description":"Генерация завершилась ошибкой. Проверьте billing.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/GenerationError"}}},"headers":{"X-Generation-ID":{"schema":{"$ref":"#/components/schemas/PublicId"}}}},"default":{"description":"Ошибка валидации, настроек, доступа или баланса.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}},"headers":{"X-Generation-ID":{"schema":{"$ref":"#/components/schemas/PublicId"}}}}}}},"/requests/by-idempotency-key":{"get":{"operationId":"getRequestByIdempotencyKey","summary":"Найти исходную операцию по ключу клиента","responses":{"200":{"description":"Собственные данные клиента.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Request"}}}},"default":{"description":"Ошибка доступа или параметров.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}}},"parameters":[{"name":"Idempotency-Key","in":"header","required":true,"schema":{"type":"string","minLength":1,"maxLength":191,"pattern":"^[A-Za-z0-9._:\\-]+$"},"description":"Ключ исходного POST в пределах владельца Bearer. Чужой или неизвестный ключ — 404; отсутствующий или неверный — 422. Не создаёт запрос и возвращает метаданные даже после очистки содержимого."}]}}},"components":{"securitySchemes":{"ClientKey":{"type":"http","scheme":"bearer","description":"API-ключ клиента Formula AI."}},"schemas":{"PublicId":{"type":"string","pattern":"^[a-f0-9]{32}$"},"Money":{"type":"string","pattern":"^-?[0-9]+\\.[0-9]{7}$","description":"Рубли, точная десятичная строка с 7 знаками."},"CostEstimateInput":{"type":"object","properties":{"operation":{"type":"string"},"input":{"type":"object","description":"Обычное тело выбранной операции с публичным model."},"estimated_usage":{"type":"object","additionalProperties":{"type":"integer","minimum":0},"description":"Необязательные количества по названиям тарифов: prompt, completion и другие опубликованные единицы."}},"required":["operation","input"]},"CostEstimate":{"type":"object","properties":{"object":{"const":"ai_service.cost_estimate"},"model":{"type":"string"},"operation":{"type":"string"},"currency":{"const":"RUB"},"status":{"enum":["estimated","unknown"]},"minimum":{"type":["string","null"],"pattern":"^[0-9]+\\.[0-9]{7}$"},"maximum":{"type":["string","null"],"pattern":"^[0-9]+\\.[0-9]{7}$"},"estimated_usage":{"type":"object","additionalProperties":{"type":"integer","minimum":0}},"assumptions":{"type":"array","items":{"type":"string"}},"missing":{"type":"array","items":{"type":"string"}}},"required":["object","model","operation","currency","status","minimum","maximum","estimated_usage","assumptions","missing"]},"Billing":{"type":"object","properties":{"currency":{"const":"RUB"},"charged":{"type":"string","pattern":"^-?[0-9]+\\.[0-9]{7}$","description":"Рубли, точная десятичная строка с 7 знаками."},"refunded":{"type":"string","pattern":"^-?[0-9]+\\.[0-9]{7}$","description":"Рубли, точная десятичная строка с 7 знаками."},"status":{"enum":["pending","confirmed"]}},"required":["currency","charged","refunded","status"]},"Usage":{"type":"object","description":"Применимые единицы: prompt_tokens, completion_tokens, total_tokens, input_tokens, output_tokens, token_details, images, videos, audio_seconds, duration_seconds. Счётчики могут быть точными численными строками. Поля себестоимости не выдаются."},"ErrorDetail":{"type":"object","properties":{"message":{"type":"string"},"code":{"type":"string"},"type":{"type":"string"},"param":{"type":["string","null"]}},"required":["message","code"]},"Error":{"type":"object","properties":{"error":{"$ref":"#/components/schemas/ErrorDetail"},"request_id":{"$ref":"#/components/schemas/PublicId"}},"required":["error","request_id"]},"GenerationError":{"type":"object","properties":{"error":{"$ref":"#/components/schemas/ErrorDetail"},"request_id":{"$ref":"#/components/schemas/PublicId"},"billing":{"$ref":"#/components/schemas/Billing"}},"required":["error","request_id","billing"]},"Balance":{"type":"object","properties":{"currency":{"const":"RUB"},"balance":{"type":"string","pattern":"^-?[0-9]+\\.[0-9]{7}$","description":"Рубли, точная десятичная строка с 7 знаками."},"reserved":{"type":"string","pattern":"^-?[0-9]+\\.[0-9]{7}$","description":"Рубли, точная десятичная строка с 7 знаками."},"available":{"type":"string","pattern":"^-?[0-9]+\\.[0-9]{7}$","description":"Рубли, точная десятичная строка с 7 знаками."}},"required":["currency","balance","reserved","available"]},"Models":{"type":"object","properties":{"object":{"const":"list"},"data":{"type":"array","items":{"type":"object","properties":{"id":{"type":"string"},"object":{"const":"model"},"owned_by":{"const":"ai-service"},"name":{"type":"string"},"operations":{"type":"array","items":{"type":"object","properties":{"id":{"type":"string"},"category":{"type":"string"},"verification_level":{"enum":["basic","full","unrecorded","unverified"],"description":"basic — реальный результат и расход подтверждены; все варианты параметров, ошибок и возвратов не проверены. unverified — опубликовано по разрешению владельца без реального вызова."}},"required":["id","category"]}}},"required":["id","object","owned_by","name","operations"]}}},"required":["object","data"]},"Requests":{"type":"object","properties":{"data":{"type":"array","maxItems":50,"items":{"$ref":"#/components/schemas/Request"}},"page":{"type":"integer","minimum":1,"maximum":1000000}},"required":["data","page"]},"Transactions":{"type":"object","properties":{"data":{"type":"array","maxItems":50,"items":{"$ref":"#/components/schemas/Transaction"}},"page":{"type":"integer","minimum":1,"maximum":1000000}},"required":["data","page"]},"Transaction":{"type":"object","properties":{"id":{"type":["string","integer"],"description":"Численный идентификатор. MySQL может вернуть его строкой."},"type":{"enum":["manual_set","manual_add","manual_adjust","reserve","charge","refund","release"]},"amount":{"type":"string","pattern":"^-?[0-9]+\\.[0-9]{7}$","description":"Рубли, точная десятичная строка с 7 знаками."},"reserved_delta":{"type":"string","pattern":"^-?[0-9]+\\.[0-9]{7}$","description":"Рубли, точная десятичная строка с 7 знаками."},"balance_after":{"type":"string","pattern":"^-?[0-9]+\\.[0-9]{7}$","description":"Рубли, точная десятичная строка с 7 знаками."},"reserved_after":{"type":"string","pattern":"^-?[0-9]+\\.[0-9]{7}$","description":"Рубли, точная десятичная строка с 7 знаками."},"request_id":{"type":["string","null"]},"original_operation_id":{"type":["string","integer","null"]},"created_at":{"type":["string","null"],"description":"Время сервиса Europe/Moscow: YYYY-MM-DD HH:mm:ss, возможно дробная часть секунд."}},"required":["id","type","amount","reserved_delta","balance_after","reserved_after","request_id","original_operation_id","created_at"]},"Request":{"type":"object","properties":{"id":{"$ref":"#/components/schemas/PublicId"},"object":{"const":"ai_service.request"},"model":{"type":"string"},"operation":{"type":"string"},"status":{"enum":["queued","running","waiting","saving_media","uncertain","completed","failed","cancelled"]},"created_at":{"type":["string","null"],"description":"Время сервиса Europe/Moscow: YYYY-MM-DD HH:mm:ss, возможно дробная часть секунд."},"finished_at":{"type":["string","null"],"description":"Время сервиса Europe/Moscow: YYYY-MM-DD HH:mm:ss, возможно дробная часть секунд."},"content_expires_at":{"type":["string","null"],"description":"Время сервиса Europe/Moscow: YYYY-MM-DD HH:mm:ss, возможно дробная часть секунд."},"content_expired":{"type":"boolean"},"usage":{"$ref":"#/components/schemas/Usage"},"billing":{"$ref":"#/components/schemas/Billing"},"result":{"type":["object","null"],"description":"Результат выбранной операции. Файлы — только адреса Formula AI либо запрошенный base64."},"error":{"anyOf":[{"$ref":"#/components/schemas/ErrorDetail"},{"type":"null"}]}},"required":["id","object","model","operation","status","created_at","finished_at","content_expires_at","content_expired","usage","billing","result","error"]},"ChatInput":{"type":"object","properties":{"model":{"type":"string","minLength":1},"messages":{"type":"array","minItems":1,"items":{"$ref":"#/components/schemas/Message"}},"stream":{"type":"boolean","default":false,"description":"Потоковая выдача текста или аудио. Маршрут обязан поддерживать этот протокол; аудио требует stream=true."},"temperature":{"type":"number","minimum":0,"maximum":2},"top_p":{"type":"number","minimum":0,"maximum":1},"frequency_penalty":{"type":"number","minimum":-2,"maximum":2},"presence_penalty":{"type":"number","minimum":-2,"maximum":2},"max_tokens":{"type":"integer","minimum":1},"max_completion_tokens":{"type":"integer","minimum":1},"n":{"type":"integer","minimum":1},"seed":{"type":"integer"},"stop":{"type":["string","array"]},"tools":{"type":"array","items":{"type":"object"},"description":"Функции в формате Chat Completions; type=function и function.name/parameters. Поддержка зависит от модели."},"tool_choice":{"type":["string","object"]},"response_format":{"type":"object","properties":{"type":{"enum":["text","json_object","json_schema"]},"json_schema":{"type":"object"}},"required":["type"]},"reasoning":{"type":"object"},"reasoning_effort":{"type":"string"},"modalities":{"type":"array","items":{"type":"string"}},"image_config":{"type":"object","properties":{"aspect_ratio":{"type":"string"},"image_size":{"enum":["512","1K","2K","4K"]}},"required":[]},"audio":{"type":"object","properties":{"voice":{"enum":["alloy","ash","ballad","coral","echo","fable","onyx","nova","sage","shimmer","verse"]},"format":{"const":"pcm16"}},"required":["voice","format"],"additionalProperties":false},"stream_options":{"type":"object","properties":{"include_usage":{"type":"boolean"}},"required":["include_usage"],"additionalProperties":false}},"required":["model","messages"],"allOf":[{"if":{"required":["stream_options"]},"then":{"properties":{"stream":{"const":true}},"required":["stream"]}},{"if":{"required":["modalities"],"properties":{"modalities":{"contains":{"const":"audio"}}}},"then":{"required":["stream","audio"],"properties":{"stream":{"const":true},"modalities":{"type":"array","minItems":2,"maxItems":2,"uniqueItems":true,"items":{"enum":["text","audio"]}}}}}],"description":"Полный набор полей ограничивается возможностями выбранной модели. Аудио: modalities=[text,audio], audio.voice и audio.format=pcm16, моно 24 кГц. Параметры инструментов, формата ответа и image_config не универсальны."},"AudioChunk":{"type":"object","properties":{"data":{"type":"string","minLength":1,"contentEncoding":"base64","description":"Независимый base64 фрагмента PCM16, моно 24 кГц. Декодировать каждый фрагмент отдельно и соединять байты."},"transcript":{"type":"string"}},"required":[],"additionalProperties":false},"AudioResult":{"type":"object","properties":{"url":{"type":"string","format":"uri","description":"Защищённый файл Formula AI; для скачивания нужен исходный клиентский Bearer-ключ."},"format":{"const":"pcm16"},"sample_rate":{"const":24000},"channels":{"const":1},"transcript":{"type":"string"}},"required":["url","format","sample_rate","channels"],"additionalProperties":false},"StreamDelta":{"type":"object","properties":{"role":{"type":["string","null"]},"content":{"type":["string","null"]},"reasoning":{"type":["string","null"]},"refusal":{"type":["string","null"]},"reasoning_details":{"type":["array","null"]},"tool_calls":{"type":["array","null"]},"function_call":{"type":["object","null"]},"audio":{"anyOf":[{"$ref":"#/components/schemas/AudioChunk"},{"type":"null"}]}},"required":[],"additionalProperties":false},"StreamChunk":{"type":"object","properties":{"id":{"$ref":"#/components/schemas/PublicId"},"object":{"const":"chat.completion.chunk"},"model":{"type":"string"},"created":{"type":"integer"},"choices":{"type":"array","items":{"type":"object","properties":{"index":{"type":"integer","minimum":0},"delta":{"$ref":"#/components/schemas/StreamDelta"},"finish_reason":{"type":["string","null"]},"logprobs":{"type":["object","null"]}},"required":["index","delta"]}},"usage":{"$ref":"#/components/schemas/Usage"},"ai_service":{"type":"object","properties":{"request_id":{"$ref":"#/components/schemas/PublicId"},"status":{"type":"string"},"billing":{"$ref":"#/components/schemas/Billing"},"status_url":{"type":"string","description":"Путь GET /api/v1/requests/{id}, передаётся в начальном событии."}},"required":["request_id","status","billing"]}},"required":["id","object","model","choices"]},"StreamError":{"type":"object","properties":{"error":{"$ref":"#/components/schemas/ErrorDetail"},"request_id":{"$ref":"#/components/schemas/PublicId"}},"required":["error","request_id"]},"ImageStreamEvent":{"type":"object","properties":{"id":{"$ref":"#/components/schemas/PublicId"},"object":{"const":"image.generation.event"},"model":{"type":"string"},"type":{"enum":["image_generation.partial_image","image_generation.completed","image_generation.settled","image_generation.accepted"]},"created":{"type":"integer"},"image_index":{"type":"integer","minimum":0},"partial_image_index":{"type":"integer","minimum":0},"data":{"type":"array","items":{"type":"object","properties":{"url":{"$ref":"#/components/schemas/MediaSource"},"b64_json":{"type":"string"},"revised_prompt":{"type":"string"}},"required":[],"anyOf":[{"required":["url"]},{"required":["b64_json"]}]}},"usage":{"$ref":"#/components/schemas/Usage"},"ai_service":{"type":"object","properties":{"request_id":{"$ref":"#/components/schemas/PublicId"},"status":{"type":"string"},"billing":{"$ref":"#/components/schemas/Billing"},"status_url":{"type":"string","description":"Путь GET /api/v1/requests/{id}, передаётся в начальном событии."}},"required":["request_id","status","billing"]}},"required":["id","object","model","type"]},"ImageInput":{"type":"object","properties":{"model":{"type":"string","minLength":1},"prompt":{"type":"string","minLength":1,"maxLength":100000},"input_references":{"type":"array","minItems":1,"items":{"$ref":"#/components/schemas/Reference"}},"mask":{"anyOf":[{"$ref":"#/components/schemas/MediaSource"},{"type":"object"}]},"n":{"type":"integer","minimum":1},"stream":{"type":"boolean","default":false},"stream_options":{"type":"object","properties":{"include_usage":{"type":"boolean"}},"required":["include_usage"],"additionalProperties":false},"size":{"type":"string"},"aspect_ratio":{"type":"string"},"resolution":{"type":"string"},"quality":{"type":"string"},"background":{"type":"string"},"output_format":{"type":"string"},"output_compression":{"type":"integer","minimum":0,"maximum":100},"seed":{"type":"integer"},"response_format":{"enum":["url","b64_json"]}},"required":["model"],"anyOf":[{"required":["prompt"]},{"required":["input_references"]}],"allOf":[{"if":{"required":["stream_options"]},"then":{"properties":{"stream":{"const":true}},"required":["stream"]}}],"description":"Редактирование: input_references. Вариации без prompt допускаются только подтверждённым маршрутом. Маска требует исходного изображения и поддержки моделью. Streaming доступен у совместимого маршрута; превью зависит от модели."},"VideoInput":{"type":"object","properties":{"model":{"type":"string","minLength":1},"prompt":{"type":"string","minLength":1,"maxLength":100000},"duration":{"anyOf":[{"type":"integer","minimum":1},{"const":-1}],"description":"Seedance 2.5: -1 только с видео-референсом и aspect_ratio=adaptive; длительность исходного видео 4–30 секунд. Для остальных режимов — положительное целое."},"resolution":{"type":"string"},"aspect_ratio":{"type":"string"},"size":{"type":"string"},"generate_audio":{"type":"boolean"},"seed":{"type":"integer"},"input_references":{"type":"array","minItems":1,"items":{"$ref":"#/components/schemas/Reference"}},"frame_images":{"type":"array","minItems":1,"items":{"type":"object","properties":{"type":{"const":"image_url"},"image_url":{"type":"object","properties":{"url":{"$ref":"#/components/schemas/MediaSource"}},"required":["url"]},"frame_type":{"enum":["first_frame","last_frame"]}},"required":["type","image_url","frame_type"]}},"reference_image_urls":{"type":"array","items":{"$ref":"#/components/schemas/MediaSource"},"deprecated":true,"description":"Seedance 2.5: совместимый прежний формат. Используйте input_references."},"reference_video_urls":{"type":"array","items":{"$ref":"#/components/schemas/MediaSource"},"deprecated":true,"description":"Seedance 2.5: совместимый прежний формат. Используйте input_references."},"reference_audio_urls":{"type":"array","items":{"$ref":"#/components/schemas/MediaSource"},"deprecated":true,"description":"Seedance 2.5: совместимый прежний формат. Используйте input_references."},"first_frame_url":{"$ref":"#/components/schemas/MediaSource","deprecated":true,"description":"Seedance 2.5: совместимый прежний формат. Используйте frame_images."},"last_frame_url":{"$ref":"#/components/schemas/MediaSource","deprecated":true,"description":"Seedance 2.5: совместимый прежний формат. Используйте frame_images."}},"required":["model","prompt"],"description":"Seedance 2.5 использует общий формат RouterAI и Kie.ai. Не смешивайте два представления референсов или кадров. Опорные кадры не совмещаются с референсами; последний кадр Kie.ai требует первого."},"MusicInput":{"type":"object","properties":{"prompt":{"type":"string","description":"A description of the desired audio content. Optional.\n- Custom mode (`custom_mode=true`): When provided, the prompt is used strictly as lyrics and sung in the generated track. Character limits by model:\n  - V4: Maximum 3000 characters\n  - V4_5, V4_5PLUS, V4_5ALL, V5_5, V5: Maximum 5000 characters\n- Non-custom mode (`custom_mode=false`): When provided, the prompt serves as the core idea. Lyrics are generated automatically based on it and do not strictly match the input. Maximum 3000 characters.\n`prompt` is not required. In non-custom mode, provide at least one of `image_urls`, `video_urls`, `audio_urls`, `style`, or `lyrics`. In custom mode, provide at least one of `style`, `lyrics`, or `negative_tags`. Generation is rejected if all related inputs are empty."},"style":{"type":"string","description":"Music style specification for the generated audio.\n- Character limits by model:\n  - **V4** (Discontinued): Maximum 200 characters\n  - **V4_5 and V4_5PLUS** (Discontinued): Maximum 1000 characters\n  - **V4_5ALL** (Discontinued): Maximum 1000 characters\n  - **V5_5 and V5** (Discontinued): Maximum 1000 characters\n  - **V6, V6_MINI, and V6_WILD**: Maximum 1000 characters\n- Common examples: Jazz, Classical, Electronic, Pop, Rock, Hip-hop, etc.","maxLength":1000},"title":{"type":"string","description":"Title for the generated music track.\n- Required in Custom Mode (`custom_mode: true`).\n- Max length: 80 characters.\n- Will be displayed in player interfaces and filenames.","maxLength":80},"custom_mode":{"type":"boolean","description":"Determines whether advanced parameter customization is enabled.\n- If `true`: Allows detailed control\n- If `false`: Simplified mode"},"instrumental":{"type":"boolean","description":"Determines whether the audio should be instrumental (no lyrics).\n- In Custom Mode (`custom_mode: true`):\n  - If `true`: Only `style` and `title` are required.\n  - If `false`: `style`, `title`, and `prompt` are required (`prompt` is used as the exact lyrics).\n- In Non-custom Mode (`custom_mode: false`):\n  - If `true`: Only `style` and `prompt` are required.\n  - If `false`: `style`, `prompt`, and `lyrics` are required (`lyrics` is used as a lyrics attachment and can be used together with the audio description in `prompt`)."},"negative_tags":{"type":"string","description":"Music styles or traits to exclude from the generated audio. Optional. Use to avoid specific styles."},"vocal_gender":{"type":"string","description":"Vocal gender preference. Optional. Use `m` for male and `f` for female. This parameter is only effective when `custom_mode` is true. In practice, it only increases probability and cannot guarantee male/female voice instructions are followed.","enum":["m","f"]},"style_weight":{"type":"number","description":"Only available when Custom Mode (`custom_mode: true`) is enabled. Strength of adherence to the specified style. Optional. Range 0–1, up to 2 decimal places.","minimum":0,"maximum":1,"multipleOf":0.01},"weirdness_constraint":{"type":"number","description":"Only available when Custom Mode (`custom_mode: true`) is enabled. Controls experimental/creative deviation. Optional. Range 0–1, up to 2 decimal places.","minimum":0,"maximum":1,"multipleOf":0.01},"audio_weight":{"type":"number","description":"Only available when Custom Mode (`custom_mode: true`) is enabled. Relative weight of audio features. Optional. Range 0–1, up to 2 decimal places.\n- `audio_weight` is not supported when there are no vocals","minimum":0,"maximum":1,"multipleOf":0.01},"persona_id":{"type":"string","pattern":"^[a-f0-9]{32}$","description":"ID собственного исходного запроса."},"persona_model":{"type":"string","enum":["style_persona","voice_persona"],"description":"Persona model. Only available for V5 (Discontinued), V5.5 (Discontinued), V6, V6_MINI, and V6_WILD."},"duration":{"type":"number","default":20,"minimum":10,"maximum":360,"description":"Audio duration. Optional; only valid when `custom_mode` is true and the model is V5_5 (Discontinued), V6, V6_MINI, or V6_WILD."},"image_urls":{"type":"array","description":"Image references. Only effective when `custom_mode=false`.\n- Optional\n- Up to 5 images; each image must not exceed 10 MB\n- Supported formats: `jpeg`, `png`, `webp`, and `bmp`","items":{"type":"string"},"maxItems":5},"variety":{"type":"integer","default":1,"minimum":0,"maximum":4,"multipleOf":1,"description":"Only available when Custom Mode (`custom_mode: true`) is enabled. Controls the diversity and stylistic variation of generated results. Optional. Range 0–4, integer, default 1.\n\n- **`0`**: off (exact style) — fully off, strictly the same style\n- **`1`**: normal (balanced variety) — default, balances stability and diversity\n- **`2`**: high (distinct styles) — produces results with clearly different styles\n- **`3`**: extra (bold exploration) — higher variation, encourages bold exploration of different styles\n- **`4`**: max (unreasonably varied) — maximum diversity; results may differ in style very significantly"},"lyrics":{"type":"string","description":"Lyrics for the generated audio. Optional.\n- V6: Maximum 5000 characters.\n- When `custom_mode=true`, `lyrics` is used as lyrics first; if `lyrics` is not provided, `prompt` is used as lyrics.\n- When `custom_mode=false`, `lyrics` is used as a lyrics attachment and can be used together with the audio description in `prompt`.","maxLength":5000},"audio_urls":{"type":"array","items":{"type":"string"},"description":"Audio references. Only effective when `custom_mode=false`.\n- Optional\n- Audio duration must be between 6 seconds and 30 minutes; each audio file must not exceed 500 MB","maxItems":10},"video_urls":{"type":"array","items":{"type":"string"},"description":"Video references. Only effective when `custom_mode=false`.\n- Optional\n- Up to 1 video file; each file must not exceed 100 MB, duration must not exceed 241 seconds, with no minimum duration\n- Supported formats: mp4, mov, and webm","maxItems":1},"model":{"type":"string","minLength":1,"description":"Публичный ID Suno из GET /models."}},"required":["model","custom_mode","instrumental"],"additionalProperties":false,"allOf":[{"if":{"properties":{"custom_mode":{"const":true}},"required":["custom_mode"]},"then":{"required":["title"],"properties":{"prompt":{"maxLength":5000},"title":{"minLength":1},"image_urls":{"maxItems":0},"video_urls":{"maxItems":0},"audio_urls":{"maxItems":0}},"anyOf":[{"required":["style"],"properties":{"style":{"minLength":1}}},{"required":["lyrics"],"properties":{"lyrics":{"minLength":1}}},{"required":["negative_tags"],"properties":{"negative_tags":{"minLength":1}}}]},"else":{"properties":{"prompt":{"maxLength":3000}},"anyOf":[{"required":["style"],"properties":{"style":{"minLength":1}}},{"required":["lyrics"],"properties":{"lyrics":{"minLength":1}}},{"required":["image_urls"],"properties":{"image_urls":{"minItems":1}}},{"required":["audio_urls"],"properties":{"audio_urls":{"minItems":1}}},{"required":["video_urls"],"properties":{"video_urls":{"minItems":1}}}],"not":{"anyOf":[{"required":["duration"]},{"required":["vocal_gender"]},{"required":["style_weight"]},{"required":["weirdness_constraint"]},{"required":["audio_weight"]},{"required":["variety"]}]}}},{"if":{"properties":{"instrumental":{"const":true}},"required":["instrumental"]},"then":{"not":{"required":["audio_weight"]}}}]},"EmbeddingInput":{"type":"object","properties":{"model":{"type":"string","minLength":1},"input":{"anyOf":[{"type":"string","minLength":1,"maxLength":1000000},{"type":"array","minItems":1,"items":{"type":"string","minLength":1,"maxLength":1000000}},{"type":"array","minItems":1,"items":{"type":"integer","minimum":0}},{"type":"array","minItems":1,"items":{"type":"array","minItems":1,"items":{"type":"integer","minimum":0}}}]},"encoding_format":{"enum":["float","base64"]},"dimensions":{"type":"integer","minimum":1,"maximum":2147483647},"user":{"type":"string","minLength":1,"maxLength":256},"input_type":{"enum":["search_query","search_document","classification","clustering"]}},"required":["model","input"],"additionalProperties":false},"RerankInput":{"type":"object","properties":{"model":{"type":"string","minLength":1},"query":{"type":"string","minLength":1,"maxLength":1000000},"documents":{"type":"array","minItems":1,"items":{"type":"string","minLength":1,"maxLength":1000000}},"top_n":{"type":"integer","minimum":1},"return_documents":{"type":"boolean"}},"required":["model","query","documents"],"additionalProperties":false},"DecisionInput":{"type":"object","properties":{"model":{"type":"string","minLength":1},"state":{"type":["string","object","array"]},"questions":{"type":"object","minProperties":1,"additionalProperties":{"type":"object","properties":{"type":{"enum":["noul","choice","score"]},"instructions":{"type":"string","minLength":1,"maxLength":1000000},"criteria":{"type":["object","array"],"description":"noul: необязательные true/false. choice: 1–255 имён с описанием или null. score: 2–10 строк по порядку."}},"required":["type","instructions"]}},"session_id":{"type":"string","minLength":1,"maxLength":256},"user":{"type":"string","minLength":1,"maxLength":256}},"required":["model","state","questions"],"additionalProperties":false},"TranscriptionInput":{"type":"object","properties":{"model":{"type":"string","minLength":1},"input_audio":{"type":"object","properties":{"data":{"type":"string","minLength":1,"maxLength":16000000,"description":"Base64 байтов файла; data URI не принимается."},"format":{"enum":["mp3","wav","flac","m4a","ogg","webm","aac"]}},"required":["data","format"]},"language":{"type":"string","pattern":"^[a-z]{2}$"},"temperature":{"type":"number","minimum":0,"maximum":2},"response_format":{"enum":["json","verbose_json"]},"timestamp_granularities":{"type":"array","items":{"enum":["word","segment"]},"description":"Только при response_format=verbose_json."}},"required":["model","input_audio"],"additionalProperties":false},"SpeechInput":{"type":"object","properties":{"model":{"type":"string","minLength":1},"input":{"type":"string","minLength":1,"maxLength":1000000},"voice":{"type":"string","minLength":1,"maxLength":255},"response_format":{"enum":["mp3","pcm"],"description":"По умолчанию pcm; поддержка формата зависит от модели."},"speed":{"type":"number","exclusiveMinimum":0}},"required":["model","input","voice"],"additionalProperties":false},"Message":{"type":"object","properties":{"role":{"enum":["system","developer","user","assistant","tool"]},"content":{"type":["string","array","null"],"description":"Строка или части text, image_url, video_url, input_audio. input_audio содержит format=mp3/wav и data=base64. Пустое/null содержимое допустимо у assistant с tool_calls."},"name":{"type":"string"},"tool_call_id":{"type":"string","description":"Обязателен при role=tool."},"tool_calls":{"type":"array","items":{"type":"object"}}},"required":["role"]},"MediaSource":{"type":"string","minLength":1,"description":"HTTPS URL публичного сервера или data URI base64. Ограничения формата, размера и хранения задаёт администратор. Частные адреса запрещены."},"Reference":{"anyOf":[{"$ref":"#/components/schemas/MediaSource"},{"type":"object","properties":{"type":{"enum":["image_url","video_url","audio_url"]},"image_url":{"anyOf":[{"$ref":"#/components/schemas/MediaSource"},{"type":"object","properties":{"url":{"$ref":"#/components/schemas/MediaSource"}},"required":["url"]}]},"video_url":{"anyOf":[{"$ref":"#/components/schemas/MediaSource"},{"type":"object","properties":{"url":{"$ref":"#/components/schemas/MediaSource"}},"required":["url"]}]},"audio_url":{"anyOf":[{"$ref":"#/components/schemas/MediaSource"},{"type":"object","properties":{"url":{"$ref":"#/components/schemas/MediaSource"}},"required":["url"]}]}},"required":["type"]}],"description":"Для изображений допускается только image_url. Видео может поддерживать video_url/audio_url."},"ChatResult":{"type":"object","properties":{"id":{"$ref":"#/components/schemas/PublicId"},"model":{"type":"string"},"usage":{"$ref":"#/components/schemas/Usage"},"ai_service":{"type":"object","properties":{"request_id":{"$ref":"#/components/schemas/PublicId"},"billing":{"$ref":"#/components/schemas/Billing"}},"required":["request_id","billing"]},"choices":{"type":"array","items":{"type":"object","properties":{"index":{"type":"integer"},"message":{"type":"object","properties":{"role":{"type":"string"},"content":{"type":["string","null"]},"audio":{"$ref":"#/components/schemas/AudioResult"}},"required":[],"description":"role=assistant, content — текст/null; возможны tool_calls и images с файлами Formula AI. Завершённое аудио содержит собственный URL и параметры PCM16."},"finish_reason":{"type":["string","null"]}},"required":["message"]}}},"required":["id","model","ai_service","choices"]},"ImageResult":{"type":"object","properties":{"id":{"$ref":"#/components/schemas/PublicId"},"model":{"type":"string"},"usage":{"$ref":"#/components/schemas/Usage"},"ai_service":{"type":"object","properties":{"request_id":{"$ref":"#/components/schemas/PublicId"},"billing":{"$ref":"#/components/schemas/Billing"}},"required":["request_id","billing"]},"data":{"type":"array","items":{"type":"object","properties":{"url":{"type":"string"},"b64_json":{"type":"string"},"revised_prompt":{"type":"string"}},"required":[]}}},"required":["id","model","ai_service","data"]},"EmbeddingResult":{"type":"object","properties":{"id":{"$ref":"#/components/schemas/PublicId"},"model":{"type":"string"},"usage":{"$ref":"#/components/schemas/Usage"},"ai_service":{"type":"object","properties":{"request_id":{"$ref":"#/components/schemas/PublicId"},"billing":{"$ref":"#/components/schemas/Billing"}},"required":["request_id","billing"]},"data":{"type":"array","items":{"anyOf":[{"type":"array","items":{"type":"number"}},{"type":"object","properties":{"object":{"type":"string"},"index":{"type":"integer"},"embedding":{"type":["array","string"]}},"required":["embedding"]}]}}},"required":["id","model","ai_service","data"]},"RerankResult":{"type":"object","properties":{"id":{"$ref":"#/components/schemas/PublicId"},"model":{"type":"string"},"usage":{"$ref":"#/components/schemas/Usage"},"ai_service":{"type":"object","properties":{"request_id":{"$ref":"#/components/schemas/PublicId"},"billing":{"$ref":"#/components/schemas/Billing"}},"required":["request_id","billing"]},"results":{"type":"array","items":{"type":"object","properties":{"index":{"type":"integer"},"relevance_score":{"type":"number"},"document":{"type":["string","object"]}},"required":["index","relevance_score"]}}},"required":["id","model","ai_service","results"]},"DecisionResult":{"type":"object","properties":{"id":{"$ref":"#/components/schemas/PublicId"},"model":{"type":"string"},"usage":{"$ref":"#/components/schemas/Usage"},"ai_service":{"type":"object","properties":{"request_id":{"$ref":"#/components/schemas/PublicId"},"billing":{"$ref":"#/components/schemas/Billing"}},"required":["request_id","billing"]},"answers":{"type":"object","additionalProperties":{"type":"object"}}},"required":["id","model","ai_service","answers"]},"TranscriptionResult":{"type":"object","properties":{"id":{"$ref":"#/components/schemas/PublicId"},"model":{"type":"string"},"usage":{"$ref":"#/components/schemas/Usage"},"ai_service":{"type":"object","properties":{"request_id":{"$ref":"#/components/schemas/PublicId"},"billing":{"$ref":"#/components/schemas/Billing"}},"required":["request_id","billing"]},"text":{"type":"string"},"task":{"type":"string"},"language":{"type":"string"},"duration":{"type":"number"},"segments":{"type":"array","items":{"type":"object"}},"words":{"type":"array","items":{"type":"object"}}},"required":["id","model","ai_service","text"]},"SunoInput_music_extend":{"type":"object","properties":{"audio_id":{"type":"string","pattern":"^[a-f0-9]{32}$","description":"ID собственного файла трека."},"prompt":{"type":"string","description":"Lyrics for the extended audio. Optional.\n- Used as lyrics only when `lyrics` is not provided. If `lyrics` is present, `prompt` is not used as lyrics.\n- V6, V6_MINI, and V6_WILD: Maximum 5000 characters.\n- Not required. Source audio (`audio_id`) is enough to generate.\n- Do not pass this parameter when `instrumental` is `true`.","maxLength":5000},"style":{"type":"string","description":"Music style specification for the extended audio. Optional.\n- Not required. Source audio (`audio_id`) is enough to generate.\n- Character limits by model:\n  - **V4**（Discontinued）: Maximum 200 characters\n  - **V4_5 & V4_5PLUS**（Discontinued）: Maximum 1000 characters\n  - **V4_5ALL**（Discontinued）: Maximum 1000 characters\n  - **V5_5 & V5**（Discontinued）: Maximum 1000 characters\n  - **V6, V6_MINI, and V6_WILD**: Maximum 1000 characters\n- Should typically align with the original audio's style for best results.","maxLength":1000},"title":{"type":"string","description":"Title for the extended music track. Optional.\n- Maximum 100 characters.\n- Displayed in player interfaces and filenames.","maxLength":100},"continue_at":{"type":"number","description":"The time point (in seconds) from which to start extending the music.\n- Value range: greater than 0 and less than the total duration of the generated audio.\n- Specifies the position in the original track where the extension should begin."},"negative_tags":{"type":"string","description":"Music styles or traits to exclude from the extended audio. Optional. Use to avoid specific undesired characteristics."},"vocal_gender":{"type":"string","description":"Vocal gender preference. Optional. 'm' denotes a male voice, and 'f' denotes a female voice. In practice, this parameter only influences the probability and does not guarantee strict adherence to the gender instruction. This parameter is not required if `instrumental` is set to `true`.","enum":["m","f"]},"style_weight":{"type":"number","description":"Strength of adherence to the specified style. Optional. Range 0–1, up to 2 decimal places.","minimum":0,"maximum":1,"multipleOf":0.01},"weirdness_constraint":{"type":"number","description":"Controls experimental/creative deviation. Optional. Range 0–1, up to 2 decimal places.","minimum":0,"maximum":1,"multipleOf":0.01},"audio_weight":{"type":"number","description":"Balance weight for audio features vs. other factors. Optional. Range 0–1, up to 2 decimal places.","minimum":0,"maximum":1,"multipleOf":0.01},"persona_id":{"type":"string","pattern":"^[a-f0-9]{32}$","description":"ID собственного исходного запроса."},"persona_model":{"type":"string","enum":["style_persona","voice_persona"],"description":"The persona model is only applicable to the V5 (deactivated), V5.5 (deactivated), V6, V6_MINI, and V6_WILD models."},"instrumental":{"type":"boolean","default":false,"description":"Indicates whether it is an instrumental track. If true, passing the `lyrics`, `prompt`, and `vocal_gender` parameters is prohibited."},"lyrics":{"type":"string","maxLength":5000,"description":"Lyrics for the extended audio. Optional.\n- Takes priority over `prompt` as lyrics. If omitted, `prompt` is used as lyrics when provided.\n- V6, V6_MINI, and V6_WILD: Maximum 5000 characters.\n- Not required. Source audio (`audio_id`) is enough to generate.\n- Do not pass this parameter when `instrumental` is `true`."},"variety":{"type":"integer","default":1,"minimum":0,"maximum":4,"description":"Controls the diversity and stylistic variation of generated results. Optional. Integer range 0–4, default 1.\n\n- **`0`**: off (exact style) — fully off, strictly the same style\n- **`1`**: normal (balanced variety) — default, balances stability and diversity\n- **`2`**: high (distinct styles) — produces results with clearly different styles\n- **`3`**: extra (bold exploration) — higher variation, encourages bold exploration of different styles\n- **`4`**: max (unreasonably varied) — maximum diversity; results may differ in style very significantly"},"model":{"type":"string","minLength":1,"description":"Публичный ID Suno из GET /models."}},"required":["model","audio_id"],"additionalProperties":false,"allOf":[{"if":{"properties":{"instrumental":{"const":true}},"required":["instrumental"]},"then":{"not":{"anyOf":[{"required":["prompt"]},{"required":["lyrics"]},{"required":["vocal_gender"]}]}}}]},"SunoInput_music_upload_and_cover_audio":{"type":"object","properties":{"upload_url":{"type":"string","format":"uri","description":"The URL of the source audio file to cover. Required. Source audio (`upload_url`) is enough to generate. Ensure the uploaded audio does not exceed 8 minutes in length."},"prompt":{"type":"string","description":"Lyrics for the covered audio. Optional.\n- Used as lyrics only when `lyrics` is not provided. If `lyrics` is present, `prompt` is not used as lyrics.\n- V6, V6_MINI, and V6_WILD: Maximum 5000 characters.\n- Not required. Source audio (`upload_url`) is enough to generate.\n- Do not pass this parameter when `instrumental` is `true`.","maxLength":5000},"style":{"type":"string","description":"The music style or genre for the audio. Optional.\n- Not required. Source audio (`upload_url`) is enough to generate.\n- Character limits by model:\n  - **V4**（Discontinued）: Maximum 200 characters\n  - **V4_5 & V4_5PLUS**（Discontinued）: Maximum 1000 characters\n  - **V4_5ALL**（Discontinued）: Maximum 1000 characters\n  - **V5_5 & V5**（Discontinued）: Maximum 1000 characters\n  - **V6, V6_MINI, and V6_WILD**: Maximum 1000 characters","maxLength":1000},"title":{"type":"string","description":"The title of the generated music track. Optional.\n- Maximum 80 characters.\n- Displayed in player interfaces and filenames.","maxLength":80},"instrumental":{"type":"boolean","description":"Determines if the audio should be instrumental (no lyrics).\n- If `true`: generate instrumental music (no vocals). Do not pass `lyrics`, `prompt`, or `vocal_gender`.\n- If `false`: use `lyrics` as lyrics (fall back to `prompt` if `lyrics` is not provided)."},"negative_tags":{"type":"string","description":"Music styles or traits to exclude from the generated audio.  \n- Optional. Use to avoid specific styles.  \n  Example: \"Heavy Metal, Upbeat Drums\""},"vocal_gender":{"type":"string","description":"Vocal gender preference for the singing voice. Optional. Use 'm' for male and 'f' for female. Based on practice, this parameter can only increase the probability but cannot guarantee adherence to male/female voice instructions. Do not pass this parameter when `instrumental` is `true`.","enum":["m","f"]},"style_weight":{"type":"number","description":"Strength of adherence to the specified style. Optional. Range 0–1, up to 2 decimal places.","minimum":0,"maximum":1,"multipleOf":0.01},"weirdness_constraint":{"type":"number","description":"Controls experimental/creative deviation. Optional. Range 0–1, up to 2 decimal places.","minimum":0,"maximum":1,"multipleOf":0.01},"audio_weight":{"type":"number","description":"Balance weight for audio features vs. other factors. Optional. Range 0–1, up to 2 decimal places.","minimum":0,"maximum":1,"multipleOf":0.01},"persona_id":{"type":"string","pattern":"^[a-f0-9]{32}$","description":"ID собственного исходного запроса."},"persona_model":{"type":"string","enum":["voice_persona","style_persona"],"description":"The persona model is only available for models version 5 and 5.5."},"duration":{"type":"integer","default":20,"minimum":10,"maximum":360,"description":"Audio duration in seconds. Optional. Range 10–360, default 20. Valid when `model` is ~~V5_5~~ (Discontinued), V6, V6_MINI, or V6_WILD."},"lyrics":{"type":"string","maxLength":5000,"description":"Lyrics for the covered audio. Optional.\n- Takes priority over `prompt` as lyrics. If omitted, `prompt` is used as lyrics when provided.\n- V6, V6_MINI, and V6_WILD: Maximum 5000 characters.\n- Not required. Source audio (`upload_url`) is enough to generate.\n- Do not pass this parameter when `instrumental` is `true`."},"variety":{"type":"integer","default":1,"minimum":0,"maximum":4,"description":"Controls the diversity and stylistic variation of generated results. Optional. Integer range 0–4, default 1.\n\n- **`0`**: off (exact style) — fully off, strictly the same style\n- **`1`**: normal (balanced variety) — default, balances stability and diversity\n- **`2`**: high (distinct styles) — produces results with clearly different styles\n- **`3`**: extra (bold exploration) — higher variation, encourages bold exploration of different styles\n- **`4`**: max (unreasonably varied) — maximum diversity; results may differ in style very significantly"},"model":{"type":"string","minLength":1,"description":"Публичный ID Suno из GET /models."}},"required":["model","upload_url","instrumental"],"additionalProperties":false,"allOf":[{"if":{"properties":{"instrumental":{"const":true}},"required":["instrumental"]},"then":{"not":{"anyOf":[{"required":["prompt"]},{"required":["lyrics"]},{"required":["vocal_gender"]}]}}}]},"SunoInput_music_upload_and_extend_audio":{"type":"object","properties":{"upload_url":{"type":"string","format":"uri","description":"The URL of the source audio file to extend. Required. Source audio (`upload_url`) is enough to generate. Ensure the uploaded audio does not exceed 8 minutes in length."},"instrumental":{"type":"boolean","description":"Determines whether the audio is instrumental (without lyrics). Optional; defaults to `false`.\n- If `true`: generate instrumental music (no vocals). Do not pass `lyrics`, `prompt`, or `vocal_gender`.\n- If `false`: use `lyrics` as lyrics (fall back to `prompt` if `lyrics` is not provided).","default":false},"prompt":{"type":"string","description":"Lyrics for the extended audio. Optional.\n- Used as lyrics only when `lyrics` is not provided. If `lyrics` is present, `prompt` is not used as lyrics.\n- V6, V6_MINI, and V6_WILD: Maximum 5000 characters.\n- Not required. Source audio (`upload_url`) is enough to generate.\n- Do not pass this parameter when `instrumental` is `true`.","maxLength":5000},"style":{"type":"string","description":"Music style, e.g., Jazz, Classical, Electronic. Optional.\n- Not required. Source audio (`upload_url`) is enough to generate.\n- Character limits by model:\n- **V6, V6_MINI & V6_WILD**: Maximum 1000 characters\n- **V5_5 & V5** (Discontinued): Maximum 1000 characters\n- **V4_5PLUS & V4_5** (Discontinued): Maximum 1000 characters\n- **V4_5ALL** (Discontinued): Maximum 1000 characters\n- **V4** (Discontinued): Maximum 200 characters","maxLength":1000},"title":{"type":"string","description":"Music title. Optional.\n- Maximum 100 characters.\n- Displayed in player interfaces and filenames.","maxLength":100},"continue_at":{"type":"number","description":"The time point (in seconds) from which to start extending the music.\n- Value range: greater than 0 and less than the total duration of the uploaded audio.\n- Specifies the position in the original track where the extension should begin."},"negative_tags":{"type":"string","description":"Music styles to exclude from generation"},"vocal_gender":{"type":"string","description":"Vocal gender preference for the singing voice. Optional. Use 'm' for male and 'f' for female. Based on practice, this parameter can only increase the probability but cannot guarantee adherence to male/female voice instructions. Do not pass this parameter when `instrumental` is `true`.","enum":["m","f"]},"style_weight":{"type":"number","description":"Strength of adherence to the specified style. Optional. Range 0–1, up to 2 decimal places.","minimum":0,"maximum":1,"multipleOf":0.01},"weirdness_constraint":{"type":"number","description":"Controls experimental/creative deviation. Optional. Range 0–1, up to 2 decimal places.","minimum":0,"maximum":1,"multipleOf":0.01},"audio_weight":{"type":"number","description":"Balance weight for audio features vs. other factors. Optional. Range 0–1, up to 2 decimal places.","minimum":0,"maximum":1,"multipleOf":0.01},"persona_id":{"type":"string","pattern":"^[a-f0-9]{32}$","description":"ID собственного исходного запроса."},"persona_model":{"type":"string","enum":["style_persona","voice_persona"],"description":"The persona model is only available for models version V5 (Discontinued), V5_5 (Discontinued), V6, V6_MINI, and V6_WILD."},"lyrics":{"type":"string","maxLength":5000,"description":"Lyrics for the extended audio. Optional.\n- Takes priority over `prompt` as lyrics. If omitted, `prompt` is used as lyrics when provided.\n- V6, V6_MINI, and V6_WILD: Maximum 5000 characters.\n- Not required. Source audio (`upload_url`) is enough to generate.\n- Do not pass this parameter when `instrumental` is `true`."},"variety":{"type":"integer","default":1,"minimum":0,"maximum":4,"description":"Controls the diversity and stylistic variation of generated results. Optional. Integer range 0–4, default 1.\n\n- **`0`**: off (exact style) — fully off, strictly the same style\n- **`1`**: normal (balanced variety) — default, balances stability and diversity\n- **`2`**: high (distinct styles) — produces results with clearly different styles\n- **`3`**: extra (bold exploration) — higher variation, encourages bold exploration of different styles\n- **`4`**: max (unreasonably varied) — maximum diversity; results may differ in style very significantly"},"model":{"type":"string","minLength":1,"description":"Публичный ID Suno из GET /models."}},"required":["model","upload_url"],"additionalProperties":false,"allOf":[{"if":{"properties":{"instrumental":{"const":true}},"required":["instrumental"]},"then":{"not":{"anyOf":[{"required":["prompt"]},{"required":["lyrics"]},{"required":["vocal_gender"]}]}}}]},"SunoInput_music_add_instrumental":{"type":"object","properties":{"upload_url":{"type":"string","format":"uri","description":"URL of the uploaded audio file. Required. Source audio (`upload_url`) is enough to generate once `title`, `negative_tags`, and `tags` are provided."},"title":{"type":"string","description":"Title of the generated music. Required. Will be displayed in the player interface and file name."},"negative_tags":{"type":"string","description":"Music styles or characteristics to exclude from the generated audio. Required. Used to avoid specific unwanted music elements.","maxLength":200},"tags":{"type":"string","description":"Music styles or tags to include in the generated music. Required. Defines the desired music style and characteristics.","maxLength":1000},"vocal_gender":{"type":"string","description":"Vocal gender preference. Optional. 'm' for male, 'f' for female. Based on practice, this parameter can only increase the probability but cannot guarantee adherence to male/female voice instructions.","enum":["m","f"]},"style_weight":{"type":"number","description":"Adherence strength to specified style. Optional. Range 0–1, up to 2 decimal places.","minimum":0,"maximum":1,"multipleOf":0.01},"weirdness_constraint":{"type":"number","description":"Controls experimental/creative deviation level. Optional. Range 0–1, up to 2 decimal places.","minimum":0,"maximum":1,"multipleOf":0.01},"audio_weight":{"type":"number","description":"Relative weight of audio elements. Optional. Range 0–1, up to 2 decimal places.","minimum":0,"maximum":1,"multipleOf":0.01},"lyrics":{"type":"string","maxLength":5000,"description":"Lyrics for the generated audio. Optional.\n- V6, V6_MINI, and V6_WILD: Maximum 5000 characters.\n- Not required. Source audio (`upload_url`) is enough to generate once `title`, `negative_tags`, and `tags` are provided."},"variety":{"type":"integer","default":1,"minimum":0,"maximum":4,"description":"Controls the diversity and stylistic variation of generated results. Optional. Integer range 0–4, default 1.\n\n- **`0`**: off (exact style) — fully off, strictly the same style\n- **`1`**: normal (balanced variety) — default, balances stability and diversity\n- **`2`**: high (distinct styles) — produces results with clearly different styles\n- **`3`**: extra (bold exploration) — higher variation, encourages bold exploration of different styles\n- **`4`**: max (unreasonably varied) — maximum diversity; results may differ in style very significantly"},"model":{"type":"string","minLength":1,"description":"Публичный ID Suno из GET /models."}},"required":["model","upload_url","title","negative_tags","tags"],"additionalProperties":false},"SunoInput_music_add_vocals":{"type":"object","properties":{"prompt":{"type":"string","description":"Prompt for generating audio. Optional.\n- Used as lyrics only when `lyrics` is not provided. If `lyrics` is present, `prompt` is not used as lyrics.\n- V6, V6_MINI, and V6_WILD: Maximum 5000 characters.","maxLength":5000},"title":{"type":"string","description":"Music title. Required. Will be displayed in the player interface and file name."},"negative_tags":{"type":"string","description":"Excluded music styles. Required. Used to avoid including specific styles or elements in the generated music.","maxLength":200},"style":{"type":"string","description":"Music style. Required. Such as jazz, electronic, classical and other music types.","maxLength":1000},"vocal_gender":{"type":"string","description":"Vocal gender preference. Optional. 'm' for male, 'f' for female. Based on practice, this parameter can only increase the probability but cannot guarantee adherence to male/female voice instructions.","enum":["m","f"]},"style_weight":{"type":"number","description":"Adherence strength to specified style. Optional. Range 0–1, up to 2 decimal places.","minimum":0,"maximum":1,"multipleOf":0.01},"weirdness_constraint":{"type":"number","description":"Controls experimental/creative deviation level. Optional. Range 0–1, up to 2 decimal places.","minimum":0,"maximum":1,"multipleOf":0.01},"audio_weight":{"type":"number","description":"Relative weight of audio elements. Optional. Range 0–1, up to 2 decimal places.","minimum":0,"maximum":1,"multipleOf":0.01},"upload_url":{"type":"string","format":"uri","description":"URL of the uploaded audio file. Required. Source audio (`upload_url`) is enough to generate once `title`, `negative_tags`, and `style` are provided."},"lyrics":{"type":"string","maxLength":5000,"description":"Lyrics for the generated audio. Optional.\n- Takes priority over `prompt` as lyrics. If omitted, `prompt` is used as lyrics when provided.\n- V6, V6_MINI, and V6_WILD: Maximum 5000 characters.\n- Not required. Source audio (`upload_url`) is enough to generate once `title`, `negative_tags`, and `style` are provided."},"variety":{"type":"integer","default":1,"minimum":0,"maximum":4,"description":"Controls the diversity and stylistic variation of generated results. Optional. Integer range 0–4, default 1.\n\n- **`0`**: off (exact style) — fully off, strictly the same style\n- **`1`**: normal (balanced variety) — default, balances stability and diversity\n- **`2`**: high (distinct styles) — produces results with clearly different styles\n- **`3`**: extra (bold exploration) — higher variation, encourages bold exploration of different styles\n- **`4`**: max (unreasonably varied) — maximum diversity; results may differ in style very significantly"},"model":{"type":"string","minLength":1,"description":"Публичный ID Suno из GET /models."}},"required":["model","upload_url","title","negative_tags","style"],"additionalProperties":false},"SunoInput_music_time_stamped_lyrics":{"type":"object","properties":{"task_id":{"type":"string","pattern":"^[a-f0-9]{32}$","description":"ID собственного исходного запроса."},"audio_id":{"type":"string","pattern":"^[a-f0-9]{32}$","description":"ID собственного файла трека."},"model":{"type":"string","minLength":1,"description":"Публичный ID Suno из GET /models."}},"required":["model","task_id","audio_id"],"additionalProperties":false},"SunoInput_music_boost_music_style":{"type":"object","properties":{"content":{"type":"string","description":"Style description. Please describe in concise and clear language the music style you expect to generate. Example: 'Pop, Mysterious'"},"model":{"type":"string","minLength":1,"description":"Публичный ID Suno из GET /models."}},"required":["model","content"],"additionalProperties":false},"SunoInput_music_cover_generate":{"type":"object","properties":{"task_id":{"type":"string","pattern":"^[a-f0-9]{32}$","description":"ID собственного исходного запроса."},"model":{"type":"string","minLength":1,"description":"Публичный ID Suno из GET /models."}},"required":["model","task_id"],"additionalProperties":false},"SunoInput_music_replace_section":{"type":"object","properties":{"prompt":{"type":"string","description":"The lyrics after replacement. Required."},"tags":{"type":"string","description":"Style tags for the music, such as jazz or electronic. Required."},"title":{"type":"string","description":"The title of the music. Required."},"negative_tags":{"type":"string","description":"Music styles to exclude, used to prevent specific stylistic elements from appearing in the replacement section."},"infill_start_s":{"type":"number","description":"The point in time, in seconds, at which replacement starts, rounded to 2 decimal places. Required. Must be less than infill_end_s, and the difference between infill_end_s and infill_start_s must be at least 10 seconds.","minimum":0},"infill_end_s":{"type":"number","description":"The point in time, in seconds, at which replacement ends, rounded to 2 decimal places. Required. Must be greater than infill_start_s, and the difference between infill_end_s and infill_start_s must be at least 10 seconds.","minimum":0},"full_lyrics":{"type":"string","description":"The complete modified lyrics, combining the modified and unmodified lyrics. Required. This parameter contains the complete lyrics text that will be used for the entire song after section replacement."},"lyrics":{"type":"string","maxLength":5000,"description":"Lyrics for the replaced segment. Optional.\n- V6, V6_MINI, and V6_WILD: Maximum 5000 characters."},"vocal_gender":{"type":"string","description":"Vocal gender preference. Optional. 'm' for male, 'f' for female. Based on practice, this parameter can only increase the probability but cannot guarantee adherence to male/female voice instructions.","enum":["m","f"]},"style_weight":{"type":"number","description":"Adherence strength to specified style. Optional. Range 0–1, up to 2 decimal places.","minimum":0,"maximum":1,"multipleOf":0.01},"weirdness_constraint":{"type":"number","description":"Controls experimental/creative deviation level. Optional. Range 0–1, up to 2 decimal places.","minimum":0,"maximum":1,"multipleOf":0.01},"audio_weight":{"type":"number","description":"Relative weight of audio elements. Optional. Range 0–1, up to 2 decimal places.","minimum":0,"maximum":1,"multipleOf":0.01},"variety":{"type":"integer","default":1,"minimum":0,"maximum":4,"description":"Controls the diversity and stylistic variation of generated results. Optional. Integer range 0–4, default 1.\n\n- **`0`**: off (exact style) — fully off, strictly the same style\n- **`1`**: normal (balanced variety) — default, balances stability and diversity\n- **`2`**: high (distinct styles) — produces results with clearly different styles\n- **`3`**: extra (bold exploration) — higher variation, encourages bold exploration of different styles\n- **`4`**: max (unreasonably varied) — maximum diversity; results may differ in style very significantly"},"persona_id":{"type":"string","pattern":"^[a-f0-9]{32}$","description":"ID собственного исходного запроса."},"persona_model":{"type":"string","enum":["style_persona","voice_persona"],"default":"style_persona","description":"Persona model. Optional. Use `style_persona` for Generate Persona IDs, or `voice_persona` for Suno Voice IDs. Default: `style_persona`. Available for V5 (Discontinued), V5_5 (Discontinued), V6, V6_MINI, and V6_WILD."},"task_id":{"type":"string","pattern":"^[a-f0-9]{32}$","description":"ID собственного исходного запроса."},"audio_id":{"type":"string","pattern":"^[a-f0-9]{32}$","description":"ID собственного файла трека."},"upload_url":{"type":"string","format":"uri","description":"The URL of the custom audio uploaded by the user."},"model":{"type":"string","minLength":1,"description":"Публичный ID Suno из GET /models."}},"required":["model","prompt","tags","title","infill_start_s","infill_end_s","full_lyrics"],"additionalProperties":false,"oneOf":[{"required":["task_id","audio_id"],"not":{"anyOf":[{"required":["upload_url"]}]},"type":"object"},{"required":["upload_url"],"not":{"anyOf":[{"required":["task_id"]},{"required":["audio_id"]}]},"type":"object"}]},"SunoInput_music_generate_persona":{"type":"object","properties":{"task_id":{"type":"string","pattern":"^[a-f0-9]{32}$","description":"ID собственного исходного запроса."},"audio_id":{"type":"string","pattern":"^[a-f0-9]{32}$","description":"ID собственного файла трека."},"name":{"type":"string","description":"Name for the Persona. A descriptive name that captures the essence of the musical style or character."},"description":{"type":"string","description":"Detailed description of the Persona's musical characteristics, style, and personality. Be specific about genre, mood, instrumentation, and vocal qualities."},"vocal_start":{"type":"number","description":"Start time (in seconds) for Persona analysis segment extraction. Used to specify the time point in the audio from which to extract the segment for Persona analysis. Must be less than vocal_end, and vocal_end - vocalStart must be between 10–30 seconds. Defaults to 0.0.","default":0,"minimum":0},"vocal_end":{"type":"number","description":"End time (in seconds) for Persona analysis segment extraction. Together with vocal_start, used to specify the time range for analysis. vocalEnd - vocalStart must be between 10–30 seconds. Defaults to 30.0.","multipleOf":0.01,"default":30,"minimum":0},"style":{"type":"string","description":"Optional. Used to supplement the description of the music style tag corresponding to the Persona, such as \"Electronic Pop\", \"Jazz Trio\", etc."},"model":{"type":"string","minLength":1,"description":"Публичный ID Suno из GET /models."}},"required":["model","task_id","audio_id","name","description"],"additionalProperties":false},"SunoInput_music_mashup":{"type":"object","properties":{"upload_url_list":{"type":"array","description":"Array of audio file URLs to mashup. Provide 2 audio URLs. Upstream uses only the first 2. Each URL must be publicly accessible.","items":{"type":"string","format":"uri"},"minItems":2,"maxItems":2},"prompt":{"type":"string","description":"A description of the desired audio content. Optional.\n- Used as lyrics only when `lyrics` is not provided. If `lyrics` is present, `prompt` is not used as lyrics.\n- V6, V6_MINI, and V6_WILD: Maximum 5000 characters.","maxLength":5000},"style":{"type":"string","description":"Music style specification for the generated audio. Required.\n- Character limits by model:\n  - **V4** (Discontinued): Maximum 200 characters\n  - **V4_5 & V4_5PLUS** (Discontinued): Maximum 1000 characters\n  - **V4_5ALL** (Discontinued): Maximum 1000 characters\n  - **V5 & V5_5** (Discontinued): Maximum 1000 characters\n  - **V6, V6_MINI & V6_WILD**: Maximum 1000 characters\n- Common examples: Jazz, Classical, Electronic, Pop, Rock, Hip-hop, etc.","maxLength":1000},"title":{"type":"string","description":"Title for the generated music track. Required.\n- Character limits by model:\n  - **V4** (Discontinued): Maximum 80 characters\n  - **V4_5 & V4_5PLUS** (Discontinued): Maximum 100 characters\n  - **V4_5ALL** (Discontinued): Maximum 80 characters\n  - **V5 & V5_5** (Discontinued): Maximum 100 characters\n  - **V6, V6_MINI & V6_WILD**: Maximum 100 characters\n- Will be displayed in player interfaces and filenames.","maxLength":100},"vocal_gender":{"type":"string","description":"Vocal gender preference for the singing voice. Optional. Use 'm' for male and 'f' for female. Based on practice, this parameter can only increase the probability but cannot guarantee adherence to male/female voice instructions.","enum":["m","f"]},"style_weight":{"type":"number","description":"Strength of adherence to the specified style. Optional. Range 0–1, up to 2 decimal places.","minimum":0,"maximum":1,"multipleOf":0.01},"weirdness_constraint":{"type":"number","description":"Controls experimental/creative deviation. Optional. Range 0–1, up to 2 decimal places.","minimum":0,"maximum":1,"multipleOf":0.01},"audio_weight":{"type":"number","description":"Balance weight for audio features vs. other factors. Optional. Range 0–1, up to 2 decimal places.","minimum":0,"maximum":1,"multipleOf":0.01},"duration":{"type":"integer","default":20,"minimum":10,"maximum":360,"description":"Audio duration in seconds. Optional. Range 10–360, default 20. Valid when `model` is ~~V5_5~~ (Discontinued), V6, V6_MINI, or V6_WILD."},"lyrics":{"type":"string","maxLength":5000,"description":"Lyrics for the mashup. Optional.\n- Takes priority over `prompt` as lyrics. If omitted, `prompt` is used as lyrics when provided.\n- V6, V6_MINI, and V6_WILD: Maximum 5000 characters."},"variety":{"type":"integer","default":1,"minimum":0,"maximum":4,"description":"Controls the diversity and stylistic variation of generated results. Optional. Integer range 0–4, default 1.\n\n- **`0`**: off (exact style) — fully off, strictly the same style\n- **`1`**: normal (balanced variety) — default, balances stability and diversity\n- **`2`**: high (distinct styles) — produces results with clearly different styles\n- **`3`**: extra (bold exploration) — higher variation, encourages bold exploration of different styles\n- **`4`**: max (unreasonably varied) — maximum diversity; results may differ in style very significantly"},"persona_id":{"type":"string","pattern":"^[a-f0-9]{32}$","description":"ID собственного исходного запроса."},"persona_model":{"type":"string","enum":["style_persona","voice_persona"],"default":"style_persona","description":"Persona model. Optional. Use `style_persona` for Generate Persona IDs, or `voice_persona` for Suno Voice IDs. Default: `style_persona`. Available for V5 (Discontinued), V5_5 (Discontinued), V6, V6_MINI, and V6_WILD."},"model":{"type":"string","minLength":1,"description":"Публичный ID Suno из GET /models."}},"required":["model","upload_url_list","style","title"],"additionalProperties":false},"SunoInput_music_suno_recovery_audio":{"type":"object","properties":{"task_id":{"type":"string","pattern":"^[a-f0-9]{32}$","description":"ID собственного исходного запроса."},"model":{"type":"string","minLength":1,"description":"Публичный ID Suno из GET /models."}},"required":["model","task_id"],"additionalProperties":false},"SunoInput_music_convert_to_wav_format":{"type":"object","properties":{"task_id":{"type":"string","pattern":"^[a-f0-9]{32}$","description":"ID собственного исходного запроса."},"audio_id":{"type":"string","pattern":"^[a-f0-9]{32}$","description":"ID собственного файла трека."},"model":{"type":"string","minLength":1,"description":"Публичный ID Suno из GET /models."}},"required":["model","task_id","audio_id"],"additionalProperties":false},"SunoInput_music_create_music_video":{"type":"object","properties":{"task_id":{"type":"string","pattern":"^[a-f0-9]{32}$","description":"ID собственного исходного запроса."},"audio_id":{"type":"string","pattern":"^[a-f0-9]{32}$","description":"ID собственного файла трека."},"author":{"type":"string","maxLength":50,"description":"Artist or creator name to display as a signature on the video cover. Maximum 50 characters. This creates attribution for the music creator."},"domain_name":{"type":"string","maxLength":50,"description":"Website or brand to display as a watermark at the bottom of the video. Maximum 50 characters. Useful for promotional branding or attribution."},"model":{"type":"string","minLength":1,"description":"Публичный ID Suno из GET /models."}},"required":["model","task_id","audio_id"],"additionalProperties":false},"SunoInput_music_generate_lyrics":{"type":"object","properties":{"prompt":{"type":"string","description":"Description of the desired lyrics content. Be specific about theme, mood, style, or story elements you want in the lyrics. More detailed prompts yield better results. The maximum word limit is 200 characters."},"model":{"type":"string","minLength":1,"description":"Публичный ID Suno из GET /models."}},"required":["model","prompt"],"additionalProperties":false},"SunoInput_music_validation_phrase":{"type":"object","properties":{"voice_url":{"description":"The original recording URL uploaded by the user [Required]","type":"string"},"vocal_start_s":{"description":"Start time (in seconds) for extracting the vocal segment [Required]","type":"integer"},"vocal_end_s":{"description":"End time (in seconds) for extracting the vocal segment, must be greater than vocal_start_s [Required]","type":"integer"},"language":{"description":"Verify the language of the short phrase. Supported languages ​​include: English (en), Chinese (zh), Spanish (es), French (fr), Portuguese (pt), German (de), Japanese (ja), Korean (ko), Hindi (hi), and Russian (ru).","type":"string"},"model":{"type":"string","minLength":1,"description":"Публичный ID Suno из GET /models."}},"required":["model","voice_url","vocal_start_s","vocal_end_s"],"additionalProperties":false},"SunoInput_music_create_voice":{"type":"object","properties":{"task_id":{"type":"string","pattern":"^[a-f0-9]{32}$","description":"ID собственного исходного запроса."},"verify_url":{"description":"Audio URL for the user's recording of the server-returned `validateInfo` validation phrase. For best voice generation results, recording the phrase in a singing voice rather than plain speech is recommended. [Required]","type":"string"},"voice_name":{"description":"Voice name","type":"string"},"description":{"description":"Voice description","type":"string"},"style":{"description":"Voice style","type":"string"},"singer_skill_level":{"type":"string","description":"Singer skill level. Supported: beginner, intermediate, advanced, professional","default":"beginner","enum":["beginner","intermediate","advanced","professional"]},"model":{"type":"string","minLength":1,"description":"Публичный ID Suno из GET /models."}},"required":["model","task_id","verify_url"],"additionalProperties":false},"SunoInput_music_regenerate_phrase":{"type":"object","properties":{"task_id":{"type":"string","pattern":"^[a-f0-9]{32}$","description":"ID собственного исходного запроса."},"model":{"type":"string","minLength":1,"description":"Публичный ID Suno из GET /models."}},"required":["model","task_id"],"additionalProperties":false},"SunoInput_music_check_voice":{"type":"object","properties":{"task_id":{"type":"string","pattern":"^[a-f0-9]{32}$","description":"ID собственного исходного запроса."},"model":{"type":"string","minLength":1,"description":"Публичный ID Suno из GET /models."}},"required":["model","task_id"],"additionalProperties":false},"SunoInput_music_separate_vocals":{"type":"object","properties":{"type":{"type":"string","enum":["separate_vocal","split_stem","split_stem_advanced"],"default":"separate_vocal","description":"Separation type, options:\n\n- **separate_vocal**: Separate vocals and accompaniment, generating a vocal track and an instrumental track.\n- **split_stem**: Separate various instrument sounds, generating multiple instrument tracks.\n- **split_stem_advanced**: Advanced multi-track separation, supporting the specification of a particular instrument track to generate finer instrument tracks."},"stem_name":{"type":"string","enum":["Lead Vocal","Drum Kit","Kick","Snare","Risers","Bass","Backing Vocals","Piano","Electric Guitar","Percussion","String Section","Synth","Acoustic Guitar","Sound Effects","Synth Pad","Synth Bass","Guitar","Brass Section","Organ","Electronic Drum Kit","Lead Electric Guitar","Synth Keys","Rhythm Electric Guitar","Electric Piano","Upright Bass","Keyboards","Distorted Electric Guitar","Synth Strings","Synth Lead","Woodwinds","Rhythm Acoustic Guitar","Flute","Harp","Tambourine","Trumpet","Arpeggiator","Accordion","Fiddle","Pedal Steel Guitar","Synth Voice","Violin","Digital Piano","Synth Brass","Mandolin","Choir","Banjo","Bells","Clarinet","Tenor Saxophone","Trombone","Shaker","French Horn","Glockenspiel","Electric Bass","Cello","Timpani","Harmonica","Marimba","Vibraphone","Lap Steel Guitar","Saxophone","Orchestra","Horns","Cymbals","Hand Clap","Oboe","Celesta","Congas","Drone","Alto Saxophone","Double Bass","Ukulele","Harpsichord","Baritone Saxophone","Xylophone","Tuba","Bass Guitar","Whistle","Lead Guitar","Rhodes","808","Bongos","Bassoon","Cowbell","Viola","Sitar","Steel Drums","Piccolo","Theremin","Bagpipes","Hi-Hat","Music Box","Melodica","Tabla","Koto","Djembe","Taiko","Didgeridoo"],"description":"Only used when `type` is `split_stem_advanced` to request a specific stem track/instrument name."},"task_id":{"type":"string","pattern":"^[a-f0-9]{32}$","description":"ID собственного исходного запроса."},"audio_id":{"type":"string","pattern":"^[a-f0-9]{32}$","description":"ID собственного файла трека."},"audio_url":{"type":"string","format":"uri","description":"Custom audio URL uploaded by the user. The maximum file size is 20MB."},"model":{"type":"string","minLength":1,"description":"Публичный ID Suno из GET /models."}},"required":["model"],"additionalProperties":false,"oneOf":[{"required":["task_id","audio_id"],"not":{"anyOf":[{"required":["audio_url"]}]},"type":"object"},{"required":["audio_url"],"not":{"anyOf":[{"required":["task_id"]},{"required":["audio_id"]}]},"type":"object"}],"allOf":[{"if":{"properties":{"type":{"const":"split_stem_advanced"}},"required":["type"]},"then":{"required":["stem_name"]},"else":{"not":{"required":["stem_name"]}}}]},"SunoInput_music_generate_midi_from_audio":{"type":"object","properties":{"task_id":{"type":"string","pattern":"^[a-f0-9]{32}$","description":"ID собственного исходного запроса."},"audio_id":{"type":"string","pattern":"^[a-f0-9]{32}$","description":"ID собственного файла трека."},"model":{"type":"string","minLength":1,"description":"Публичный ID Suno из GET /models."}},"required":["model","task_id"],"additionalProperties":false},"SunoInput_music_sounds":{"type":"object","properties":{"prompt":{"description":"Sound task type limit: 500 characters","type":"string"},"sound_loop":{"type":"boolean","description":"Is it a cycle?","default":false},"sound_tempo":{"type":"integer","description":"Do not broadcast.","default":null,"minimum":1,"maximum":300},"sound_key":{"type":"string","default":"Any","enum":["Cm","C#m","Dm","D#m","Em","Fm","F#m","Gm","G#m","Am","A#m","Bm","C","C#","D","D#","E","F","F#","G","G#","A","A#","B"]},"grab_lyrics":{"type":"boolean","description":"Whether to capture the lyrics subtitles \n\nWill the interface be called after completion to obtain the lyrics subtitles?","default":false},"model":{"type":"string","minLength":1,"description":"Публичный ID Suno из GET /models."}},"required":["model","prompt"],"additionalProperties":false}}},"externalDocs":{"url":"https://formula-ai.ru/docs"}}
