REST API v1 · למפתחים
ה-API של BotGG למפתחים: שרת הדיסקורד שלכם מתחבר לכל דבר
ה-REST API של BotGG מאפשר לאתר, לשרת המשחק או לבקאנד שלכם לקרוא ולשנות את נתוני BotGG בשרת הדיסקורד — לחלק פרסים דרך הבנק, לסנכרן XP מהמשחק, לתגמל על הזמנות או להציג טבלאות מובילים באתר. יוצרים מפתח בקונסולה, שולחים בקשת HTTPS אחת, וזהו.
- כתובת בסיס:
https://console.botgg.app/api/v1 - JSON על גבי HTTPS, מפתחות
Authorization: Bearerעם הרשאות לכל משאב - תיאור קריא-מכונה של כל נקודות הקצה ב-OpenAPI 3.1
- בתוכנית החינמית: 2 מפתחות, 60 בקשות לדקה לכל מפתח
תיעוד למפתחים
בעמוד הזה
סקירה כללית
מה שהחברים עושים עם BotGG בדיסקורד — יתרות, רמות, הזמנות ועוד — זמין גם לקוד שלכם. כל חלק של BotGG הוא משאב עם נקודות קצה והרשאות משלו; כולם מופיעים במדריך העיון.
- כתובת בסיס:
https://console.botgg.app/api/v1. ב-HTTPS בלבד. - הבקשות והתשובות ב-JSON (
Content-Type: application/json). - המזהים הם snowflakes של דיסקורד (17–20 ספרות), והם תמיד נשלחים ומוחזרים כמחרוזות.
- כל מפתח שייך לשרת אחד ועובד רק בשרת הזה — ראו אימות.
- שרת-לשרת בלבד: בקשות מדפדפנים נדחות, כך שמפתח לעולם לא יגיע לקוד צד-לקוח.
התחלה מהירה
- פתחו את הקונסולה, בחרו שרת ועברו ל-API בתפריט הצד (נדרשת הרשאת Manage Server).
- צרו מפתח: תנו לו שם (למשל „אתר”), בחרו הרשאות (scopes) ותוקף אם רוצים. העתיקו את המפתח מיד — הוא מוצג פעם אחת בלבד.
- שמרו אותו כסוד בשרת שלכם, למשל במשתנה הסביבה
BOTGG_API_KEY. - שלחו את הבקשה הראשונה — למשל קריאת היתרה של חבר/ה בבנק (הרשאה
bank:read).
curl -s https://console.botgg.app/api/v1/guilds/123456789012345678/bank/members/876543210987654321 \
-H "Authorization: Bearer $BOTGG_API_KEY"{
"userId": "876543210987654321",
"balance": 1250,
"currency": { "name": "Coin", "plural": "Coins", "emoji": "🪙" }
}כל משאב דורש שהפיצ׳ר שלו יהיה מופעל בשרת; אחרת נקודות הקצה שלו מחזירות 409 FEATURE_DISABLED (BANK_DISABLED עבור הבנק). כל קודי השגיאה נמצאים בדף השגיאות.
מדריך עיון לפי משאב
דף עיון לכל משאב, שנוצר מאותו רישום שמפעיל את ה-API — פרמטרים, שדות בקשה ותשובה, הרשאות, קודי שגיאה ודוגמאות מוכנות ב-curl, JavaScript ו-Python:
כל נקודות הקצה
כל הנתיבים יחסיים ל-https://console.botgg.app/api/v1. {guildId} הוא המזהה של השרת שלכם, ו-{userId} הוא מזהה הדיסקורד של החבר/ה. נקודות קצה שמסומנות רגישה דורשות הרשאה שפועלת על חברים או חושפת נתוני ניהול.
אותו תיאור זמין כמסמך OpenAPI 3.1 — ייבאו אותו ל-Postman, ל-Insomnia או למחולל לקוחות. הגרסה העדכנית (בלי מפתח) נמצאת ב-https://console.botgg.app/api/v1/openapi.json.
איך ה-API מתנהג
- אימות ומפתחות API — פורמט המפתח, הרשאות, תוקף, ביטול ושיטות עבודה בטוחות.
- שגיאות — פורמט השגיאה וכל הקודים עם סטטוס ה-HTTP.
- מגבלות קצב — בקשות לדקה לכל מפתח לפי תוכנית והכותרות
X-RateLimit-*. - ניסיונות חוזרים בטוחים — הכותרת
Idempotency-Keyשהופכת כתיבה חוזרת לבטוחה. - Webhooks — אירועים חתומים ש-BotGG שולח לשרת שלכם, עם קוד אימות.
- עוזרי AI ו-MCP — שימוש ב-API מכלי AI.
דוגמאות מלאות
שינוי יתרה מלא: מפתח אידמפוטנטיות אחד לכל שינוי, המתנה ב-429/503 וטיפול ב-INSUFFICIENT_FUNDS. הריצו אותו בשרת, לעולם לא בדפדפן.
// Node.js 22+ (built-in fetch). Run it on your server — never in a browser or game client.
const API = 'https://console.botgg.app/api/v1';
const KEY = process.env.BOTGG_API_KEY; // a key with the bank:write scope, kept in a secret
const GUILD_ID = '123456789012345678';
export async function changeBalance(userId, type, amount, reason) {
// One Idempotency-Key per logical change: every retry below reuses it, so the change happens once.
const idempotencyKey = crypto.randomUUID();
for (let attempt = 1; attempt <= 3; attempt++) {
const res = await fetch(`${API}/guilds/${GUILD_ID}/bank/members/${userId}/transactions`, {
method: 'POST',
headers: {
Authorization: `Bearer ${KEY}`,
'Content-Type': 'application/json',
'Idempotency-Key': idempotencyKey,
},
body: JSON.stringify({ type, amount, reason }),
});
const data = await res.json();
if (res.ok) return data; // 201 — or the original response, replayed
if (res.status === 429 || res.status === 503) {
const seconds = Number(res.headers.get('Retry-After')) || attempt * 2;
await new Promise((resolve) => setTimeout(resolve, seconds * 1000));
continue;
}
if (data.error === 'INSUFFICIENT_FUNDS') {
throw new Error(`Not enough balance: the member has ${data.balance}`);
}
throw new Error(`${res.status} ${data.error}: ${data.message}`);
}
throw new Error('BotGG API is busy, try again later');
}
const tx = await changeBalance('876543210987654321', 'add', 100, 'Tournament prize');
console.log(`New balance: ${tx.balance}`);# Python 3 + requests. Run it on your server — never ship the key to clients.
import os, time, uuid
import requests
API = "https://console.botgg.app/api/v1"
KEY = os.environ["BOTGG_API_KEY"] # a key with the bank:write scope
GUILD_ID = "123456789012345678"
def change_balance(user_id, type_, amount, reason=None):
idempotency_key = str(uuid.uuid4()) # one per logical change, reused on every retry
for attempt in range(1, 4):
res = requests.post(
f"{API}/guilds/{GUILD_ID}/bank/members/{user_id}/transactions",
headers={"Authorization": f"Bearer {KEY}", "Idempotency-Key": idempotency_key},
json={"type": type_, "amount": amount, "reason": reason},
timeout=10,
)
data = res.json()
if res.ok:
return data # 201 — or the original response, replayed
if res.status_code in (429, 503):
time.sleep(int(res.headers.get("Retry-After", attempt * 2)))
continue
raise RuntimeError(f"{res.status_code} {data['error']}: {data['message']}")
raise RuntimeError("BotGG API is busy, try again later")
print(change_balance("876543210987654321", "add", 100, "Tournament prize")["balance"])