📚 Документація API (Gateway)

Базова URL-адреса: http://178.63.149.102:8080
Всі запити до API повинні містити заголовки для авторизації та вказувати формат даних.

🔑 Авторизація (Headers)

Для всіх запитів необхідно передавати твій персональний API-ключ у заголовку x-api-key. Також не забувай вказувати Content-Type: application/json.

headers: {
    'x-api-key': 'sk-твоя-секретна-строка-ключа',
    'Content-Type': 'application/json'
}

❌ Обробка помилок (HTTP Status Codes)

КодОпис
200 OKУспішне виконання запиту. З балансу списано токени.
401 UnauthorizedAPI ключ не передано, або він недійсний.
402 Payment RequiredНа балансі ключа недостатньо токенів для цієї операції.
429 Too Many RequestsПеревищено ліміт запитів (за замовчуванням: 10 запитів на хвилину).
500 Internal ErrorПомилка на стороні кінцевої нейромережі. Токени НЕ списуються.
503 Service UnavailableЦей модуль тимчасово вимкнено адміністратором.

1. Генерація зображень

POST/api/generate
Вартість: 1 токен
ПараметрТипОпис
promptstringТекстовий опис бажаного зображення Обов'язково
modelstringМодель: flux, qwen, photon, або chroma Обов'язково
negativePromptstringЩо не повинно бути на фото (за замовчуванням порожньо)
width / heightnumberРозміри зображення в пікселях (напр. 1024)
seednumberСід генерації (число)
stepsnumberКількість кроків генерації (напр. 30)
cfgnumberНаскільки точно слідувати промпту (напр. 7.5)

Приклад запиту (JavaScript/Node.js):

const response = await fetch('http://178.63.149.102:8080/api/generate', {
    method: 'POST',
    headers: { 'Content-Type': 'application/json', 'x-api-key': 'твій-ключ' },
    body: JSON.stringify({
        prompt: "A futuristic cyberpunk city at night, neon lights, 8k resolution",
        model: "flux",
        width: 1024,
        height: 1024,
        steps: 30,
        cfg: 7,
        seed: 123456789
    })
});

const result = await response.json();
console.log(result.data); // Зображення у форматі Base64
console.log(result.balanceRemaining); // Залишок токенів: 99

2. Анімація (Image to Video)

POST/api/animate
Вартість: 10 токенів

Примітка: цей запит може виконуватися довго, переконайтеся, що ваш клієнт має достатній timeout (рекомендується 3-5 хвилин).

ПараметрТипОпис
base64ImagestringОригінальне зображення у форматі Base64 Обов'язково
promptstringОпис того, як зображення має рухатися
fpsnumberКількість кадрів анімації (step)
seednumberСід для генерації

Приклад запиту:

const response = await fetch('http://178.63.149.102:8080/api/animate', {
    method: 'POST',
    headers: { 'Content-Type': 'application/json', 'x-api-key': 'твій-ключ' },
    body: JSON.stringify({
        base64Image: "iVBORw0KGgoAAAANSUhEUgAA...", // Ваша картинка
        prompt: "The camera slowly pans to the right, wind blowing the hair",
        fps: 121,
        seed: 42
    })
});
const result = await response.json();
// result.data міститиме відео у Base64

3. Редагування (Inpainting)

POST/api/edit
Вартість: 2 токени
ПараметрТипОпис
base64ImagestringОригінальне зображення у Base64 Обов'язково
base64Image2string(Опціонально) Друге зображення (маска) для подвійного Inpaint
promptstringТекстовий опис змін
width / heightnumberРозміри результату

4. Покращення якості (Upscale)

POST/api/upscale
Вартість: 2 токени
ПараметрТипОпис
base64ImagestringЗображення у Base64 Обов'язково

5. Видалення фону (Background Removal)

POST/api/remove-bg
Вартість: 1 токен
ПараметрТипОпис
base64ImagestringЗображення у Base64 Обов'язково

6. Чат та Аналіз (Text / Vision / Video)

POST/api/chat
Вартість: 1 токен (Text) / 2 токени (Vision)

Універсальний роут для роботи з мовними моделями (LLM). Підтримує всі стандартні параметри OpenAI (LM Studio).

ПараметрТипОпис
taskstringtext (за замовч.) або vision. Визначає на який сервер піде запит.
messagesarrayМасив повідомлень OpenAI формату Обов'язково
modelstringID моделі (якщо на сервері їх декілька)
temperaturenumberКреативність (від 0.0 до 1.0)
response_formatobjectСтруктура для строгого виводу JSON
clean_markdownbooleanЯкщо true, сервер автоматично виріже символи ``` з відповіді.

Приклад 1: Звичайний текст зі строгим JSON

const response = await fetch('http://178.63.149.102:8080/api/chat', {
    method: 'POST',
    headers: { 'Content-Type': 'application/json', 'x-api-key': 'твій-ключ' },
    body: JSON.stringify({
        task: "text",
        temperature: 0.7,
        messages: [
            { role: "system", content: "You are a helpful assistant." },
            { role: "user", content: "Tell me a joke." }
        ],
        response_format: {
            type: "json_schema",
            json_schema: {
                name: "joke_response",
                strict: true,
                schema: {
                    type: "object",
                    properties: { joke: { type: "string" } },
                    required: ["joke"]
                }
            }
        }
    })
});
const result = await response.json();
// result.data.text буде чистим JSON об'єктом: {"joke": "Why did the chicken..."}

Приклад 2: Аналіз фотографії (Vision)

Щоб проаналізувати фото або кадри з відео, передай task: "vision" та зміни структуру повідомлення користувача:

const response = await fetch('http://178.63.149.102:8080/api/chat', {
    method: 'POST',
    headers: { 'Content-Type': 'application/json', 'x-api-key': 'твій-ключ' },
    body: JSON.stringify({
        task: "vision",  
        messages: [
            {
                role: "user",
                content: [
                    { type: "text", text: "Що зображено на цьому фото?" },
                    { type: "image_url", image_url: { url: "data:image/jpeg;base64,iVBORw0KGgo..." } }
                ]
            }
        ]
    })
});

7. Генерація музики (Text-to-Music)

POST/api/text2music
Вартість: 5 токенів

Створює повноцінний аудіотрек на основі текстового опису жанру, настрою та (опціонально) лірики. Запит може виконуватися довго (до декількох хвилин).

ПараметрТипОпис
promptstringОпис жанру, настрою та інструментів (наприклад, "pop rock", "synthwave") Обов'язково
lyricsstringТекст пісні (наприклад, "[Verse 1]\nWalking down the street..."). Якщо немає, залиште порожнім.
audio_durationnumberБажана тривалість у секундах (від 10 до 600). За замовчуванням: -1 (автоматично).

Приклад запиту (JavaScript):

const response = await fetch('http://178.63.149.102:8080/api/text2music', {
    method: 'POST',
    headers: { 'Content-Type': 'application/json', 'x-api-key': 'твій-ключ' },
    body: JSON.stringify({
        prompt: "Epic orchestral soundtrack with heavy drums and choir",
        lyrics: "",
        audio_duration: 30
    })
});

const result = await response.json();
// result.data містить бінарні дані аудіофайлу у форматі Base64
console.log("Залишок токенів:", result.balanceRemaining);

8. Синтез мовлення (Text-to-Speech)

POST/api/synthesize
Вартість: 1 токен

Приймає текстовий запит і повертає згенероване аудіо (голос людини) у форматі WAV, закодоване в Base64.

ПараметрТипОпис
textstringТекст, який потрібно озвучити Обов'язково
voicestringІм'я голосу для озвучення. За замовчуванням використовується "Марина Панас".

Приклад запиту (JavaScript):

const response = await fetch('http://178.63.149.102:8080/api/synthesize', {
    method: 'POST',
    headers: { 'Content-Type': 'application/json', 'x-api-key': 'твій-ключ' },
    body: JSON.stringify({
        text: "Привіт! Це тестове повідомлення для синтезу голосу.",
        voice: "Марина Панас"
    })
});

const result = await response.json();
if (result.data.success) {
    // result.data.audio - це рядок Base64 (WAV формат)
    const audio = new Audio("data:audio/wav;base64," + result.data.audio);
    audio.play();
}

9. Розпізнавання мовлення (Speech-to-Text / STT)

POST/api/stt
Вартість: 1 токен

Приймає аудіофайл (наприклад, голосове повідомлення) і повертає розпізнаний текст.

ПараметрТипОпис
base64AudiostringАудіофайл, закодований у рядок формату Base64 Обов'язково

Приклад запиту (JavaScript):

const response = await fetch('http://178.63.149.102:8080/api/stt', {
    method: 'POST',
    headers: { 'Content-Type': 'application/json', 'x-api-key': 'твій-ключ' },
    body: JSON.stringify({
        base64Audio: "UklGRiQAAABXQVZFZm10IBAAAAABAAEA..." // Ваш аудіофайл у Base64
    })
});

const result = await response.json();
// result.data міститиме розпізнаний текст
console.log("Розпізнаний текст:", result.data);