Docs

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) or BUTTON for the interaction style.

Product Options

FieldRequiredDescription
nameYesDisplay name shown in Discord and on the checkout page.
descriptionNoShort description shown on the checkout page (Stripe, Razorpay).
emojiNoCustom emoji next to the product. Use %custom_emoji_<id>% format.
priceYesPrice of the product (e.g. 5.00).
currencyNoOverrides the top-level currency for this product (e.g. "usd").
providersNoList 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.
providerNoSingle payment provider (e.g. "stripe"). Used when a product only offers one payment method.
polar_price_idPolar onlyThe Polar Product Price ID from your Polar dashboard. Required when provider is "polar".
colorNoButton color when panel type is "BUTTON". Options: blue, green, gray, red.
max_purchasesNoHow 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.
rewardsNoA 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"
}

On this page