DonateXdev.

ВойтиСоздать приложение

События

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.