curl --get 'https://stats.kalenich.sbs/api/discord-statistics' \
--data-urlencode 'server=02' \
--data-urlencode 'month=2026-10'
const url = new URL('https://stats.kalenich.sbs/api/discord-statistics');
url.search = new URLSearchParams({ server: '02', month: '2026-10' });
const response = await fetch(url);
if (!response.ok) throw new Error(`HTTP ${response.status}`);
console.log(await response.json());
{
"month": "2026-10",
"timezone": "Europe/Moscow",
"refreshMinutes": 60,
"server": {
"number": 2,
"name": "Tucson",
"guildId": "599706379296440320",
"iconUrl": "https://cdn.discordapp.com/icons/599706379296440320/12fa55816eb96d4e2b76f952c70f61e0.png?size=256",
"bannerUrl": "https://cdn.discordapp.com/banners/599706379296440320/b0409e748a3df8b54685d01d5f9534c4.png?size=1024",
"totalMessages": 31979,
"channels": [
{
"id": "1438627340656836688",
"name": "『🌄』общий-чат",
"messages": 31979
}
],
"generatedAt": "2026-10-18T16:14:11.541Z",
"status": "ok",
"error": null
}
}
{
"error": "invalid_parameters"
}
Kalenich Stats
Получить статистику
Счётчики сообщений по серверам и каналам за месяц, день, семь дней или диапазон дат.
GET
/
api
/
discord-statistics
curl --get 'https://stats.kalenich.sbs/api/discord-statistics' \
--data-urlencode 'server=02' \
--data-urlencode 'month=2026-10'
const url = new URL('https://stats.kalenich.sbs/api/discord-statistics');
url.search = new URLSearchParams({ server: '02', month: '2026-10' });
const response = await fetch(url);
if (!response.ok) throw new Error(`HTTP ${response.status}`);
console.log(await response.json());
{
"month": "2026-10",
"timezone": "Europe/Moscow",
"refreshMinutes": 60,
"server": {
"number": 2,
"name": "Tucson",
"guildId": "599706379296440320",
"iconUrl": "https://cdn.discordapp.com/icons/599706379296440320/12fa55816eb96d4e2b76f952c70f61e0.png?size=256",
"bannerUrl": "https://cdn.discordapp.com/banners/599706379296440320/b0409e748a3df8b54685d01d5f9534c4.png?size=1024",
"totalMessages": 31979,
"channels": [
{
"id": "1438627340656836688",
"name": "『🌄』общий-чат",
"messages": 31979
}
],
"generatedAt": "2026-10-18T16:14:11.541Z",
"status": "ok",
"error": null
}
}
{
"error": "invalid_parameters"
}
Получите сохранённый отчёт одного сервера или всего каталога. Метод публичный, авторизация не требуется. Тело запроса не используется.
Подробнее о московском времени, границах суток и доступности истории — в разделе «Периоды и даты».
Полная схема объекта сервера, каналов и всех статусов приведена в разделе «Данные и статусы».
Прокси может вернуть
GET https://stats.kalenich.sbs/api/discord-statistics
Метод читает готовые отчёты и не запускает сбор. Проверяйте состояние каждого отчёта по
status, а полноту общей выборки — по complete.Параметры запроса
string
default:"month"
Режим выборки:
month, day, week или range. Если параметр не передан, используется месяц.string
Месяц в формате
YYYY-MM от 2015-01 до 2099-12. Используется только с period=month. По умолчанию — текущий месяц по Москве. Корректный месяц не гарантирует наличие отчёта.string
Дата
YYYY-MM-DD для day или последний день семидневного периода для week. По умолчанию — сегодня по Москве. Оба конца недели включены.string
Первый день диапазона,
YYYY-MM-DD. Обязателен при period=range. Включается в результат.string
Последний день диапазона,
YYYY-MM-DD. Обязателен при period=range. Включается в результат. Диапазон должен содержать от 1 до 31 календарного дня.string
Номер сервера из каталога (
2 или 02) либо полный Discord ID. Допускаются от 1 до 20 цифр. Если параметр не указан, возвращаются все серверы. Переданное пустое значение считается ошибкой.Передавайте только параметры выбранного периода:
month для месяца, date для дня или недели, from и to для диапазона. Несовместимые сочетания возвращают 400 invalid_parameters.Выбор периода
| Задача | Query string |
|---|---|
| Текущий месяц, все серверы | Без параметров |
| Октябрь 2026, сервер № 02 | ?server=02&month=2026-10 |
| Сегодня, сервер № 02 | ?server=02&period=day |
| 17 октября 2026 | ?server=02&period=day&date=2026-10-17 |
| Семь дней, заканчивающихся 17 октября | ?server=02&period=week&date=2026-10-17 |
| С 16 по 17 октября включительно | ?server=02&period=range&from=2026-10-16&to=2026-10-17 |
Ответ
При переданномserver результат находится в объекте server. Без фильтра возвращаются массив servers и сводные поля.
| Поле | Тип | Значение |
|---|---|---|
month | string | Выбранный месяц. Присутствует только в месячном ответе |
period | string | day, week или range. Для месячного ответа отсутствует |
from, to | string | Первая и последняя включённые даты для дневных периодов |
start, endExclusive | string | Временные границы ISO 8601: начало включительно, конец исключительно; для дневных периодов |
timezone | string | Часовой пояс расчёта: Europe/Moscow |
refreshMinutes | number | Пауза между проходами сборщика в минутах |
server | object | Отчёт выбранного сервера; только при фильтре server |
servers | object[] | Отчёты всех серверов по возрастанию номера; без фильтра server |
totalServers | number | Число настроенных серверов; только в общем ответе |
readyServers | number | Число серверов со статусом ok; только в общем ответе |
totalMessages | number | Сумма сообщений только по серверам со статусом ok; только в общем ответе |
complete | boolean | У всех ли серверов есть актуальный отчёт; только в общем ответе |
Чтобы получить номера, названия и Discord ID, запросите общий список и прочитайте
servers. Не фиксируйте состав каталога в коде: он может меняться.HTTP-ответы
| Код | Когда возвращается |
|---|---|
200 | Запрос выполнен, в том числе если отдельный отчёт недоступен или устарел |
400 | Некорректный параметр или сочетание параметров |
404 | Сервер не найден |
405 | Использован метод, отличный от GET или HEAD |
500 | Внутренняя ошибка приложения |
429 или 5xx с телом другого формата. Все коды приложения и рекомендации по обработке — в разделе «Ошибки API».
curl --get 'https://stats.kalenich.sbs/api/discord-statistics' \
--data-urlencode 'server=02' \
--data-urlencode 'month=2026-10'
const url = new URL('https://stats.kalenich.sbs/api/discord-statistics');
url.search = new URLSearchParams({ server: '02', month: '2026-10' });
const response = await fetch(url);
if (!response.ok) throw new Error(`HTTP ${response.status}`);
console.log(await response.json());
{
"month": "2026-10",
"timezone": "Europe/Moscow",
"refreshMinutes": 60,
"server": {
"number": 2,
"name": "Tucson",
"guildId": "599706379296440320",
"iconUrl": "https://cdn.discordapp.com/icons/599706379296440320/12fa55816eb96d4e2b76f952c70f61e0.png?size=256",
"bannerUrl": "https://cdn.discordapp.com/banners/599706379296440320/b0409e748a3df8b54685d01d5f9534c4.png?size=1024",
"totalMessages": 31979,
"channels": [
{
"id": "1438627340656836688",
"name": "『🌄』общий-чат",
"messages": 31979
}
],
"generatedAt": "2026-10-18T16:14:11.541Z",
"status": "ok",
"error": null
}
}
{
"error": "invalid_parameters"
}