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

# Discounts

> Skapa kampanjkoder för att öka konverteringar, genomföra kampanjer och belöna kunder med procentuella rabatter på engångs- och prenumerationsköp.

<Frame>
  <img src="https://mintcdn.com/dodopayments/mOQO5ej_lx0yH9p-/images/discount-codes/discount-code-cover.png?fit=max&auto=format&n=mOQO5ej_lx0yH9p-&q=85&s=57f1a644801ddc5efc506b50541eaaba" alt="Översikt av rabattkoder omslagsbild" style={{ maxHeight: '500px', width: 'auto' }} width="1200" height="630" data-path="images/discount-codes/discount-code-cover.png" />
</Frame>

Rabattkoder gör att du kan köra målinriktade kampanjer och incitament. Skapa procentbaserade rabatter, sätt gränser och utgångsdatum, begränsa till produkter och tillämpa dem smidigt vid kassan.

<CardGroup cols={2}>
  <Card title="Checkout Sessions" icon="cart-shopping" href="/developer-resources/checkout-session">
    Tillämpa en eller flera staplade koder under värdkassan med `discount_codes` och UI-kontroller.
  </Card>

  <Card title="Validate Discount" icon="code" href="/api-reference/discounts/validate-discount">
    Check if a discount is valid by its ID.
  </Card>

  <Card title="Get Discount by Code" icon="tag" href="/api-reference/discounts/get-discount-by-code">
    Look up and validate a discount using its code name (e.g., "SAVE20").
  </Card>

  <Card title="Create Discount (API)" icon="code" href="/api-reference/discounts/create-discount">
    Programmatically create new discount codes.
  </Card>

  <Card title="List & Update Discounts" icon="code" href="/api-reference/discounts/list-discounts">
    Bläddra och hantera befintliga rabatter; uppdatera eller ta bort vid behov.
  </Card>

  <Card title="Plan Change Discounts" icon="arrows-rotate" href="/api-reference/subscriptions/change-plan">
    Tillämpa rabattkoder vid uppgradering eller nedgradering av prenumerationsplaner.
  </Card>
</CardGroup>

## Vad är Rabattkoder?

Rabattkoder är kampanjtoken som minskar ordersummorna i kassan. De är idealiska för:

* **Säsongskampanjer**: Black Friday, produktlanseringar eller jubileer
* **Förvärvserbjudanden**: Första-köp incitament eller belöningar vid hänvisningar
* **Behållande**: Återvinnings- eller lojalitetsbelöningar för befintliga kunder
* **B2B-erbjudanden**: Avtalade eller förhandlade priser via privata koder

## Viktiga Fördelar

* **Flexibla rabatter**: Procentbaserade rabatter
* **Staplingsbara koder**: Tillämpa upp till 20 koder per kassatransaktion, betalning eller prenumeration — kombinera kampanjer (t.ex. `WELCOME10` + `BLACKFRIDAY20`) utan att skapa specialkoder
* **Riktad kontroll**: Begränsa efter produkt och prenumerationscykler
* **Kampanjstyrning**: Utgångsdatum och användningsbegränsningar
* **Sömlös kassa**: UI-fält och API-stöd via kassasessioner

## Skapa Rabattkoder

Skapa rabattkoder i din Dodo Payments-instrumentpanel och tillämpa dem sedan i värdad kassa eller via API.

### Inställning av Instrumentpanelen

* **Rabattnamn** (obligatoriskt): Intern och instrumentpanelsvisningsnamn
* **Kod** (obligatoriskt): Strängen som kunder anger vid kassan
* **Typ & Belopp** (obligatoriskt): Ange ett procentvärde (endast procentbaserade rabatter stöds för närvarande), eller generera en slumpmässig kod med den angivna knappen
* **Utgångsdatum** (valfritt): Datum efter vilket koden blir ogiltig
* **Användningsbegränsning** (valfritt): Maximal antal inlösningar för alla kunder
* **Produktbegränsning** (valfritt): Begränsa användbarheten till utvalda produkter
* **Prenumerationscykelbegränsning** (valfritt): Antal faktureringscykler som rabatten gäller för
* **Metadata** (valfritt): Bifoga anpassade nyckel–värdepar för intern spårning eller integrationer

<Tip>
  Använd cykelbegränsningar för introduktionsprissättning på prenumerationer (t.ex., "50% rabatt i 3 månader").
</Tip>

## Kassaupplevelse

1. Kunder anger koden i fältet i kassan.
2. Berättigade rabatter tillämpas och totalen uppdateras omedelbart.

<Info>
  I Checkout Sessions, skicka `discount_codes` (en array) för att föranvända en eller flera koder och ställ in `feature_flags.allow_discount_code` för att visa inmatningsfältet. Koderna tillämpas i array-ordning, med ett maximum på 20.
</Info>

## Stapla Rabattkoder

Kassasessioner, betalningar och prenumerationer accepterar upp till **20 staplade koder** via `discount_codes` arrayen (max 20 poster). Koderna tillämpas **i array-ordning**, så den första giltiga koden reducerar baspriset först, nästa kod reducerar det redan rabatterade priset, osv. Hela uppsättningen tillämpade rabatter returneras i svaret under `discount_ids` (på betalningar/prenumerationer) och `discounts` (rikare per-rabattdetalj, inklusive position och återstående prenumerationscykler).

```typescript theme={null}
const session = await client.checkoutSessions.create({
  product_cart: [{ product_id: 'prod_abc', quantity: 1 }],
  discount_codes: ['WELCOME10', 'BLACKFRIDAY20'], // applied in this order
  customer: { email: 'user@example.com' },
  return_url: 'https://yoursite.com/return'
});
```

<Info>
  Det unika `discount_code` fältet är **föråldrat** men fortfarande fullt stödd för bakåtkompatibilitet — befintliga integrationer fortsätter att fungera utan ändringar. Det kan inte kombineras med `discount_codes` i samma begäran. Vi rekommenderar att migrera till `discount_codes` (arrayformen) när det passar, även för enskilda koder, för att dra nytta av stapling och den rikare svarformen.
</Info>

## API-hantering

<AccordionGroup>
  <Accordion title="Create discounts">
    Skapa rabattkoder programmatisk med typ och mängd.

    <Card title="API Reference" icon="code" href="/api-reference/discounts/create-discount">
      Visa skapa rabatt-API.
    </Card>
  </Accordion>

  <Accordion title="List and retrieve">
    Lista alla rabatter eller hämta detaljer för hantering och revision.

    <Card title="API Reference" icon="code" href="/api-reference/discounts/list-discounts">
      Bläddra bland listning och hämtning API:er.
    </Card>
  </Accordion>

  <Accordion title="Get discount by code">
    Slå upp en rabatt med sin lättläsliga kod (t.ex., "SAVE20") istället för det interna ID:t.

    <Card title="API Reference" icon="code" href="/api-reference/discounts/get-discount-by-code">
      Hämta rabatt efter kodnamn.
    </Card>
  </Accordion>

  <Accordion title="Update discounts">
    Ändra rabattkonfiguration som belopp, utgångsdatum eller begränsningar.

    <Card title="API Reference" icon="code" href="/api-reference/discounts/update-discount">
      Lär dig hur man uppdaterar rabattdetaljer.
    </Card>
  </Accordion>

  <Accordion title="Validate discounts">
    Kontrollera om en rabatt är giltig och tillämplig innan den används.

    <Card title="API Reference" icon="code" href="/api-reference/discounts/validate-discount">
      Validera rabattanvändning.
    </Card>
  </Accordion>

  <Accordion title="Delete discounts">
    Avaktivera eller ta bort rabatter som inte längre behövs.

    <Card title="API Reference" icon="code" href="/api-reference/discounts/delete-discount">
      Radera en rabatt.
    </Card>
  </Accordion>
</AccordionGroup>

## Vanliga Användningsfall

* **Introerbjudanden**: Lanseringserbjudanden för nya produkter under begränsad tid
* **Bulk eller B2B**: Avtalsrabatter för utvalda produktuppsättningar
* **Retentionsstrategier**: Återvinningskoder i churnförebyggande arbetsflöden
* **Säsongskampanjer**: Semester- eller händelsebaserade kampanjer

## Integrations Exempel

### Skapa en rabatt med metadata

Bifoga skräddarsydda nyckel-värde-par för intern spårning.

```typescript theme={null}
const discount = await client.discounts.create({
  type: 'percentage',
  amount: 1500, // 15%
  code: 'SUMMER2025',
  metadata: {
    campaign: 'summer_promo',
    source: 'email_blast'
  }
});
```

<Tip>
  Använd metadata för att tagga rabatter efter kampanj, källa eller interna referens-ID så att du kan sammanställa användning och mäta ROI senare.
</Tip>

### Tillämpa rabatter i Checkout Sessions

Föranvänd en eller flera staplade rabatter och visa kodinmatningsgränssnittet.

```typescript theme={null}
const session = await client.checkoutSessions.create({
  product_cart: [
    { product_id: 'prod_abc', quantity: 1 }
  ],
  discount_codes: ['BLACKFRIDAY2024', 'NEWUSER5'], // stacked in array order
  customer: { email: 'user@example.com', name: 'Jane Doe' },
  return_url: 'https://yoursite.com/return'
});
```

### Tillämpa rabatter vid planändringar

Erbjuda kampanjprissättning när kunder uppgraderar eller nedgraderar sin prenumeration.

```typescript theme={null}
await client.subscriptions.changePlan('sub_123', {
  product_id: 'prod_pro',
  quantity: 1,
  proration_billing_mode: 'prorated_immediately',
  discount_codes: ['UPGRADE20']
});
```

| `discount_codes` värde                    | Beteende vid planändring                                                                                  |
| ----------------------------------------- | --------------------------------------------------------------------------------------------------------- |
| `undefined` / `null` (ej tillhandahållen) | Befintliga rabatter med `preserve_on_plan_change=true` bevaras om de är tillämpliga på den nya produkten. |
| `[]` (tom array)                          | **Alla** befintliga rabatter tas bort från prenumerationen.                                               |
| `['CODE_A', 'CODE_B', ...]`               | Ersätter eventuella befintliga rabatter med denna staplade uppsättning, tillämpad i array-ordning.        |

<Info>
  Läs alla tillämpade rabatter från prenumerationen via den nya `discounts` arrayen i prenumerationssvaret. Varje post inkluderar `discount_id`, `position`, `cycles_remaining` (för prenumerationer), och den ursprungliga koden.
</Info>

### Aktivera kodinmatning utan föranvändning

Låt kunder ange en kod vid kassan utan att en skickas i förväg.

```typescript theme={null}
const session = await client.checkoutSessions.create({
  product_cart: [
    { product_id: 'prod_abc', quantity: 1 }
  ],
  feature_flags: {
    allow_discount_code: true
  },
  return_url: 'https://yoursite.com/return'
});
```

## Bästa Praxis

* **Namnsätt tydligt**: Använd igenkännbara koder som matchar kampanjnamn
* **Begränsa tid**: Lägg till utgångsdatum för att skapa brådska och förhindra missbruk
* **Fokusera rätt**: Begränsa till specifika produkter för att undvika marginalförlust
* **Validera tidigt**: Kontrollera kodens tillämplighet innan kassan bekräftas
* **Övervaka påverkan**: Spåra användning och konvertering per kampanj

<Info>
  Rabattkoder är kraftfulla verktyg för förvärv och retention. Börja med enkla, välbetitlade erbjudanden, validera noggrant och iterera baserat på prestanda.
</Info>
