SHVYDKO / API
POST /v1/systemone
Контракт запиту та відповіді для Choice, Score і Noul через один HTTP endpoint.
HTTP і заголовки
Передавайте Bearer API-ключ організації та JSON у UTF-8. Відповідь успішного запиту має HTTP 200. Endpoint повертає повну JSON-відповідь; потокова генерація тексту не підтримується.
curl --fail-with-body "$SHVYDKO_BASE_URL/v1/systemone" \
-H "Authorization: Bearer $SHVYDKO_API_KEY" \
-H "Content-Type: application/json" \
--data-binary @request.jsonПоля запиту
| Поле | Тип | Правило |
|---|---|---|
| state | JSON | Обов’язковий спільний контекст |
| questions | object | Від 1 до 32 питань; ID має 1–100 символів |
| questions[id].type | string | choice, score або noul |
| questions[id].instructions | JSON, необов’язково | Рекомендовано ясне текстове формулювання задачі |
| questions[id].criteria | object / array | Форма залежить від типу питання |
| model | string, необов’язково | Ім’я з GET /v1/models; без поля обирається налаштована модель |
Додаткові поля верхнього рівня та невідомі поля всередині питання відхиляються. Параметри temperature, messages, stream і tools не входять до цього контракту.
Поля відповіді
| Поле | Значення |
|---|---|
| answers | Об’єкт із тими самими ID, що у questions |
| model | Публічне ім’я налаштованої моделі |
| request_id | ID запиту для зіставлення з Usage |
| service_mode | preview або paid |
| usage.input_tokens / output_tokens | Фактичний облік токенів від сервісу моделі |
| usage.cost_microusd | Вартість у цілих мікродоларах; 1 USD = 1 000 000 microUSD |
| usage.cost_usd | Та сама вартість десятковим рядком у USD |
| usage.price_per_million_input_usd | Застосований тариф; null у безкоштовному preview |
| gateway_latency_ms | Час обробки запиту шлюзом у мілісекундах |
{
"answers": {
"team": {
"type": "choice",
"choice": "engineering",
"probabilities": {
"engineering": 0.88,
"logistics": 0.04,
"other": 0.08
},
"confidence": 0.82
},
"urgency": {
"type": "score",
"score": 1.1,
"probabilities": {
"0": 0.05,
"1": 0.8,
"2": 0.15
},
"legend": {
"0": "Інформаційне питання; нічого не заблоковано",
"1": "Є незручність, але доступний інший спосіб завершити дію",
"2": "Дію повністю заблоковано; потрібна оперативна допомога"
},
"confidence": 0.7
},
"alternative": {
"type": "noul",
"noul": 0.94
}
},
"model": "shvydko-latest",
"request_id": "req_example",
"service_mode": "preview",
"usage": {
"input_tokens": 120,
"output_tokens": 20,
"cost_microusd": 0,
"cost_usd": "0.000000",
"price_per_million_input_usd": null
},
"gateway_latency_ms": 245
}Зіставлення та повторні запити
Успішна відповідь також містить заголовки x-shvydko-request-id та x-typesafe-request-id. Вони відповідають request_id у JSON. Зберігайте ID разом із власним ID задачі, щоб знайти запис у Usage.
API не надає контракту ідемпотентності для inference. Повторний POST — новий запит. Якщо зв’язок обірвався після обробки, сліпе повторення може створити друге списання у paid-режимі. Обмежуйте повтори і перевіряйте історію перед повторною бізнес-дією.