REST API v1 · Разработчикам · Справочник API
Справочник API: Банк
Все 4 эндпоинта раздела «Банк» в REST API BotGG v1: права, параметры, поля, ошибки и готовые примеры на curl, JavaScript и Python.
Документация для разработчиков
На этой странице
Эндпоинты
Пути указаны относительно https://console.botgg.app/api/v1. Передавайте API-ключ в заголовке Authorization: Bearer botgg_…; ID — строки.
| Эндпоинт | Право | Описание |
|---|---|---|
GET/guilds/{guildId}/bank/members/{userId} | bank:read | Get a member’s balance |
GET/guilds/{guildId}/bank/members/{userId}/transactions | bank:read | List a member’s transactions |
POST/guilds/{guildId}/bank/members/{userId}/transactions | bank:write | Add to or remove from a member’s balance |
GET/guilds/{guildId}/bank/leaderboard | bank:read | Top balances |
Кроме собственных ошибок (см. ниже), любой эндпоинт может вернуть эти общие:
Get a member’s balance
GET/guilds/{guildId}/bank/members/{userId}
Members without an account yet get the server’s starting balance.
На сервере должен быть включён модуль: Банк
| Имя | Где | Тип | Обязательное | Описание |
|---|---|---|---|---|
guildId | путь | string | Да | ID вашего сервера · Discord ID (строка) |
userId | путь | string | Да | Discord ID участника · Discord ID (строка) |
Ответ
| Поле | Тип | Обязательное | Описание |
|---|---|---|---|
userId | string | Да | |
balance | integer | Да | |
currency | object | Да | |
currency.name | string | Да | |
currency.plural | string | Да | |
currency.emoji | string | null | Да |
{
"userId": "876543210987654321",
"balance": 1350,
"currency": {
"name": "Example",
"plural": "example",
"emoji": "🪙"
}
}Примеры
curl -s "https://console.botgg.app/api/v1/guilds/123456789012345678/bank/members/876543210987654321" \
-H "Authorization: Bearer $BOTGG_API_KEY"// Node.js 18+ (built-in fetch) — on your server, never in a browser
const res = await fetch('https://console.botgg.app/api/v1/guilds/123456789012345678/bank/members/876543210987654321', {
method: 'GET',
headers: {
Authorization: `Bearer ${process.env.BOTGG_API_KEY}`,
},
});
const data = await res.json();
if (!res.ok) throw new Error(`${res.status} ${data.error}: ${data.message}`);
console.log(data);import os
import requests
res = requests.get(
"https://console.botgg.app/api/v1/guilds/123456789012345678/bank/members/876543210987654321",
headers={
"Authorization": f"Bearer {os.environ['BOTGG_API_KEY']}",
},
timeout=10,
)
data = res.json()
if not res.ok:
raise RuntimeError(f"{res.status_code} {data['error']}: {data['message']}")
print(data)Ошибки
| HTTP | Коды |
|---|---|
| 409 | BANK_DISABLED |
| 503 | SERVICE_UNAVAILABLE |
List a member’s transactions
GET/guilds/{guildId}/bank/members/{userId}/transactions
Newest first. Pass before=<nextCursor> for the next page.
На сервере должен быть включён модуль: Банк
| Имя | Где | Тип | Обязательное | Описание |
|---|---|---|---|---|
guildId | путь | string | Да | ID вашего сервера · Discord ID (строка) |
userId | путь | string | Да | Discord ID участника · Discord ID (строка) |
limit | query | integer | Нет | 1–100 · По умолчанию 25 |
before | query | integer | Нет | не меньше 1 |
Ответ
| Поле | Тип | Обязательное | Описание |
|---|---|---|---|
items | array of object | Да | |
items[].id | integer | Да | |
items[].type | string | Да | |
items[].amount | integer | Да | |
items[].balanceAfter | integer | Да | |
items[].reason | string | null | Да | |
items[].counterpartyId | string | null | Да | |
items[].createdAt | string | Да | |
nextCursor | string | null | Да |
{
"items": [
{
"id": 98765,
"type": "example",
"amount": 100,
"balanceAfter": 1350,
"reason": "Tournament prize",
"counterpartyId": "234567890123456789",
"createdAt": "2026-10-07T12:00:00.000Z"
}
],
"nextCursor": "98700"
}Примеры
curl -s "https://console.botgg.app/api/v1/guilds/123456789012345678/bank/members/876543210987654321/transactions?limit=25" \
-H "Authorization: Bearer $BOTGG_API_KEY"// Node.js 18+ (built-in fetch) — on your server, never in a browser
const res = await fetch('https://console.botgg.app/api/v1/guilds/123456789012345678/bank/members/876543210987654321/transactions?limit=25', {
method: 'GET',
headers: {
Authorization: `Bearer ${process.env.BOTGG_API_KEY}`,
},
});
const data = await res.json();
if (!res.ok) throw new Error(`${res.status} ${data.error}: ${data.message}`);
console.log(data);import os
import requests
res = requests.get(
"https://console.botgg.app/api/v1/guilds/123456789012345678/bank/members/876543210987654321/transactions",
headers={
"Authorization": f"Bearer {os.environ['BOTGG_API_KEY']}",
},
params={
"limit": 25,
},
timeout=10,
)
data = res.json()
if not res.ok:
raise RuntimeError(f"{res.status_code} {data['error']}: {data['message']}")
print(data)Ошибки
| HTTP | Коды |
|---|---|
| 409 | BANK_DISABLED |
| 503 | SERVICE_UNAVAILABLE |
Add to or remove from a member’s balance
POST/guilds/{guildId}/bank/members/{userId}/transactions
Same rules as a banker change. Logged in the Bank ledger (type api) and the Bank log channel.
На сервере должен быть включён модуль: Банк
| Имя | Где | Тип | Обязательное | Описание |
|---|---|---|---|---|
guildId | путь | string | Да | ID вашего сервера · Discord ID (строка) |
userId | путь | string | Да | Discord ID участника · Discord ID (строка) |
Idempotency-Key | заголовок | string | Нет | Необязательно. Передайте уникальное значение (UUID) и повторяйте его при ретраях — операция выполнится один раз. Как это работает |
Тело запроса
| Поле | Тип | Обязательное | Описание |
|---|---|---|---|
type | string | Да | add = credit, remove = debit Одно из add, remove |
amount | integer | Да | 1–1 000 000 000 000 |
reason | string | null | Нет | Shown in the Bank ledger and log до 200 символов |
Ответ
| Поле | Тип | Обязательное | Описание |
|---|---|---|---|
transactionId | integer | Да | |
userId | string | Да | |
type | string | Да | Одно из add, remove |
amount | integer | Да | |
previousBalance | integer | Да | |
balance | integer | Да | |
createdAt | string | Да |
{
"transactionId": 98765,
"userId": "876543210987654321",
"type": "add",
"amount": 100,
"previousBalance": 1250,
"balance": 1350,
"createdAt": "2026-10-07T12:00:00.000Z"
}Примеры
curl -s -X POST "https://console.botgg.app/api/v1/guilds/123456789012345678/bank/members/876543210987654321/transactions" \
-H "Authorization: Bearer $BOTGG_API_KEY" \
-H "Content-Type: application/json" \
-H "Idempotency-Key: $(uuidgen)" \
-d '{"type":"add","amount":100,"reason":"Tournament prize"}'// Node.js 18+ (built-in fetch) — on your server, never in a browser
const res = await fetch('https://console.botgg.app/api/v1/guilds/123456789012345678/bank/members/876543210987654321/transactions', {
method: 'POST',
headers: {
Authorization: `Bearer ${process.env.BOTGG_API_KEY}`,
'Content-Type': 'application/json',
'Idempotency-Key': crypto.randomUUID(), // reuse it when you retry this request
},
body: JSON.stringify({
type: 'add',
amount: 100,
reason: 'Tournament prize',
}),
});
const data = await res.json();
if (!res.ok) throw new Error(`${res.status} ${data.error}: ${data.message}`);
console.log(data);import os, uuid
import requests
res = requests.post(
"https://console.botgg.app/api/v1/guilds/123456789012345678/bank/members/876543210987654321/transactions",
headers={
"Authorization": f"Bearer {os.environ['BOTGG_API_KEY']}",
"Idempotency-Key": str(uuid.uuid4()), # reuse it when you retry this request
},
json={
"type": "add",
"amount": 100,
"reason": "Tournament prize",
},
timeout=10,
)
data = res.json()
if not res.ok:
raise RuntimeError(f"{res.status_code} {data['error']}: {data['message']}")
print(data)Ошибки
| HTTP | Коды |
|---|---|
| 400 | INVALID_JSON |
| 404 | MEMBER_NOT_FOUND |
| 409 | BANK_DISABLED, INSUFFICIENT_FUNDS |
| 413 | PAYLOAD_TOO_LARGE |
| 415 | UNSUPPORTED_MEDIA_TYPE |
| 422 | IDEMPOTENCY_KEY_REUSED, BOT_ACCOUNT, BALANCE_LIMIT |
| 503 | SERVICE_UNAVAILABLE |
Top balances
GET/guilds/{guildId}/bank/leaderboard
На сервере должен быть включён модуль: Банк
| Имя | Где | Тип | Обязательное | Описание |
|---|---|---|---|---|
guildId | путь | string | Да | ID вашего сервера · Discord ID (строка) |
limit | query | integer | Нет | 1–100 · По умолчанию 10 |
Ответ
| Поле | Тип | Обязательное | Описание |
|---|---|---|---|
items | array of object | Да | |
items[].rank | integer | Да | |
items[].userId | string | Да | |
items[].balance | integer | Да | |
currency | object | Да | |
currency.name | string | Да | |
currency.plural | string | Да | |
currency.emoji | string | null | Да |
{
"items": [
{
"rank": 1,
"userId": "876543210987654321",
"balance": 1350
}
],
"currency": {
"name": "Example",
"plural": "example",
"emoji": "🪙"
}
}Примеры
curl -s "https://console.botgg.app/api/v1/guilds/123456789012345678/bank/leaderboard?limit=10" \
-H "Authorization: Bearer $BOTGG_API_KEY"// Node.js 18+ (built-in fetch) — on your server, never in a browser
const res = await fetch('https://console.botgg.app/api/v1/guilds/123456789012345678/bank/leaderboard?limit=10', {
method: 'GET',
headers: {
Authorization: `Bearer ${process.env.BOTGG_API_KEY}`,
},
});
const data = await res.json();
if (!res.ok) throw new Error(`${res.status} ${data.error}: ${data.message}`);
console.log(data);import os
import requests
res = requests.get(
"https://console.botgg.app/api/v1/guilds/123456789012345678/bank/leaderboard",
headers={
"Authorization": f"Bearer {os.environ['BOTGG_API_KEY']}",
},
params={
"limit": 10,
},
timeout=10,
)
data = res.json()
if not res.ok:
raise RuntimeError(f"{res.status_code} {data['error']}: {data['message']}")
print(data)Ошибки
| HTTP | Коды |
|---|---|
| 409 | BANK_DISABLED |
| 503 | SERVICE_UNAVAILABLE |