Ключ і швидкий старт
Бот і API працюють з одного балансу символів.
Отримати API-ключ
- Відкрий @sonapro_bot.
- Обери 🔌 API → Створити ключ.
- Додавай
sk_user_…у заголовок кожного запиту.
X-API-Key: sk_user_…Важливо: не вставляй ключ у frontend-код, публічний GitHub або переписку. Створення нового ключа в боті відразу вимикає попередній.
Перша озвучка
Процес асинхронний: створи job_id, перевіряй статус і після done забери аудіо.
API="https://api.sonapro.app"
KEY="sk_user_…"
# 1. Створити задачу
curl -X POST "$API/v1/tts" \
-H "X-API-Key: $KEY" \
-H "Content-Type: application/json" \
-d '{"text":"Привіт, світе!","voice":"vc_xxxxxxxxxx","language":"uk","model":"sona-pro"}'
# 2. Перевірити статус
curl "$API/v1/tts/JOB_ID" -H "X-API-Key: $KEY"
# 3. Забрати файл
curl "$API/v1/tts/JOB_ID/audio" -H "X-API-Key: $KEY" -o out.mp3Ендпоінти
Базова адреса: https://api.sonapro.app.
| Метод | Шлях | Опис |
|---|---|---|
| POST | /v1/tts | Створити озвучку → job_id |
| GET | /v1/tts/{job_id} | Статус задачі |
| GET | /v1/tts/{job_id}/audio | Завантажити аудіо |
| GET | /v1/tts/{job_id}/link | Коротке публічне посилання |
| GET | /v1/tts/{job_id}/subtitles?format=srt|vtt|ass|json|zip | Субтитри; потрібно subtitles:true |
| GET | /v1/voices?language=uk&collection=sona_v1 | Каталог; collection: library або sona_v1 |
| POST | /v1/voices/clone | Клонувати голос → tmpl:N |
| GET/POST | /v1/voices/templates | Список або створення шаблону |
| PATCH/DEL | /v1/voices/templates/{num} | Змінити або видалити шаблон |
| GET | /v1/emotions | Актуальний список емоцій |
| GET/POST | /v1/pronunciation | Список або збереження правила вимови |
| DEL | /v1/pronunciation/{term} | Видалити правило |
| GET | /v1/me | Акаунт, тариф і баланс |
| POST | /v1/images | Згенерувати зображення |
| POST | /v1/images/edit | Згенерувати з фото-референсом |
| GET | /v1/images/{image_id}/file | Завантажити PNG/JPEG |
Голоси й шаблони
Параметри зберігаються для кожного шаблону окремо.
Формати ID і тариф
vc_…Бібліотечний голос1 кредит / символsona_…SONA Voice v11,5 кредита / символtmpl:NОсобистий шаблон/клон1,5 кредита / символЩоб побудувати окремий список наших голосів, запитай GET /v1/voices?collection=sona_v1. У загальному каталозі кожен елемент має поле collection: sona_v1 або library. Фільтри поєднуються, наприклад ?collection=sona_v1&language=uk.
Один голос — різні шаблони
Шаблон зберігає власні speed, volume і emotion. Тому один голос може мати «Нейтральний», «Злий» і «Спокійний» варіанти. Бот запитує ці поля під час створення; у картці шаблону їх можна змінити.
POST /v1/voices/templates
{
"engine": "sona",
"voice": "sona_xxxxxxxxxxxx",
"name": "Taras · angry",
"speed": 1.05,
"volume": 1.0,
"emotion": "angry"
}
# Змінити пресет пізніше
PATCH /v1/voices/templates/7
{"emotion":"neutral","speed":1.0}Якщо під час генерації передати параметр явно, він перекриє значення шаблону лише для цієї озвучки.
Клонування
POST /v1/voices/clone — multipart з полями clip, name, language і необов’язковими speed, volume, emotion. Рекомендований зразок — 3–10 секунд чистої мови без фонової музики.
Параметри озвучення
Поля POST /v1/tts. Зірочкою позначені обов’язкові.
| Поле | Тип / межі | Опис |
|---|---|---|
text * | string | Текст для озвучення |
voice * | vc_…, sona_…, tmpl:N | Голос або шаблон |
language | auto, uk, en, pl… | auto бере мову голосу; явний код дозволяє іншу мову |
model | sona-fast / sona-pro / sona-hd | Модель синтезу |
format | mp3 | Формат файлу |
bitrate | 32000–192000 | Бітрейт MP3; типово 96000 |
sample_rate | 8000–48000 | Частота дискретизації; типово 44100 |
speed | 0.6–1.5 | Швидкість SONA/клону |
volume | 0.5–2.0 | Гучність SONA/клону |
emotion | string | Одна вокальна манера на весь запит |
auto_stress | bool, типово true | Велика голосна всередині кириличного слова → U+0301 |
subtitles | bool | SRT/VTT/ASS і JSON-таймкоди |
name | string | Назва файлу без розширення |
Емоція шаблону і емоція запиту
Якщо використовуєш tmpl:N без emotion, SONA бере збережену емоцію шаблону. Якщо передати emotion:"angry" в цьому запиті, вона перекриє preset лише один раз.
Наголоси, вимова й емоції
Клон передає тембр, а читає текст модель. Тому наголос і вимова налаштовуються через текст.
Три рівні роботи з наголосом
| Рівень | Приклад | Коли застосовувати |
|---|---|---|
| 1. Знак U+0301 | за́мок / замо́к | Перша підказка для неоднозначного слова |
| 2. Велика голосна | зАмок / замОк | Лише зручний запис: SONA перетворить його на той самий U+0301 |
| 3. Фонетична заміна | Тарас → та-РАС | Тільки якщо модель проігнорувала обидві підказки і заміну перевірено на слух |
U+0301 і велика літера — не два різні методи. Велика голосна всередині кириличного слова лише конвертується в U+0301. Якщо модель ігнорує знак, вона може ігнорувати обидва варіанти.
Персональний словник SONA: як він працює з кирилицею
Це не готовий орфоепічний словник усієї мови й не автоматичний пошук наголосів. Це список власних винятків акаунта: перед озвученням SONA знаходить term у тексті й буквально підставляє replacement. Ідентифікатор словника в POST /v1/tts передавати не потрібно — збережені правила застосовуються автоматично.
| Властивість | Поведінка SONA |
|---|---|
| Кирилиця | Підтримується і в term, і в replacement. Фонетичну підказку можна записати звичайними українськими/російськими літерами. |
| Регістр | Тарас знаходить Тарас, тарас і ТАРАС. |
| Межі | Збіг лише за цілим словом або цілою фразою. Правило Тарас не змінює Тараса чи Тарасові. |
| Відмінки | Кожну потрібну словоформу зберігай окремо: Тараса → та-РА-са, Тарасові → та-РА-со-ві. Це приклади формату — кожну заміну перевір на слух. |
| Область дії | Правила належать акаунту, а не одному голосу: вони діють у боті та API для всіх його голосів і шаблонів. |
| Порядок | Довші фрази застосовуються раніше за коротші слова. Ліміт — 50 правил; term до 60, replacement до 160 символів. |
Для слова зі словника пиши в сценарії звичайне написання. Не додавай одночасно U+0301 або велику голосну: словник застосовується після нормалізації наголосу, тому змінене написання вже не дорівнюватиме збереженому term. Після підміни саме фінальний текст іде в озвучення, субтитри та підрахунок символів.
# додати або оновити одне правило
curl -X POST https://api.sonapro.app/v1/pronunciation \
-H "X-API-Key: $SONA_API_KEY" \
-H "Content-Type: application/json" \
-d '{"term":"Тарас","replacement":"та-РАС"}'
# окремі правила для відмінюваних форм
curl -X POST https://api.sonapro.app/v1/pronunciation \
-H "X-API-Key: $SONA_API_KEY" \
-H "Content-Type: application/json" \
-d '{"term":"Тараса","replacement":"та-РА-са"}'
# переглянути всі правила акаунта
curl https://api.sonapro.app/v1/pronunciation \
-H "X-API-Key: $SONA_API_KEY"
# видалити правило; кирилицю в URL треба percent-encode
curl -X DELETE https://api.sonapro.app/v1/pronunciation/%D0%A2%D0%B0%D1%80%D0%B0%D1%81 \
-H "X-API-Key: $SONA_API_KEY"Коли використовувати: для імен, брендів, абревіатур і термінів, які стабільно читаються неправильно. Якщо проблема лише в наголосі й U+0301 спрацьовує, словник не потрібен. Фонетична підміна — sounds-like підказка, а не гарантія, тому тестуй короткою озвучкою на потрібній мові.
Перевірене правило: Тарас
Для українського голосу Taras модель читала ТАрас і ігнорувала знак наголосу. Прослухана заміна та-РАС дала правильне ТарАс.
curl -X POST https://api.sonapro.app/v1/pronunciation \
-H "X-API-Key: $SONA_API_KEY" \
-H "Content-Type: application/json" \
-d '{"term":"Тарас","replacement":"та-РАС"}'Правило діє лише на ціле слово, незалежно від регістру, і автоматично застосовується до всіх озвучок цього API-акаунта. Не розбивай весь текст на склади і не вигадуй IPA: кожну фонетичну заміну спочатку треба прослухати.
Промпт для Claude / ChatGPT
Встав промпт перед сценарієм. AI проаналізує весь текст, а не лише слово «Тарас», і поверне готовий варіант для SONA.
Ти — редактор тексту для озвучення SONA.
Проаналізуй увесь текст у контексті та підготуй його до природної машинної озвучки.
Правила:
1. Не змінюй зміст, стиль, факти та мову.
2. Збережи природну пунктуацію і абзаци — вони керують паузами.
3. Знайди слова, які TTS може прочитати неправильно. Особливо перевір:
- імена та прізвища;
- географічні назви;
- бренди, назви продуктів і компаній;
- абревіатури;
- іншомовні вставки й запозичення;
- рідкісні терміни та омографи.
4. Якщо неоднозначний лише наголос, постав U+0301 після наголошеної голосної:
за́мок / замо́к, му́ка / мука́.
5. Якщо знака наголосу може бути недостатньо і правильна вимова тобі достовірно
відома, перепиши ЛИШЕ проблемне слово фонетично:
- розділи його на зручні для читання частини дефісами;
- наголошений склад напиши ВЕЛИКИМИ літерами;
- збережи відмінкове закінчення конкретної форми слова.
6. Не обмежуйся словом «Тарас». Самостійно знаходь інші проблемні слова за
контекстом, але не вигадуй вимову, якщо не впевнений.
7. Орієнтири формату:
- Тарас → та-РАС
- OpenAI → оупен-ей-АЙ
- ChatGPT → чат-джі-пі-ТІ
- Renault → ре-НО
8. Не розбивай звичайні слова на склади, не вставляй IPA і не переписуй увесь текст
фонетично. Уже наявні теги <emotion value="..."/> збережи без змін.
9. Поверни лише готовий текст для озвучення без пояснень, списків і коментарів.
Мій текст:
"""
[ВСТАВ ТЕКСТ]
"""Емоції в тексті
emotion задає одну манеру на всю озвучку. Інлайн-теги — beta-спосіб змінити її всередині тексту.
<emotion value="excited"/> Не повіриш, що я дізнався!
<emotion value="sad"/> Але потім усе пішло не так…
<emotion value="determined"/> І все ж ми не здамося.Повний список · 58 емоцій
neutral, happy, excited, enthusiastic, elated, euphoric, triumphant, amazed, surprised, flirtatious, curious, content, peaceful, serene, calm, grateful, affectionate, trust, sympathetic, anticipation, mysterious, angry, mad, outraged, frustrated, agitated, threatened, disgusted, contempt, envious, sarcastic, ironic, sad, dejected, melancholic, disappointed, hurt, guilty, bored, tired, rejected, nostalgic, wistful, apologetic, hesitant, insecure, confused, resigned, anxious, panicked, alarmed, scared, proud, confident, distant, skeptical, contemplative, determined
Генерація зображень
Генерація з тексту та з фото-референсом.
POST /v1/images | JSON: prompt, model, size, quality → image_id |
POST /v1/images/edit | multipart: prompt, model і 1–3 файли image |
GET /v1/images/{image_id} | Статус задачі |
GET /v1/images/{image_id}/file | Завантажити файл |
GET /v1/images?limit=20 | Історія акаунта |
Приклад
curl -X POST https://api.sonapro.app/v1/images \
-H "X-API-Key: $SONA_API_KEY" \
-H "Content-Type: application/json" \
-d '{"prompt":"Cinematic portrait in soft blue light","model":"sona-image","size":"1024x1024"}'Результат і помилки
Статуси задачі, файли, субтитри і HTTP-коди.
Життєвий цикл
queued→processing→doneТакож можливі error і canceled. Аудіо зберігається обмежений час; після видалення endpoint поверне 410.
Субтитри
Передай subtitles:true під час створення. Потім забери srt, vtt, ass, json або zip; ZIP містить аудіо і всі формати разом.
HTTP-коди
400 | Некоректний формат запиту |
401 | Відсутній або невірний API-ключ |
402 | Недостатньо кредитів |
404 | Ресурс не знайдено |
410 | Файл уже видалено за строком зберігання |
422 | Невірне поле, ID голосу або межа параметра |
429 | Забагато запитів або активних задач |
503 | Сервіс/голос тимчасово недоступний; враховуй Retry-After |