VIP Store
Monetize your DayZ server with automated VIP priority queue purchases powered by Stripe.
Note on billing. The VIP Store uses your own Stripe account to charge your players for priority queue access on your DayZ servers. This is unrelated to Citadel's own subscription billing — Citadel bills its own subscriptions ($9.99/mo Citadel + optional $9.99/mo Cloud) through Citadel's Stripe account (pre-migration customers are still on Paddle). The two are completely independent: your Stripe keys handle VIP purchases; Citadel's billing is separate.
Overview
The VIP Store lets players purchase priority queue access directly from a public store page. When a player completes a purchase, the system automatically:
- Provisions a priority queue entry with the correct role and expiration
- Syncs the entry to
priority.txtfor all connected servers - Records the transaction in purchase history
- Fires a webhook notification (Discord, HTTP, etc.)
No manual intervention required — everything is automated.
How It Works
Player visits /store
→ Selects a VIP tier
→ Enters their Steam64 ID
→ Clicks "Purchase"
→ Redirected to Stripe Checkout (hosted by Stripe)
→ Completes payment with card
→ Stripe sends webhook to your server
→ Citadel verifies payment & auto-provisions priority queue
→ Player can skip the queue immediately
Key points:
- No credit card data ever touches your server — Stripe Checkout is fully hosted by Stripe
- Webhook signature verification ensures payment authenticity
- Players can use any payment method Stripe supports (cards, Apple Pay, Google Pay, etc.)
Prerequisites
Before setting up the store, you need:
- A Stripe account — Sign up at stripe.com (free to create, Stripe takes a small fee per transaction)
- A public URL — Your Citadel panel must be accessible from the internet. See the Remote Access Guide for setup instructions.
- Priority Queue configured — The store builds on the Priority Queue system. Ensure it's working first.
Setup
Step 1 — Get Your Stripe API Keys
- Log in to Stripe Dashboard
- Go to Developers → API Keys
- Copy your Secret Key (
sk_test_...for testing,sk_live_...for production)
[!TIP] Start with test mode keys to verify everything works. Toggle "Test mode" in the Stripe Dashboard. Test mode transactions use fake cards and no real money is charged.
Step 2 — Configure Stripe in Citadel
- Go to VIP Store in the Citadel sidebar
- Open the Stripe Configuration panel
- Paste your Stripe Secret Key
- Set your Store Name (shown to players on the checkout page)
- Set your Default Currency (USD, EUR, GBP, etc.)
- Don't enable the store yet — set up the webhook first
Step 3 — Create the Stripe Webhook
Stripe needs to notify Citadel when a payment completes. This requires a webhook endpoint.
- Go to Stripe Dashboard → Webhooks
- Click Add endpoint
- Set the Endpoint URL to:
Replacehttps://yourdomain.com/api/store/webhookyourdomain.comwith your actual public domain. - Under Listen to → Events on your account
- Click Select events and check:
checkout.session.completed
- Click Add endpoint
- On the endpoint details page, click Reveal under Signing secret
- Copy the
whsec_...value - Back in Citadel, paste it as the Webhook Secret
- Click Save Config
Step 4 — Create Products
-
In the VIP Store page, click Add Product
-
Fill in the product details:
- Product Name — e.g., "VIP - 30 Days"
- Description — e.g., "Skip the queue for 30 days"
- Role — VIP, Supporter, or Premium (this maps to the priority queue role)
- Price — Minimum $0.50 (Stripe requirement)
- Currency — Defaults to the store's default currency
- Duration — 30 Days, 90 Days, 1 Year, Permanent, or Custom
-
Create as many tiers as you want. Players will see all active products on the store page.
[!TIP] Common DayZ server VIP pricing:
- VIP 30 Days — $5-10
- VIP 90 Days — $12-20
- VIP Lifetime — $25-50
- Premium Lifetime — $50-100
Step 5 — Enable the Store
- Check the Enable Store checkbox in Stripe Configuration
- Click Save Config
- The status badge should change to Live
- Click Copy Store Link or Preview to verify the public store page
Step 6 — Share With Players
Share the store URL with your players:
https://yourdomain.com/store
You can embed this in:
- Your Discord server (use the Discord bot's announcement feature)
- Your server's MOTD/loading screen
- Your community website
Testing
Test Mode (Recommended First)
- Use your test mode Stripe keys (
sk_test_...) - Create a test product
- Visit
/store, enter any valid Steam64 ID - Use Stripe's test card:
4242 4242 4242 4242- Expiry: Any future date (e.g.,
12/34) - CVC: Any 3 digits (e.g.,
123)
- Expiry: Any future date (e.g.,
- Complete the checkout
- Verify:
- The purchase appears in the Purchases tab
- A priority queue entry was created in Priority Queue
- A notification appeared in the Notification Center
- Your webhook was fired (check Discord or your webhook endpoint)
Local Testing (Without Public URL)
If you haven't set up remote access yet, use the Stripe CLI to forward webhooks locally:
# Install
winget install Stripe.StripeCLI
# Login
stripe login
# Forward webhooks
stripe listen --forward-to localhost:3001/api/store/webhook --events checkout.session.completed
Use the whsec_... from the CLI output as your Webhook Secret.
Going Live
When ready for real transactions:
- Switch to live mode in Stripe Dashboard
- Update your Stripe Secret Key to the live key (
sk_live_...) - Create a new webhook endpoint with your production URL
- Update the Webhook Secret to the live signing secret
- Save and verify with a small real purchase
Managing the Store
Products
- Toggle Active/Inactive — Temporarily hide products without deleting them
- Edit — Change name, price, duration, etc. (doesn't affect existing purchases)
- Delete — Permanently remove a product (existing purchases are unaffected)
Purchases
The Purchases tab shows a read-only history of all completed transactions:
- Player name and Steam64 ID
- Product purchased
- Amount paid
- Transaction date and status
Priority Queue Integration
Each purchase automatically creates a priority queue entry:
- Role matches the product's role (VIP, Supporter, Premium)
- Expiration is calculated from the product's duration
- Source is marked as
purchaseto distinguish from manually-added entries - Entries appear in the Priority Queue page and are synced to
priority.txt
Expired entries are automatically cleaned up by the priority queue's expiration system (runs every 60 seconds).
Stripe Fees
Stripe charges per successful transaction (no monthly fees):
- US: 2.9% + $0.30
- EU: 1.5% + €0.25
- UK: 1.5% + £0.20
For example, a $5.00 VIP purchase costs you ~$0.45 in Stripe fees, netting $4.55.
See stripe.com/pricing for current rates in your country.
Troubleshooting
Store shows "Store Not Available"
The store is either disabled or Stripe isn't configured:
- Check VIP Store → Stripe Configuration — is the Secret Key saved?
- Is Enable Store checked?
- Save the config and try again
Purchase completes but no priority queue entry
The webhook isn't reaching Citadel:
- Check Stripe Dashboard → Webhooks for delivery failures
- Verify the endpoint URL matches your public domain
- Verify the webhook secret in Citadel matches Stripe
- Check the Citadel backend logs for errors
"Stripe SDK is not installed"
Run in the backend directory:
cd backend
npm install stripe
Player's Steam64 ID rejected
Steam64 IDs must be exactly 17 digits starting with 7656119. Players can find theirs at steamid.io.