# Products

All products live in `shared/config.lua` under `Shop.Products`. Each product type has its own schema. The `id` of a product **must be unique** across all categories — it is used for cart, stock, promos, gifts, and spotlight references.

### Vehicle

```lua
{
  id = "rebla",
  name = "Rebla GTS",
  price = 4500,
  type = "car",            -- "car" | "bike" | "boat" | "plane" | "heli"
  brand = "Pfister",
  img = "https://docs.fivem.net/vehicles/rebla.webp",
  previewImg = "images/preview/rebla.mp4", -- optional video / image preview
  special = false           -- optional badge highlight
}
```

### Weapon

```lua
{
  id = "WEAPON_AK4K",
  name = "AK-4K",
  price = 1500,
  wtype = "ar",             -- "ar" | "smg" | "sniper" | "shotgun" | "pistol" | "melee"
  rarity = "common",        -- "common" | "rare" | "epic" | "legendary"
  img = "...",
  stats = {
    dmg = 30, rate = 80, acc = 65, recoil = 40
  }
}
```

Stats are displayed on cards if `WeaponStatsOnCards = true` in config.

### Skin (weapon skin)

```lua
{
  id = "SKIN_WEAPON_NEVA",
  name = "Neva Glowing In Night",
  price = 450,
  weaponFor = "WEAPON_NEVA",
  rarity = "epic",
  img = "...",
  variants = { "black", "red" } -- optional color variants
}
```

### Pack

A pack bundles multiple items at a discount. Items are referenced by `id`.

```lua
{
  id = "pack_explorer",
  name = "Explorer Pack",
  price = 7800,
  save = 18, -- shown as "-18%" badge
  img = "images/pack.png",
  contents = {
    { kind = "vehicle", ref = "rebla" },
    { kind = "weapon",  ref = "WEAPON_AK4K" },
    { kind = "skin",    ref = "SKIN_WEAPON_NEVA" }
  }
}
```

When delivered, the pack is unpacked recursively and each child item runs through its own delivery handler.

### Subscription

```lua
{
  id = "sub_monthly",
  name = "Monthly Subscription",
  price = 2500,
  billing = "monthly",      -- "monthly" | "permanent"
  durationDays = 30,        -- ignored when billing = "permanent"
  description = "Temporary premium benefits and monthly bonuses.",
  perks = {
    "Queue priority in-game",
    "10% bonus on Coin purchases",
  },
  badge = "Monthly",
  accent = "#3fd4b3",
  image = "/images/var.webp"
}
```

### Vehicle upgrades

Optional upgrades shown on vehicle cards (full performance, custom plate, etc.):

```lua
VehicleOptions = {
  Upgrades = {
    perf  = { Enabled = true, Price = 350 },
    plate = { Enabled = true, Price = 150 },
  }
}
```

The upgrade price is added on top of the base vehicle price at checkout.

### Categories visibility

Hide a whole category from the menu:

```lua
Categories = {
  Home = true,
  Ranks = true,
  Vehicles = true,
  Weapons = true,
  Cosmetics = true,
  Subscriptions = true,
  Packs = true,
  Account = true,
  Gifts = true
}
```

### Loyalty tiers

Players are ranked by total Coins spent. Define your tiers:

```lua
Loyalty = {
  DefaultTier = "Rookie",
  Tiers = {
    { name = "Rookie",  threshold = 0,     privileges = { "..." } },
    { name = "Bronze",  threshold = 1000,  privileges = { "..." } },
    { name = "Silver",  threshold = 2500,  privileges = { "..." } },
    { name = "Gold",    threshold = 6000,  privileges = { "..." } },
    { name = "Diamond", threshold = 12000, privileges = { "..." } },
    { name = "Mythic",  threshold = 20000, privileges = { "..." } },
  }
}
```


---

# Agent Instructions: Querying This Documentation

If you need additional information that is not directly available in this page, you can query the documentation dynamically by asking a question.

Perform an HTTP GET request on the current page URL with the `ask` query parameter:

```
GET https://doc.var-fivem.com/coins-shop/configuration/products.md?ask=<question>
```

The question should be specific, self-contained, and written in natural language.
The response will contain a direct answer to the question and relevant excerpts and sources from the documentation.

Use this mechanism when the answer is not explicitly present in the current page, you need clarification or additional context, or you want to retrieve related documentation sections.
