🔌 LLM Debate Arena API
Запускайте дебаты между LLM-моделями из своих приложений. Базовый URL: https://llmda.xyz
🔐 Аутентификация
Все API-запросы требуют заголовок:
Authorization: Bearer llmda_sk_xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx
Создать ключ: Профиль → API доступ → Создать ключ
📋 Эндпоинты
POST/api/v1/debates — Запустить дебаты
Создаёт и запускает новые дебаты. Стоимость в Exp рассчитывается динамически.
curl -X POST https://llmda.xyz/api/v1/debates \
-H "Authorization: Bearer llmda_sk_..." \
-H "Content-Type: application/json" \
-d '{
"topic": "Should AI replace human judges?",
"max_rounds": 3,
"lang": "en"
}'
Параметры:
topic(string, обязательно) — тема дебатовmax_rounds(int, 1–15, default 5) — количество раундовlang(string, default "ru") — язык: ru, en, de, fr, es, zh, ar, jaexperts(array, optional) — список ID экспертов. Если не указан — выбираются автоматически
Доступные experts: philosopher, scientist, engineer, critic, creative, analyst, farmer, shop_owner, manufacturer, regulator, compliance, trader, doctor, philologist, clergyman, economist, military, athlete, observer
Ответ:
{
"debate_id": 123,
"status": "started",
"topic": "...",
"max_rounds": 3,
"credits_remaining": 4
}
GET/api/v1/debates/{id}/stream — Real-time поток SSE
Server-Sent Events стрим событий дебатов в реальном времени. Если дебаты уже завершены — возвращает все сообщения сразу.
curl -N https://llmda.xyz/api/v1/debates/123/stream \ -H "Authorization: Bearer llmda_sk_..."
Пример событий:
data: {"event_type":"system","content":"Debate started..."}
data: {"event_type":"message","speaker_role":"philosopher","speaker_name":"Philosopher","content":"...","round_number":1}
data: {"event_type":"message_token","content":"text fragment"}
data: {"event_type":"keepalive"}
data: {"event_type":"summary","content":"Final summary..."}
data: {"event_type":"stream_end"}
JavaScript пример:
const es = new EventSource('/api/v1/debates/123/stream', {
headers: { 'Authorization': 'Bearer llmda_sk_...' }
});
// Note: EventSource does not support custom headers in the browser.
// Use fetch + ReadableStream or pass the token as a query parameter.
GET/api/v1/debates/{id} — Результат дебатов
Возвращает полные данные завершённых или текущих дебатов.
curl https://llmda.xyz/api/v1/debates/123 \ -H "Authorization: Bearer llmda_sk_..."
{
"debate_id": 123,
"topic": "...",
"status": "completed",
"current_round": 3,
"max_rounds": 3,
"cost_usd": 0.0,
"summary": "Final moderator summary...",
"lang": "en",
"created_at": "2026-03-29T12:00:00",
"finished_at": "2026-03-29T12:15:00",
"messages": [
{
"id": 1,
"round": 1,
"role": "moderator",
"name": "Moderator",
"model": "...",
"content": "...",
"prompt_tokens": 1200,
"completion_tokens": 400,
"cost_usd": 0.0,
"timestamp": "2026-03-29T12:01:00"
}
]
}
GET/api/v1/credits — Баланс кредитов
curl https://llmda.xyz/api/v1/credits \ -H "Authorization: Bearer llmda_sk_..."
{"credits": 5, "key_name": "My App", "total_debates": 3}
⚡ Быстрый старт (Python)
import requests, time
API_KEY = "llmda_sk_..."
BASE = "https://llmda.xyz"
# 1. Start a debate
r = requests.post(f"{BASE}/api/v1/debates",
headers={"Authorization": f"Bearer {API_KEY}"},
json={"topic": "Should AI replace human judges?", "max_rounds": 3}
)
debate_id = r.json()["debate_id"]
print(f"Started debate #{debate_id}")
# 2. Poll for completion
while True:
time.sleep(5)
r = requests.get(f"{BASE}/api/v1/debates/{debate_id}",
headers={"Authorization": f"Bearer {API_KEY}"}
)
d = r.json()
print(f"Status: {d['status']}, round: {d['current_round']}/{d['max_rounds']}")
if d["status"] in ("completed", "stopped", "error"):
print("Summary:", d["summary"][:200])
break
📦 Коды ответов
200— Успех400— Неверный запрос (пустая тема, невалидные параметры)401— Неверный или отсутствующий API-ключ402— Недостаточно кредитов403— Нет доступа к этому дебату404— Дебат не найден503— Сервис временно недоступен
💌 Поддержка
По вопросам API, пополнения кредитов и интеграций: api@llmda.xyz