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

# Rabaty i vouchery

> Kody rabatowe i vouchery jednorazowe.

API rozróżnia dwa mechanizmy: **kody rabatowe** (wielokrotnego użytku, obniżają cenę) i **vouchery** (jednorazowe, wymieniane na produkt).

## Kody rabatowe

Kod rabatowy obniża cenę zamówienia procentowo lub kwotowo.

| Pole                | Opis                                               |
| ------------------- | -------------------------------------------------- |
| `scope`             | Zakres: `all`, `server`, `product`                 |
| `targets`           | ID serwerów/produktów dla zakresu innego niż `all` |
| `type`              | `percentage` lub `fixed`                           |
| `value`             | Wartość rabatu                                     |
| `expirationDate`    | Data wygaśnięcia                                   |
| `maxUsage`          | Maksymalna liczba użyć                             |
| `minOrderValue`     | Minimalna wartość zamówienia                       |
| `maxDiscountAmount` | Górny limit kwoty rabatu                           |

### Walidacja przed zakupem

Klient może sprawdzić kod publicznie:

```bash theme={null}
curl -X POST http://localhost:3000/api/v2/discounts/validate \
  -H "Content-Type: application/json" \
  -d '{ "code": "LATO10", "shopId": "<shopId>", "orderValue": 50 }'
```

Odpowiedź zawiera `valid`, `discountAmount` i `finalPrice`. Kod stosuje się też przy tworzeniu zamówienia przez pole `discountCode`.

<Tip>
  Rabat 100% obniżający kwotę do zera omija bramkę płatności i kieruje zamówienie do realizacji pluginem. Zobacz [Płatności](/pl/guides/payments).
</Tip>

## Vouchery

Voucher to jednorazowy kod, który klient wymienia na konkretny produkt — bez płatności.

### Generowanie

Pracownik z uprawnieniem `vouchers:write` tworzy pojedynczy voucher (`POST /vouchers/{shopId}`) lub generuje partię (`POST /vouchers/{shopId}/generate`).

### Realizacja

```bash theme={null}
curl -X POST http://localhost:3000/api/v2/vouchers/redeem \
  -H "Content-Type: application/json" \
  -H "cf-turnstile-response: <turnstile-token>" \
  -d '{ "code": "ABC123", "shopId": "<shopId>", "nickname": "Steve" }'
```

Nagłówek Turnstile jest wymagany w środowisku produkcyjnym. Po realizacji powstaje zamówienie gotowe do dostarczenia przez plugin, a odpowiedź zawiera ograniczone dane i `statusToken`. Voucher staje się zużyty. Wygasłe vouchery są oznaczane cyklicznie.
