Chat LD Начать бесплатно

API Chat LD

API нужен, чтобы выводить в виджет Chat LD сообщения из своих программ: ботов, сервисов донатов, игровых событий, площадок, которых нет в приложении. И чтобы читать общий чат стрима: для озвучки, статистики, своего оверлея. Для каждого проекта ключ один, и он же стоит в ссылке на виджет.

Ключ и адрес

Ключ виден в кабинете, это тот же API-ключ, что вставлен в приложение. Все запросы идут на один адрес:

https://app.chat-ld.pro/api/v1/messages/

Ключ передаётся заголовком Authorization: Bearer КЛЮЧ. Если программа не умеет задавать заголовки, подойдёт X-Api-Key: КЛЮЧ или параметр ?key=КЛЮЧ в адресе.

С ключом можно писать в ваш виджет и читать ваш чат. Не публикуйте его на открытых страницах. Если ключ утёк, нажмите «Перевыпустить» в кабинете: старый перестанет работать сразу, а ссылку виджета в OBS и ключ в приложении нужно будет заменить.

Отправить сообщение в виджет

POST https://app.chat-ld.pro/api/v1/messages/, тело - JSON:

ПолеЧто это
usernameОбязательное. Ник, который виден в виджете. До 64 символов, длиннее обрезается.
textОбязательное. Текст сообщения, до 4096 символов. Это простой текст: HTML-теги покажутся как есть, переводы строк сохранятся.
sourceПлощадка, чей значок стоит у ника: api (по умолчанию), youtube, twitch, vkplay, kick, telegram.
reply_toЦитата над сообщением: {"username": "...", "text": "..."}. Текст цитаты обрезается до 100 символов.
idВаш идентификатор сообщения, до 64 символов A-Z a-z 0-9 . _ -. Повторный запрос с тем же id не создаст дубль: удобно, если программа повторяет запрос после обрыва связи.
curl -X POST https://app.chat-ld.pro/api/v1/messages/ \
  -H "Authorization: Bearer КЛЮЧ" \
  -H "Content-Type: application/json" \
  -d '{"username": "DonationAlerts", "text": "Петя задонатил 500 ₽: удачи!", "id": "don-1842"}'

Ответ 201:

{"ok": true, "id": 1281995}

Если сообщение с таким id уже было, ответ 200 с тем же номером и "duplicate": true. Если ник или текст пришлось обрезать, в ответе будет "truncated": true.

Прочитать чат

GET https://app.chat-ld.pro/api/v1/messages/ отдаёт сообщения из всех источников: приложения, Telegram-групп, API.

ПараметрЧто это
after_idНомер последнего сообщения, которое у вас уже есть. Без него вернутся последние сообщения.
limitСколько сообщений вернуть: от 1 до 200, по умолчанию 50.
{
  "ok": true,
  "messages": [
    {
      "id": 1281996,
      "source": "twitch",
      "username": "Зритель",
      "text": "привет Kappa",
      "html": "привет <img alt=\"Kappa\" src=\"https://...\">",
      "date": "2026-10-23T14:58:47Z",
      "reply_to": null
    }
  ],
  "last_id": 1281996
}

text - сообщение без разметки, смайлы площадок заменены их названием. html - то же, что показывает виджет, вместе с картинками смайлов. username и text - простой текст: прежде чем вставлять их в HTML, экранируйте их. Время date указано в UTC. Сообщения хранятся 30 дней.

Чтобы следить за чатом, первый раз запросите ленту без after_id, а дальше раз в 1-2 секунды запрашивайте её с after_id, равным last_id из прошлого ответа.

Примеры

JavaScript (браузер или Node.js 18+):

const KEY = 'КЛЮЧ';
const URL = 'https://app.chat-ld.pro/api/v1/messages/';

await fetch(URL, {
  method: 'POST',
  headers: { 'Authorization': `Bearer ${KEY}`, 'Content-Type': 'application/json' },
  body: JSON.stringify({ username: 'Бот', text: 'Раунд начался!' }),
});

let lastId = 0;
setInterval(async () => {
  const res = await fetch(`${URL}?after_id=${lastId}`, { headers: { 'Authorization': `Bearer ${KEY}` } });
  const data = await res.json();
  for (const m of data.messages) console.log(m.source, m.username, m.text);
  lastId = data.last_id;
}, 2000);

Python:

import requests, time

KEY = "КЛЮЧ"
URL = "https://app.chat-ld.pro/api/v1/messages/"
HEADERS = {"Authorization": f"Bearer {KEY}"}

requests.post(URL, json={"username": "Бот", "text": "Раунд начался!"}, headers=HEADERS)

last_id = 0
while True:
    data = requests.get(URL, params={"after_id": last_id}, headers=HEADERS).json()
    for m in data["messages"]:
        print(m["source"], m["username"], m["text"])
    last_id = data["last_id"]
    time.sleep(2)

API отвечает и запросам со страниц в браузере (CORS разрешён для любых сайтов). Но ключ в коде страницы увидит любой посетитель, поэтому так стоит делать только на страницах, которые видите вы сами: в OBS или локально.

Лимиты

Ошибки

При ошибке API отвечает так: {"ok": false, "error": "invalid_key", "message": "API-ключ не найден"}. Поле error не меняется, по нему удобно ветвить код, message - пояснение для человека.

КодerrorЧто случилось
400invalid_jsonТело не JSON-объект.
400invalid_requestНет username или text, неверный id или reply_to.
400invalid_sourceНеизвестное значение source.
401invalid_keyКлюч не передан или не найден.
403account_disabledАккаунт отключён.
405method_not_allowedМетод не GET и не POST.
413payload_too_largeТело больше 64 КБ.
429rate_limitedПревышен лимит или много запросов с неверным ключом. Смотрите Retry-After.
503unavailableВременный сбой, повторите позже.

Вопросы и ответы

Нужно ли запускать приложение Chat LD, чтобы работал API?

Нет. Сообщения из API сразу попадают в виджет, приложение нужно только для чатов YouTube, Twitch, VK Видео Live, Kick и Telegram.

Можно ли вывести чат площадки, которой нет в Chat LD?

Да. Если у площадки есть свой API или бот, пересылайте его сообщения в POST /api/v1/messages/, они появятся в общем виджете со значком API.

Через сколько сообщение появится в OBS?

Виджет запрашивает новые сообщения раз в пару секунд, так что задержка - 1-3 секунды.

Все чаты стрима в одном виджете

YouTube, Twitch, VK Видео Live, Kick и Telegram - бесплатно, без паролей от площадок.

Начать бесплатно