События
Realtime-события
Получайте донаты, повторы и прогресс цели в реальном времени через публичный SignalR-хаб DonateX.
Подключение
Публичный хаб работает на SignalR: есть готовые клиенты для JavaScript, .NET, Java, Python и других языков. Токен передаётся черезaccessTokenFactory — клиент сам положит его в параметр access_token. OAuth-токену нужен scope donations.subscribe.
JavaScript · @microsoft/signalr
import { HubConnectionBuilder, LogLevel } from '@microsoft/signalr';
const connection = new HubConnectionBuilder()
.withUrl('https://donatex.gg/api/public-donations-hub', {
accessTokenFactory: () => process.env.DONATEX_TOKEN,
})
.withAutomaticReconnect()
.configureLogging(LogLevel.Warning)
.build();
connection.on('DonationCreated', (donation) => console.log('Новый донат', donation));
connection.on('DonationRerun', (donation) => console.log('Повтор', donation));
connection.on('GoalUpdated', (goal) => console.log('Цель', goal));
await connection.start();C# · Microsoft.AspNetCore.SignalR.Client
using System.Text.Json;
using Microsoft.AspNetCore.SignalR.Client;
var connection = new HubConnectionBuilder()
.WithUrl("https://donatex.gg/api/public-donations-hub", options =>
options.AccessTokenProvider = () =>
Task.FromResult(Environment.GetEnvironmentVariable("DONATEX_TOKEN")))
.WithAutomaticReconnect()
.Build();
connection.On<JsonElement>("DonationCreated", donation =>
Console.WriteLine($"Новый донат: {donation}"));
await connection.StartAsync();Без прав соединение закрывается
Если у токена нет доступа к хабу, сервер сразу закрывает соединение. Проверьте scope, если клиент переподключается по кругу.События
DonationCreatedDonationНовый оплаченный донат, включая тестовые. Приходит с голосовыми сообщениями и кружочками.
DonationRerunDonationСтример или API повторили донат: он снова в очереди, wasShown = false. Также приходит, когда стример одобряет донат после модерации.
GoalUpdatedGoal | nullИзменился прогресс или активная цель. null — активной цели больше нет.
DonationCreated · DonationRerun
{
"id": "4fd9677b-8b17-4c9d-9a9f-c2a7a3f9960b",
"username": "NeDrugLegenda1377",
"message": "",
"withAIResponse": false,
"musicLink": "",
"currency": "RUB",
"amount": 500.00,
"amountInRub": 500.00,
"timestamp": "2026-10-12T18:42:07Z",
"aiResponse": null,
"aiResponseVoiceFilePath": null,
"wasShown": true,
"isTest": false,
"isPotentiallyUnsafe": false,
"isFeePaidByUser": true,
"voiceFilePath": "https://cdn.donatex.gg/default-donation-voices/4fd9677b-8b17-4c9d-9a9f-c2a7a3f9960b.mp3",
"paidVoice": "",
"voiceMessagePath": null,
"voiceMessageDurationMs": null,
"videoMessagePath": "https://cdn.donatex.gg/donation-video-messages/4fd9677b-8b17-4c9d-9a9f-c2a7a3f9960b.mp4",
"videoMessagePosterPath": "https://cdn.donatex.gg/donation-video-messages/4fd9677b-8b17-4c9d-9a9f-c2a7a3f9960b.jpg",
"videoMessageDurationMs": 14250,
"aiCharacterId": null
}GoalUpdated
{
"id": "a19b8d6d-2e35-4d74-a28d-0b4f6d8ba5f1",
"name": "Новый микрофон",
"currentAmount": 12450.00,
"goalAmount": 20000.00,
"currency": "RUB",
"progressPercent": 62.25,
"isCompleted": false
}Советы
- Включайте
withAutomaticReconnect()— после переподключения подписка восстанавливается сама. - Пропущенные во время обрыва донаты дозапрашивайте через
GET /v1/donations. - Дедуплицируйте по
id: один донат может прийти и какDonationCreated, и какDonationRerun. - Не больше 10 подключений в секунду с одного IP.