> ## Documentation Index
> Fetch the complete documentation index at: https://docs.shopi.lk/llms.txt
> Use this file to discover all available pages before exploring further.

# Discounts

> Fetch active discounts to display on your storefront

## `shop.getDiscounts()`

Returns currently active discounts — both shop-wide and product-specific. Use these to display sale badges, banners, and strikethrough prices.

```typescript theme={null}
const { shop_wide, product_specific } = await shop.getDiscounts();
```

### Response

```typescript theme={null}
{
  shop_wide: Discount[];
  product_specific: Discount[];
}
```

### Discount type

```typescript theme={null}
{
  id: string;
  name: string;
  discount_percentage: number;
  applies_to: string;
  product_id: string | null;
  start_date: string;
  end_date: string;
}
```

Only discounts where `start_date <= now <= end_date` are returned.

### Example — Sale banner

```typescript theme={null}
const { shop_wide } = await shop.getDiscounts();

if (shop_wide.length > 0) {
  const topDeal = shop_wide[0];
  saleBanner.textContent = `${topDeal.name} — ${topDeal.discount_percentage}% off everything!`;
  saleBanner.style.display = 'block';
}
```

### Example — Product sale badge

```typescript theme={null}
const { product_specific } = await shop.getDiscounts();

// Build a map of product_id → discount
const discountMap = new Map(
  product_specific.map(d => [d.product_id, d])
);

// Apply to product cards
products.forEach(product => {
  const discount = discountMap.get(product.id);
  if (discount) {
    const badge = document.createElement('span');
    badge.className = 'sale-badge';
    badge.textContent = `${discount.discount_percentage}% OFF`;
    productCard.appendChild(badge);
  }
});
```
