REST API v1 · למפתחים · מדריך עיון ל-API
מדריך עיון ל-API: רמות
כל 4 נקודות הקצה של רמות ב-REST API v1 של BotGG: הרשאות, פרמטרים, שדות, שגיאות ודוגמאות מוכנות ב-curl, JavaScript ו-Python.
תיעוד למפתחים
בעמוד הזה
נקודות קצה
הנתיבים יחסיים ל-https://console.botgg.app/api/v1. שלחו את מפתח ה-API בכותרת Authorization: Bearer botgg_…; מזהים הם מחרוזות.
| נקודת קצה | הרשאה | תיאור |
|---|---|---|
GET/guilds/{guildId}/levels/members/{userId} | levels:read | Get a member’s level |
GET/guilds/{guildId}/levels/leaderboard | levels:read | XP leaderboard |
POST/guilds/{guildId}/levels/members/{userId}/xp-changes | levels:write | Add, remove or set a member’s XP |
GET/guilds/{guildId}/levels/xp-changes/{changeId} | levels:write | Get the status of an XP change |
מלבד השגיאות הייחודיות שלה (בהמשך), כל נקודת קצה יכולה להחזיר את השגיאות הכלליות האלה:
Get a member’s level
GET/guilds/{guildId}/levels/members/{userId}
Level, XP, progress and XP rank. Members without activity get zeros. Live activity can take a few seconds to show.
נדרש שהפיצ׳ר הזה יהיה מופעל בשרת: רמות
| שם | מיקום | סוג | חובה | תיאור |
|---|---|---|---|---|
guildId | נתיב | string | כן | המזהה של השרת שלכם · מזהה דיסקורד (מחרוזת) |
userId | נתיב | string | כן | מזהה הדיסקורד של החבר/ה · מזהה דיסקורד (מחרוזת) |
תשובה
| שדה | סוג | חובה | תיאור |
|---|---|---|---|
userId | string | כן | |
xp | integer | כן | |
level | integer | כן | |
xpIntoLevel | integer | כן | |
xpForNext | integer | כן | |
progress | number | כן | 0–1 inside the current level |
messages | integer | כן | |
voiceMinutes | integer | כן | |
streak | integer | כן | |
bestStreak | integer | כן | |
rank | integer | null | כן | By XP; null without XP |
hidden | boolean | כן | The member hid themselves from public leaderboards (/rank leaderboard:hide) |
lastXpAt | string | null | כן |
{
"userId": "876543210987654321",
"xp": 150,
"level": 5,
"xpIntoLevel": 10,
"xpForNext": 10,
"progress": 10,
"messages": 10,
"voiceMinutes": 10,
"streak": 10,
"bestStreak": 10,
"rank": 1,
"hidden": true,
"lastXpAt": "2026-10-07T12:00:00.000Z"
}דוגמאות
curl -s "https://console.botgg.app/api/v1/guilds/123456789012345678/levels/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/levels/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/levels/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 | FEATURE_DISABLED |
| 503 | SERVICE_UNAVAILABLE |
XP leaderboard
GET/guilds/{guildId}/levels/leaderboard
Highest XP first. Pass cursor=<nextCursor> for the next page. Members who hid themselves from public leaderboards keep their rank but have userId: null — respect that if you publish the list.
נדרש שהפיצ׳ר הזה יהיה מופעל בשרת: רמות
| שם | מיקום | סוג | חובה | תיאור |
|---|---|---|---|---|
guildId | נתיב | string | כן | המזהה של השרת שלכם · מזהה דיסקורד (מחרוזת) |
limit | query | integer | לא | 1–100 · ברירת מחדל 25 |
cursor | query | integer | לא | 0–10,000,000 · ברירת מחדל 0 |
תשובה
| שדה | סוג | חובה | תיאור |
|---|---|---|---|
items | array of object | כן | |
items[].rank | integer | כן | |
items[].userId | string | null | כן | null for members who hid themselves from public leaderboards |
items[].hidden | boolean | כן | |
items[].xp | integer | כן | |
items[].level | integer | כן | |
items[].messages | integer | כן | |
items[].voiceMinutes | integer | כן | |
total | integer | כן | |
nextCursor | string | null | כן |
{
"items": [
{
"rank": 1,
"userId": "876543210987654321",
"hidden": true,
"xp": 150,
"level": 5,
"messages": 10,
"voiceMinutes": 10
}
],
"total": 10,
"nextCursor": "98700"
}דוגמאות
curl -s "https://console.botgg.app/api/v1/guilds/123456789012345678/levels/leaderboard?limit=25&cursor=0" \
-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/levels/leaderboard?limit=25&cursor=0', {
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/levels/leaderboard",
headers={
"Authorization": f"Bearer {os.environ['BOTGG_API_KEY']}",
},
params={
"limit": 25,
"cursor": 0,
},
timeout=10,
)
data = res.json()
if not res.ok:
raise RuntimeError(f"{res.status_code} {data['error']}: {data['message']}")
print(data)שגיאות
| HTTP | קודים |
|---|---|
| 409 | FEATURE_DISABLED |
| 503 | SERVICE_UNAVAILABLE |
Add, remove or set a member’s XP
POST/guilds/{guildId}/levels/members/{userId}/xp-changes
Same as /levels give|take|set: the bot applies the change within a few seconds, then updates reward roles and posts level-up announcements. Answers 202 with a change id — poll GET …/levels/xp-changes/{changeId} for the result. Written to the audit log.
נדרש שהפיצ׳ר הזה יהיה מופעל בשרת: רמות
| שם | מיקום | סוג | חובה | תיאור |
|---|---|---|---|---|
guildId | נתיב | string | כן | המזהה של השרת שלכם · מזהה דיסקורד (מחרוזת) |
userId | נתיב | string | כן | מזהה הדיסקורד של החבר/ה · מזהה דיסקורד (מחרוזת) |
Idempotency-Key | כותרת | string | לא | לא חובה. שלחו ערך ייחודי (UUID) והשתמשו בו שוב בניסיונות חוזרים — השינוי יקרה פעם אחת בלבד. איך זה עובד |
גוף הבקשה
| שדה | סוג | חובה | תיאור |
|---|---|---|---|
type | string | כן | add / remove = relative change, set = new total אחד מ: add, remove, set |
amount | integer | כן | 0–2,000,000,000 |
unit | string | לא | Default xp. With levels, the progress inside the level is keptאחד מ: xp, levels |
reason | string | null | לא | Shown in the audit log עד 200 תווים |
תשובה
| שדה | סוג | חובה | תיאור |
|---|---|---|---|
changeId | string | כן | |
userId | string | כן | |
type | string | כן | אחד מ: add, remove, set |
unit | string | כן | אחד מ: xp, levels |
amount | integer | כן | |
status | string | כן | אחד מ: pending, processing, done, failed |
result | object | null | כן | When done |
result.previousLevel | integer | כן | |
result.level | integer | כן | |
result.xp | integer | כן | |
error | string | null | כן | When failed |
createdAt | string | כן | |
processedAt | string | null | כן |
{
"changeId": "234567890123456789",
"userId": "876543210987654321",
"type": "add",
"unit": "xp",
"amount": 100,
"status": "pending",
"result": {
"previousLevel": 4,
"level": 5,
"xp": 150
},
"error": "example",
"createdAt": "2026-10-07T12:00:00.000Z",
"processedAt": "2026-10-07T12:00:00.000Z"
}דוגמאות
curl -s -X POST "https://console.botgg.app/api/v1/guilds/123456789012345678/levels/members/876543210987654321/xp-changes" \
-H "Authorization: Bearer $BOTGG_API_KEY" \
-H "Content-Type: application/json" \
-H "Idempotency-Key: $(uuidgen)" \
-d '{"type":"add","amount":100,"unit":"xp","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/levels/members/876543210987654321/xp-changes', {
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,
unit: 'xp',
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/levels/members/876543210987654321/xp-changes",
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,
"unit": "xp",
"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 | FEATURE_DISABLED |
| 413 | PAYLOAD_TOO_LARGE |
| 415 | UNSUPPORTED_MEDIA_TYPE |
| 422 | IDEMPOTENCY_KEY_REUSED, BOT_ACCOUNT |
| 503 | SERVICE_UNAVAILABLE |
Get the status of an XP change
GET/guilds/{guildId}/levels/xp-changes/{changeId}
Only changes made with the same API key. done includes the level before/after and the new XP total.
נדרש שהפיצ׳ר הזה יהיה מופעל בשרת: רמות
| שם | מיקום | סוג | חובה | תיאור |
|---|---|---|---|---|
guildId | נתיב | string | כן | המזהה של השרת שלכם · מזהה דיסקורד (מחרוזת) |
changeId | נתיב | string | כן |
תשובה
| שדה | סוג | חובה | תיאור |
|---|---|---|---|
changeId | string | כן | |
userId | string | כן | |
type | string | כן | אחד מ: add, remove, set |
unit | string | כן | אחד מ: xp, levels |
amount | integer | כן | |
status | string | כן | אחד מ: pending, processing, done, failed |
result | object | null | כן | When done |
result.previousLevel | integer | כן | |
result.level | integer | כן | |
result.xp | integer | כן | |
error | string | null | כן | When failed |
createdAt | string | כן | |
processedAt | string | null | כן |
{
"changeId": "234567890123456789",
"userId": "876543210987654321",
"type": "add",
"unit": "xp",
"amount": 100,
"status": "pending",
"result": {
"previousLevel": 4,
"level": 5,
"xp": 150
},
"error": "example",
"createdAt": "2026-10-07T12:00:00.000Z",
"processedAt": "2026-10-07T12:00:00.000Z"
}דוגמאות
curl -s "https://console.botgg.app/api/v1/guilds/123456789012345678/levels/xp-changes/234567890123456789" \
-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/levels/xp-changes/234567890123456789', {
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/levels/xp-changes/234567890123456789",
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 | קודים |
|---|---|
| 404 | XP_CHANGE_NOT_FOUND |
| 409 | FEATURE_DISABLED |
| 503 | SERVICE_UNAVAILABLE |