REST API v1 · למפתחים · מדריך עיון ל-API

מדריך עיון ל-API: חנות

כל 10 נקודות הקצה של חנות ב-REST API v1 של BotGG: הרשאות, פרמטרים, שדות, שגיאות ודוגמאות מוכנות ב-curl, JavaScript ו-Python.

תיעוד למפתחים
בעמוד הזה

נקודות קצה

הנתיבים יחסיים ל-https://console.botgg.app/api/v1. שלחו את מפתח ה-API בכותרת Authorization: Bearer botgg_…; מזהים הם מחרוזות.

נקודות קצה: חנות
נקודת קצההרשאהתיאור
GET/guilds/{guildId}/shop/storesshop:readList stores
GET/guilds/{guildId}/shop/itemsshop:readList items
GET/guilds/{guildId}/shop/items/{itemId}shop:readGet an item
PATCH/guilds/{guildId}/shop/items/{itemId}shop:writeRestock or turn an item on/off
GET/guilds/{guildId}/shop/members/{userId}/inventoryshop:readA member’s inventory
GET/guilds/{guildId}/shop/purchasesshop:readList purchases
GET/guilds/{guildId}/shop/purchases/{purchaseId}shop:readGet a purchase
POST/guilds/{guildId}/shop/members/{userId}/purchasesshop:writeBuy an item for a member
POST/guilds/{guildId}/shop/members/{userId}/grantsshop:writeGive an item to a member for free
POST/guilds/{guildId}/shop/purchases/{purchaseId}/refundshop:writeRefund a purchase

מלבד השגיאות הייחודיות שלה (בהמשך), כל נקודת קצה יכולה להחזיר את השגיאות הכלליות האלה:

List stores

GET/guilds/{guildId}/shop/stores

הרשאה: shop:read

The built-in Main store (id: null, items without a store) first, then the stores in their order.

נדרש שהפיצ׳ר הזה יהיה מופעל בשרת: חנות

פרמטרים
שםמיקוםסוגחובהתיאור
guildIdנתיבstringכןהמזהה של השרת שלכם · מזהה דיסקורד (מחרוזת)

תשובה

שדות התשובה · 200
שדהסוגחובהתיאור
itemsarray of objectכן
items[].idinteger | nullכןnull = the built-in Main store
items[].mainbooleanכן
items[].namestring | nullכןnull for the Main store
items[].emojistring | nullכן
items[].descriptionstring | nullכן
items[].colorstring | nullכן
items[].enabledbooleanכן
items[].channelIdsarray of stringכן
items[].itemCountintegerכן
תשובה · 200
{
  "items": [
    {
      "id": 98765,
      "main": true,
      "name": "Example",
      "emoji": "🪙",
      "description": "example",
      "color": "#18d7ff",
      "enabled": true,
      "channelIds": [
        "234567890123456789"
      ],
      "itemCount": 10
    }
  ]
}

דוגמאות

curl
curl -s "https://console.botgg.app/api/v1/guilds/123456789012345678/shop/stores" \
  -H "Authorization: Bearer $BOTGG_API_KEY"
JavaScript (fetch)
// 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/shop/stores', {
  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);
Python (requests)
import os
import requests

res = requests.get(
    "https://console.botgg.app/api/v1/guilds/123456789012345678/shop/stores",
    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קודים
409FEATURE_DISABLED
503SERVICE_UNAVAILABLE

List items

GET/guilds/{guildId}/shop/items

הרשאה: shop:read

In sort order. Only enabled items unless includeDisabled=true; hidden items are included (hidden: true).

נדרש שהפיצ׳ר הזה יהיה מופעל בשרת: חנות

פרמטרים
שםמיקוםסוגחובהתיאור
guildIdנתיבstringכןהמזהה של השרת שלכם · מזהה דיסקורד (מחרוזת)
storeIdquery"main"לא
categoryquerystringלא1–32 תווים
includeDisabledquerystringלאאחד מ: 1, 0, true, false

תשובה

שדות התשובה · 200
שדהסוגחובהתיאור
itemsarray of objectכן
items[].idintegerכן
items[].storeIdinteger | nullכןnull = Main store
items[].namestringכן
items[].descriptionstring | nullכן
items[].emojistring | nullכן
items[].priceintegerכן
items[].typestringכןאחד מ: role, color, item
items[].categorystring | nullכן
items[].roleIdstring | nullכן
items[].durationSecintegerכןTimed role length; 0 = permanent
items[].consumablebooleanכן
items[].fulfillmentbooleanכןStaff deliver it (fulfilment request)
items[].stockinteger | nullכןnull = unlimited
items[].perUserLimitinteger | nullכן
items[].requiredRoleIdsarray of stringכן
items[].minLevelintegerכן
items[].enabledbooleanכן
items[].hiddenbooleanכן
items[].sortOrderintegerכן
currencyobjectכן
currency.namestringכן
currency.pluralstringכן
currency.emojistring | nullכן
תשובה · 200
{
  "items": [
    {
      "id": 98765,
      "storeId": 98765,
      "name": "Example",
      "description": "example",
      "emoji": "🪙",
      "price": 250,
      "type": "role",
      "category": "example",
      "roleId": "234567890123456789",
      "durationSec": 10,
      "consumable": true,
      "fulfillment": true,
      "stock": 10,
      "perUserLimit": 10,
      "requiredRoleIds": [
        "234567890123456789"
      ],
      "minLevel": 10,
      "enabled": true,
      "hidden": true,
      "sortOrder": 10
    }
  ],
  "currency": {
    "name": "Example",
    "plural": "example",
    "emoji": "🪙"
  }
}

דוגמאות

curl
curl -s "https://console.botgg.app/api/v1/guilds/123456789012345678/shop/items" \
  -H "Authorization: Bearer $BOTGG_API_KEY"
JavaScript (fetch)
// 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/shop/items', {
  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);
Python (requests)
import os
import requests

res = requests.get(
    "https://console.botgg.app/api/v1/guilds/123456789012345678/shop/items",
    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קודים
409FEATURE_DISABLED
503SERVICE_UNAVAILABLE

Get an item

GET/guilds/{guildId}/shop/items/{itemId}

הרשאה: shop:read

נדרש שהפיצ׳ר הזה יהיה מופעל בשרת: חנות

פרמטרים
שםמיקוםסוגחובהתיאור
guildIdנתיבstringכןהמזהה של השרת שלכם · מזהה דיסקורד (מחרוזת)
itemIdנתיבstringכן

תשובה

שדות התשובה · 200
שדהסוגחובהתיאור
idintegerכן
storeIdinteger | nullכןnull = Main store
namestringכן
descriptionstring | nullכן
emojistring | nullכן
priceintegerכן
typestringכןאחד מ: role, color, item
categorystring | nullכן
roleIdstring | nullכן
durationSecintegerכןTimed role length; 0 = permanent
consumablebooleanכן
fulfillmentbooleanכןStaff deliver it (fulfilment request)
stockinteger | nullכןnull = unlimited
perUserLimitinteger | nullכן
requiredRoleIdsarray of stringכן
minLevelintegerכן
enabledbooleanכן
hiddenbooleanכן
sortOrderintegerכן
תשובה · 200
{
  "id": 98765,
  "storeId": 98765,
  "name": "Example",
  "description": "example",
  "emoji": "🪙",
  "price": 250,
  "type": "role",
  "category": "example",
  "roleId": "234567890123456789",
  "durationSec": 10,
  "consumable": true,
  "fulfillment": true,
  "stock": 10,
  "perUserLimit": 10,
  "requiredRoleIds": [
    "234567890123456789"
  ],
  "minLevel": 10,
  "enabled": true,
  "hidden": true,
  "sortOrder": 10
}

דוגמאות

curl
curl -s "https://console.botgg.app/api/v1/guilds/123456789012345678/shop/items/234567890123456789" \
  -H "Authorization: Bearer $BOTGG_API_KEY"
JavaScript (fetch)
// 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/shop/items/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);
Python (requests)
import os
import requests

res = requests.get(
    "https://console.botgg.app/api/v1/guilds/123456789012345678/shop/items/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)

שגיאות

Restock or turn an item on/off

PATCH/guilds/{guildId}/shop/items/{itemId}

הרשאה: shop:writeרגישה

Like /shopadmin restock and toggle. Send stock (null = unlimited) and/or enabled.

נדרש שהפיצ׳ר הזה יהיה מופעל בשרת: חנות

פרמטרים
שםמיקוםסוגחובהתיאור
guildIdנתיבstringכןהמזהה של השרת שלכם · מזהה דיסקורד (מחרוזת)
itemIdנתיבstringכן

גוף הבקשה

גוף הבקשה
שדהסוגחובהתיאור
enabledbooleanלאOff = not listed, not buyable
stockinteger | nullלאNew stock; null = unlimited
0–1,000,000

תשובה

שדות התשובה · 200
שדהסוגחובהתיאור
idintegerכן
storeIdinteger | nullכןnull = Main store
namestringכן
descriptionstring | nullכן
emojistring | nullכן
priceintegerכן
typestringכןאחד מ: role, color, item
categorystring | nullכן
roleIdstring | nullכן
durationSecintegerכןTimed role length; 0 = permanent
consumablebooleanכן
fulfillmentbooleanכןStaff deliver it (fulfilment request)
stockinteger | nullכןnull = unlimited
perUserLimitinteger | nullכן
requiredRoleIdsarray of stringכן
minLevelintegerכן
enabledbooleanכן
hiddenbooleanכן
sortOrderintegerכן
תשובה · 200
{
  "id": 98765,
  "storeId": 98765,
  "name": "Example",
  "description": "example",
  "emoji": "🪙",
  "price": 250,
  "type": "role",
  "category": "example",
  "roleId": "234567890123456789",
  "durationSec": 10,
  "consumable": true,
  "fulfillment": true,
  "stock": 10,
  "perUserLimit": 10,
  "requiredRoleIds": [
    "234567890123456789"
  ],
  "minLevel": 10,
  "enabled": true,
  "hidden": true,
  "sortOrder": 10
}

דוגמאות

curl
curl -s -X PATCH "https://console.botgg.app/api/v1/guilds/123456789012345678/shop/items/234567890123456789" \
  -H "Authorization: Bearer $BOTGG_API_KEY" \
  -H "Content-Type: application/json" \
  -d '{"enabled":true,"stock":10}'
JavaScript (fetch)
// 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/shop/items/234567890123456789', {
  method: 'PATCH',
  headers: {
    Authorization: `Bearer ${process.env.BOTGG_API_KEY}`,
    'Content-Type': 'application/json',
  },
  body: JSON.stringify({
    enabled: true,
    stock: 10,
  }),
});
const data = await res.json();
if (!res.ok) throw new Error(`${res.status} ${data.error}: ${data.message}`);
console.log(data);
Python (requests)
import os
import requests

res = requests.patch(
    "https://console.botgg.app/api/v1/guilds/123456789012345678/shop/items/234567890123456789",
    headers={
        "Authorization": f"Bearer {os.environ['BOTGG_API_KEY']}",
    },
    json={
        "enabled": True,
        "stock": 10,
    },
    timeout=10,
)
data = res.json()
if not res.ok:
    raise RuntimeError(f"{res.status_code} {data['error']}: {data['message']}")
print(data)

שגיאות

A member’s inventory

GET/guilds/{guildId}/shop/members/{userId}/inventory

הרשאה: shop:read

Non-refunded purchases (owned and used), newest first; roleActive = a granted role that hasn’t expired or been removed.

נדרש שהפיצ׳ר הזה יהיה מופעל בשרת: חנות

פרמטרים
שםמיקוםסוגחובהתיאור
guildIdנתיבstringכןהמזהה של השרת שלכם · מזהה דיסקורד (מחרוזת)
userIdנתיבstringכןמזהה הדיסקורד של החבר/ה · מזהה דיסקורד (מחרוזת)

תשובה

שדות התשובה · 200
שדהסוגחובהתיאור
itemsarray of objectכן
items[].idintegerכן
items[].itemIdinteger | nullכןnull when the item was deleted (the snapshot stays)
items[].storeIdinteger | nullכן
items[].storeNamestring | nullכן
items[].itemNamestringכן
items[].itemEmojistring | nullכן
items[].itemTypestringכן
items[].userIdstringכן
items[].priceintegerכן0 for free grants
items[].statusstringכןאחד מ: owned, used, refunded
items[].roleIdstring | nullכן
items[].expiresAtstring | nullכן
items[].roleRemovedAtstring | nullכן
items[].fulfillmentstringכןאחד מ: none, pending, done
items[].bankTransactionIdinteger | nullכן
items[].refundTransactionIdinteger | nullכן
items[].usedAtstring | nullכן
items[].refundedAtstring | nullכן
items[].createdAtstringכן
items[].roleActivebooleanכן
תשובה · 200
{
  "items": [
    {
      "id": 98765,
      "itemId": 98765,
      "storeId": 98765,
      "storeName": "example",
      "itemName": "example",
      "itemEmoji": "🪙",
      "itemType": "example",
      "userId": "876543210987654321",
      "price": 250,
      "status": "owned",
      "roleId": "234567890123456789",
      "expiresAt": "2026-10-07T12:00:00.000Z",
      "roleRemovedAt": "2026-10-07T12:00:00.000Z",
      "fulfillment": "none",
      "bankTransactionId": 98765,
      "refundTransactionId": 98765,
      "usedAt": "2026-10-07T12:00:00.000Z",
      "refundedAt": "2026-10-07T12:00:00.000Z",
      "createdAt": "2026-10-07T12:00:00.000Z",
      "roleActive": true
    }
  ]
}

דוגמאות

curl
curl -s "https://console.botgg.app/api/v1/guilds/123456789012345678/shop/members/876543210987654321/inventory" \
  -H "Authorization: Bearer $BOTGG_API_KEY"
JavaScript (fetch)
// 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/shop/members/876543210987654321/inventory', {
  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);
Python (requests)
import os
import requests

res = requests.get(
    "https://console.botgg.app/api/v1/guilds/123456789012345678/shop/members/876543210987654321/inventory",
    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קודים
409FEATURE_DISABLED
503SERVICE_UNAVAILABLE

List purchases

GET/guilds/{guildId}/shop/purchases

הרשאה: shop:read

The purchase ledger, newest first. Pass before=<nextCursor> for the next page.

נדרש שהפיצ׳ר הזה יהיה מופעל בשרת: חנות

פרמטרים
שםמיקוםסוגחובהתיאור
guildIdנתיבstringכןהמזהה של השרת שלכם · מזהה דיסקורד (מחרוזת)
limitqueryintegerלא1–100 · ברירת מחדל 25
beforequeryintegerלאלפחות 1
userIdquerystringלאמזהה דיסקורד (מחרוזת)
itemIdqueryintegerלאלפחות 1
storeIdquery"main"לא
statusquerystringלאאחד מ: owned, used, refunded

תשובה

שדות התשובה · 200
שדהסוגחובהתיאור
itemsarray of objectכן
items[].idintegerכן
items[].itemIdinteger | nullכןnull when the item was deleted (the snapshot stays)
items[].storeIdinteger | nullכן
items[].storeNamestring | nullכן
items[].itemNamestringכן
items[].itemEmojistring | nullכן
items[].itemTypestringכן
items[].userIdstringכן
items[].priceintegerכן0 for free grants
items[].statusstringכןאחד מ: owned, used, refunded
items[].roleIdstring | nullכן
items[].expiresAtstring | nullכן
items[].roleRemovedAtstring | nullכן
items[].fulfillmentstringכןאחד מ: none, pending, done
items[].bankTransactionIdinteger | nullכן
items[].refundTransactionIdinteger | nullכן
items[].usedAtstring | nullכן
items[].refundedAtstring | nullכן
items[].createdAtstringכן
nextCursorstring | nullכן
תשובה · 200
{
  "items": [
    {
      "id": 98765,
      "itemId": 98765,
      "storeId": 98765,
      "storeName": "example",
      "itemName": "example",
      "itemEmoji": "🪙",
      "itemType": "example",
      "userId": "876543210987654321",
      "price": 250,
      "status": "owned",
      "roleId": "234567890123456789",
      "expiresAt": "2026-10-07T12:00:00.000Z",
      "roleRemovedAt": "2026-10-07T12:00:00.000Z",
      "fulfillment": "none",
      "bankTransactionId": 98765,
      "refundTransactionId": 98765,
      "usedAt": "2026-10-07T12:00:00.000Z",
      "refundedAt": "2026-10-07T12:00:00.000Z",
      "createdAt": "2026-10-07T12:00:00.000Z"
    }
  ],
  "nextCursor": "98700"
}

דוגמאות

curl
curl -s "https://console.botgg.app/api/v1/guilds/123456789012345678/shop/purchases?limit=25" \
  -H "Authorization: Bearer $BOTGG_API_KEY"
JavaScript (fetch)
// 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/shop/purchases?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);
Python (requests)
import os
import requests

res = requests.get(
    "https://console.botgg.app/api/v1/guilds/123456789012345678/shop/purchases",
    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קודים
409FEATURE_DISABLED
503SERVICE_UNAVAILABLE

Get a purchase

GET/guilds/{guildId}/shop/purchases/{purchaseId}

הרשאה: shop:read

נדרש שהפיצ׳ר הזה יהיה מופעל בשרת: חנות

פרמטרים
שםמיקוםסוגחובהתיאור
guildIdנתיבstringכןהמזהה של השרת שלכם · מזהה דיסקורד (מחרוזת)
purchaseIdנתיבstringכן

תשובה

שדות התשובה · 200
שדהסוגחובהתיאור
idintegerכן
itemIdinteger | nullכןnull when the item was deleted (the snapshot stays)
storeIdinteger | nullכן
storeNamestring | nullכן
itemNamestringכן
itemEmojistring | nullכן
itemTypestringכן
userIdstringכן
priceintegerכן0 for free grants
statusstringכןאחד מ: owned, used, refunded
roleIdstring | nullכן
expiresAtstring | nullכן
roleRemovedAtstring | nullכן
fulfillmentstringכןאחד מ: none, pending, done
bankTransactionIdinteger | nullכן
refundTransactionIdinteger | nullכן
usedAtstring | nullכן
refundedAtstring | nullכן
createdAtstringכן
תשובה · 200
{
  "id": 98765,
  "itemId": 98765,
  "storeId": 98765,
  "storeName": "example",
  "itemName": "example",
  "itemEmoji": "🪙",
  "itemType": "example",
  "userId": "876543210987654321",
  "price": 250,
  "status": "owned",
  "roleId": "234567890123456789",
  "expiresAt": "2026-10-07T12:00:00.000Z",
  "roleRemovedAt": "2026-10-07T12:00:00.000Z",
  "fulfillment": "none",
  "bankTransactionId": 98765,
  "refundTransactionId": 98765,
  "usedAt": "2026-10-07T12:00:00.000Z",
  "refundedAt": "2026-10-07T12:00:00.000Z",
  "createdAt": "2026-10-07T12:00:00.000Z"
}

דוגמאות

curl
curl -s "https://console.botgg.app/api/v1/guilds/123456789012345678/shop/purchases/234567890123456789" \
  -H "Authorization: Bearer $BOTGG_API_KEY"
JavaScript (fetch)
// 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/shop/purchases/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);
Python (requests)
import os
import requests

res = requests.get(
    "https://console.botgg.app/api/v1/guilds/123456789012345678/shop/purchases/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)

שגיאות

Buy an item for a member

POST/guilds/{guildId}/shop/members/{userId}/purchases

הרשאה: shop:writeרגישהIdempotency-Key

Same rules as /shop: the price is charged from the member’s Bank balance in one transaction with the stock and limits; requirements (roles, level) apply. A role item’s role is given right away (if Discord refuses, nothing is charged). Fulfilment requests and the Shop log are posted like a /shop purchase.

נדרש שהפיצ׳ר הזה יהיה מופעל בשרת: חנות

פרמטרים
שםמיקוםסוגחובהתיאור
guildIdנתיבstringכןהמזהה של השרת שלכם · מזהה דיסקורד (מחרוזת)
userIdנתיבstringכןמזהה הדיסקורד של החבר/ה · מזהה דיסקורד (מחרוזת)
Idempotency-Keyכותרתstringלאלא חובה. שלחו ערך ייחודי (UUID) והשתמשו בו שוב בניסיונות חוזרים — השינוי יקרה פעם אחת בלבד. איך זה עובד

גוף הבקשה

גוף הבקשה
שדהסוגחובהתיאור
itemIdintegerכןלפחות 1
expectedPriceintegerלאRefused with SHOP_ITEM_UNAVAILABLE (price_changed) when the price differs
0–1,000,000,000

תשובה

שדות התשובה · 201
שדהסוגחובהתיאור
purchaseobjectכן
purchase.idintegerכן
purchase.itemIdinteger | nullכןnull when the item was deleted (the snapshot stays)
purchase.storeIdinteger | nullכן
purchase.storeNamestring | nullכן
purchase.itemNamestringכן
purchase.itemEmojistring | nullכן
purchase.itemTypestringכן
purchase.userIdstringכן
purchase.priceintegerכן0 for free grants
purchase.statusstringכןאחד מ: owned, used, refunded
purchase.roleIdstring | nullכן
purchase.expiresAtstring | nullכן
purchase.roleRemovedAtstring | nullכן
purchase.fulfillmentstringכןאחד מ: none, pending, done
purchase.bankTransactionIdinteger | nullכן
purchase.refundTransactionIdinteger | nullכן
purchase.usedAtstring | nullכן
purchase.refundedAtstring | nullכן
purchase.createdAtstringכן
balanceinteger | nullכןThe member’s balance afterwards (null when unchanged)
תשובה · 201
{
  "purchase": {
    "id": 98765,
    "itemId": 98765,
    "storeId": 98765,
    "storeName": "example",
    "itemName": "example",
    "itemEmoji": "🪙",
    "itemType": "example",
    "userId": "876543210987654321",
    "price": 250,
    "status": "owned",
    "roleId": "234567890123456789",
    "expiresAt": "2026-10-07T12:00:00.000Z",
    "roleRemovedAt": "2026-10-07T12:00:00.000Z",
    "fulfillment": "none",
    "bankTransactionId": 98765,
    "refundTransactionId": 98765,
    "usedAt": "2026-10-07T12:00:00.000Z",
    "refundedAt": "2026-10-07T12:00:00.000Z",
    "createdAt": "2026-10-07T12:00:00.000Z"
  },
  "balance": 1350
}

דוגמאות

curl
curl -s -X POST "https://console.botgg.app/api/v1/guilds/123456789012345678/shop/members/876543210987654321/purchases" \
  -H "Authorization: Bearer $BOTGG_API_KEY" \
  -H "Content-Type: application/json" \
  -H "Idempotency-Key: $(uuidgen)" \
  -d '{"itemId":98765,"expectedPrice":10}'
JavaScript (fetch)
// 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/shop/members/876543210987654321/purchases', {
  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({
    itemId: 98765,
    expectedPrice: 10,
  }),
});
const data = await res.json();
if (!res.ok) throw new Error(`${res.status} ${data.error}: ${data.message}`);
console.log(data);
Python (requests)
import os, uuid
import requests

res = requests.post(
    "https://console.botgg.app/api/v1/guilds/123456789012345678/shop/members/876543210987654321/purchases",
    headers={
        "Authorization": f"Bearer {os.environ['BOTGG_API_KEY']}",
        "Idempotency-Key": str(uuid.uuid4()),  # reuse it when you retry this request
    },
    json={
        "itemId": 98765,
        "expectedPrice": 10,
    },
    timeout=10,
)
data = res.json()
if not res.ok:
    raise RuntimeError(f"{res.status_code} {data['error']}: {data['message']}")
print(data)

שגיאות

Give an item to a member for free

POST/guilds/{guildId}/shop/members/{userId}/grants

הרשאה: shop:writeרגישהIdempotency-Key

A staff grant: recorded as a purchase with price 0, no Bank change. Ignores the item’s on/off switch, a closed store, requirements and the per-member limit; stock still applies. A role item’s role is given right away.

נדרש שהפיצ׳ר הזה יהיה מופעל בשרת: חנות

פרמטרים
שםמיקוםסוגחובהתיאור
guildIdנתיבstringכןהמזהה של השרת שלכם · מזהה דיסקורד (מחרוזת)
userIdנתיבstringכןמזהה הדיסקורד של החבר/ה · מזהה דיסקורד (מחרוזת)
Idempotency-Keyכותרתstringלאלא חובה. שלחו ערך ייחודי (UUID) והשתמשו בו שוב בניסיונות חוזרים — השינוי יקרה פעם אחת בלבד. איך זה עובד

גוף הבקשה

גוף הבקשה
שדהסוגחובהתיאור
itemIdintegerכןלפחות 1
reasonstring | nullלאShown in the audit log
עד 200 תווים

תשובה

שדות התשובה · 201
שדהסוגחובהתיאור
purchaseobjectכן
purchase.idintegerכן
purchase.itemIdinteger | nullכןnull when the item was deleted (the snapshot stays)
purchase.storeIdinteger | nullכן
purchase.storeNamestring | nullכן
purchase.itemNamestringכן
purchase.itemEmojistring | nullכן
purchase.itemTypestringכן
purchase.userIdstringכן
purchase.priceintegerכן0 for free grants
purchase.statusstringכןאחד מ: owned, used, refunded
purchase.roleIdstring | nullכן
purchase.expiresAtstring | nullכן
purchase.roleRemovedAtstring | nullכן
purchase.fulfillmentstringכןאחד מ: none, pending, done
purchase.bankTransactionIdinteger | nullכן
purchase.refundTransactionIdinteger | nullכן
purchase.usedAtstring | nullכן
purchase.refundedAtstring | nullכן
purchase.createdAtstringכן
balanceinteger | nullכןThe member’s balance afterwards (null when unchanged)
תשובה · 201
{
  "purchase": {
    "id": 98765,
    "itemId": 98765,
    "storeId": 98765,
    "storeName": "example",
    "itemName": "example",
    "itemEmoji": "🪙",
    "itemType": "example",
    "userId": "876543210987654321",
    "price": 250,
    "status": "owned",
    "roleId": "234567890123456789",
    "expiresAt": "2026-10-07T12:00:00.000Z",
    "roleRemovedAt": "2026-10-07T12:00:00.000Z",
    "fulfillment": "none",
    "bankTransactionId": 98765,
    "refundTransactionId": 98765,
    "usedAt": "2026-10-07T12:00:00.000Z",
    "refundedAt": "2026-10-07T12:00:00.000Z",
    "createdAt": "2026-10-07T12:00:00.000Z"
  },
  "balance": 1350
}

דוגמאות

curl
curl -s -X POST "https://console.botgg.app/api/v1/guilds/123456789012345678/shop/members/876543210987654321/grants" \
  -H "Authorization: Bearer $BOTGG_API_KEY" \
  -H "Content-Type: application/json" \
  -H "Idempotency-Key: $(uuidgen)" \
  -d '{"itemId":98765,"reason":"Tournament prize"}'
JavaScript (fetch)
// 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/shop/members/876543210987654321/grants', {
  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({
    itemId: 98765,
    reason: 'Tournament prize',
  }),
});
const data = await res.json();
if (!res.ok) throw new Error(`${res.status} ${data.error}: ${data.message}`);
console.log(data);
Python (requests)
import os, uuid
import requests

res = requests.post(
    "https://console.botgg.app/api/v1/guilds/123456789012345678/shop/members/876543210987654321/grants",
    headers={
        "Authorization": f"Bearer {os.environ['BOTGG_API_KEY']}",
        "Idempotency-Key": str(uuid.uuid4()),  # reuse it when you retry this request
    },
    json={
        "itemId": 98765,
        "reason": "Tournament prize",
    },
    timeout=10,
)
data = res.json()
if not res.ok:
    raise RuntimeError(f"{res.status_code} {data['error']}: {data['message']}")
print(data)

שגיאות

Refund a purchase

POST/guilds/{guildId}/shop/purchases/{purchaseId}/refund

הרשאה: shop:writeרגישהIdempotency-Key

Like Refund in the console: the price goes back to the member’s balance (one transaction), the purchase becomes refunded, optionally restocked; a granted role is removed by the bot within ~30 s.

נדרש שהפיצ׳ר הזה יהיה מופעל בשרת: חנות

פרמטרים
שםמיקוםסוגחובהתיאור
guildIdנתיבstringכןהמזהה של השרת שלכם · מזהה דיסקורד (מחרוזת)
purchaseIdנתיבstringכן
Idempotency-Keyכותרתstringלאלא חובה. שלחו ערך ייחודי (UUID) והשתמשו בו שוב בניסיונות חוזרים — השינוי יקרה פעם אחת בלבד. איך זה עובד

גוף הבקשה

גוף הבקשה
שדהסוגחובהתיאור
restockbooleanלאPut the unit back in stock (default: the Shop’s “restock on refund” setting)
forcebooleanלאAlso refund an item that was already used
reasonstring | nullלאShown in the audit log
עד 200 תווים

תשובה

שדות התשובה · 200
שדהסוגחובהתיאור
purchaseobjectכן
purchase.idintegerכן
purchase.itemIdinteger | nullכןnull when the item was deleted (the snapshot stays)
purchase.storeIdinteger | nullכן
purchase.storeNamestring | nullכן
purchase.itemNamestringכן
purchase.itemEmojistring | nullכן
purchase.itemTypestringכן
purchase.userIdstringכן
purchase.priceintegerכן0 for free grants
purchase.statusstringכןאחד מ: owned, used, refunded
purchase.roleIdstring | nullכן
purchase.expiresAtstring | nullכן
purchase.roleRemovedAtstring | nullכן
purchase.fulfillmentstringכןאחד מ: none, pending, done
purchase.bankTransactionIdinteger | nullכן
purchase.refundTransactionIdinteger | nullכן
purchase.usedAtstring | nullכן
purchase.refundedAtstring | nullכן
purchase.createdAtstringכן
balanceinteger | nullכןThe member’s balance afterwards (null when unchanged)
תשובה · 200
{
  "purchase": {
    "id": 98765,
    "itemId": 98765,
    "storeId": 98765,
    "storeName": "example",
    "itemName": "example",
    "itemEmoji": "🪙",
    "itemType": "example",
    "userId": "876543210987654321",
    "price": 250,
    "status": "owned",
    "roleId": "234567890123456789",
    "expiresAt": "2026-10-07T12:00:00.000Z",
    "roleRemovedAt": "2026-10-07T12:00:00.000Z",
    "fulfillment": "none",
    "bankTransactionId": 98765,
    "refundTransactionId": 98765,
    "usedAt": "2026-10-07T12:00:00.000Z",
    "refundedAt": "2026-10-07T12:00:00.000Z",
    "createdAt": "2026-10-07T12:00:00.000Z"
  },
  "balance": 1350
}

דוגמאות

curl
curl -s -X POST "https://console.botgg.app/api/v1/guilds/123456789012345678/shop/purchases/234567890123456789/refund" \
  -H "Authorization: Bearer $BOTGG_API_KEY" \
  -H "Content-Type: application/json" \
  -H "Idempotency-Key: $(uuidgen)" \
  -d '{"restock":true,"force":true,"reason":"Tournament prize"}'
JavaScript (fetch)
// 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/shop/purchases/234567890123456789/refund', {
  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({
    restock: true,
    force: true,
    reason: 'Tournament prize',
  }),
});
const data = await res.json();
if (!res.ok) throw new Error(`${res.status} ${data.error}: ${data.message}`);
console.log(data);
Python (requests)
import os, uuid
import requests

res = requests.post(
    "https://console.botgg.app/api/v1/guilds/123456789012345678/shop/purchases/234567890123456789/refund",
    headers={
        "Authorization": f"Bearer {os.environ['BOTGG_API_KEY']}",
        "Idempotency-Key": str(uuid.uuid4()),  # reuse it when you retry this request
    },
    json={
        "restock": True,
        "force": True,
        "reason": "Tournament prize",
    },
    timeout=10,
)
data = res.json()
if not res.ok:
    raise RuntimeError(f"{res.status_code} {data['error']}: {data['message']}")
print(data)

שגיאות

מוכנים לשדרג את השרת?

מוסיפים את BotGG בחינם ומפעילים יכולות בקונסולת הווב.