Configuration
How to configure store panels, products, providers, rewards, and permissions.
Configuration
The Store plugin is configured through configuration/store.json5. Below is a full reference of every available option.
General Settings
LICENSE_KEY: Your plugin license key from Zero Development.currency: The default currency for all products (e.g."usd"). Can be overridden per product.
Providers
Configure your payment providers inside the providers block. Only configure the providers you intend to use — unused providers can be left with empty strings.
providers: {
stripe: {
secret_key: "sk_live_...",
webhook_secret: "whsec_..."
},
paypal: {
client_id: "",
client_secret: "",
webhook_id: "",
mode: "live" // "sandbox" | "live"
},
razorpay: {
key_id: "",
key_secret: "",
webhook_secret: ""
},
polar: {
access_token: "",
webhook_secret: "",
server: "production" // "sandbox" | "production"
},
crypto: {
api_key: "", // NOWPayments API key
ipn_secret: "" // NOWPayments IPN secret
}
}Creating Panels and Products
Panels are defined in the panel_linking section. Each panel can contain multiple products and is deployed to a channel via /store panel.
panel_linking: {
panel1: {
type: "SELECT_MENU", // "SELECT_MENU" or "BUTTON"
product1: {
name: "VIP Role",
description: "Grants the VIP role in the server.",
emoji: "%custom_emoji_1%",
price: 5.00,
currency: "usd",
providers: ["stripe", "paypal", "crypto"], // Multi-provider support!
max_purchases: 1,
rewards: [
{
type: "role",
role_id: "000000000000000000"
}
]
},
product2: {
name: "Single Provider Product",
price: 10.00,
provider: "stripe", // Single provider
max_purchases: 0,
rewards: [
{
type: "role",
role_id: "000000000000000000"
}
]
}
}
}Panel Options
- Type: Choose between
SELECT_MENU(dropdown) orBUTTONfor the interaction style.
Product Options
| Field | Required | Description |
|---|---|---|
name | Yes | Display name shown in Discord and on the checkout page. |
description | No | Short description shown on the checkout page (Stripe, Razorpay). |
emoji | No | Custom emoji next to the product. Use %custom_emoji_<id>% format. |
price | Yes | Price of the product (e.g. 5.00). |
currency | No | Overrides the top-level currency for this product (e.g. "usd"). |
providers | No | List of payment providers for this product (e.g. ["stripe", "paypal", "crypto"]). If multiple providers are specified, the user gets an interactive menu in Discord to choose their payment method. |
provider | No | Single payment provider (e.g. "stripe"). Used when a product only offers one payment method. |
polar_price_id | Polar only | The Polar Product Price ID from your Polar dashboard. Required when provider is "polar". |
color | No | Button color when panel type is "BUTTON". Options: blue, green, gray, red. |
max_purchases | No | How many times a user can purchase this product. Set to 0 or omit for unlimited. Role rewards are always one-time regardless of this value. |
rewards | No | A list of rewards delivered after a successful payment. |
Rewards
Each entry in rewards is an action performed automatically after a payment is confirmed.
Role Reward — Adds a Discord role to the buyer.
{
type: "role",
role_id: "000000000000000000"
}Webhook Reward — Fires an HTTP request to an external endpoint.
{
type: "webhook",
url: "https://example.com/my-hook",
method: "POST",
headers: { "Content-Type": "application/json" }
}Permissions
The /store command is an admin command throughout.
permissions: {
store_command: "admin"
}
