> ## 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.

# Recovery

> De nyttolaster som skickas till din webbhook-endpoint när händelser för övergiven varukorgsåterställning eller abonnemangsförnyelse inträffar.

## Övergivna varukorgsåterställningshändelser

Följande webhook-händelser spårar livscykeln för övergiven varukorgsåterställning:

| Händelse                       | Beskrivning                                                                                                                                                        |
| ------------------------------ | ------------------------------------------------------------------------------------------------------------------------------------------------------------------ |
| `abandoned_checkout.detected`  | En övergiven utcheckning har upptäckts. Skickas när en betalning identifieras som övergiven (misslyckad eller ofullständig) och återställningsarbetsflödet börjar. |
| `abandoned_checkout.recovered` | Kunden slutförde betalningen via återställningslänken. Fältet `recovered_payment_id` innehåller det lyckade betalnings-ID:t.                                       |

### Fält för övergiven utcheckningsnyttolast

<ParamField body="payment_id" type="string" required>
  Den ursprungliga betalningen som övergavs. Använd denna för att leta upp produkt-, belopps- och valutainformation.
</ParamField>

<ParamField body="customer_id" type="string" required>
  Kunden som övergav utcheckningen.
</ParamField>

<ParamField body="abandonment_reason" type="string" required>
  Varför utcheckningen övergavs. En av:

  * `payment_failed` — Kunden försökte att betala men det misslyckades
  * `checkout_incomplete` — Kunden besökte utcheckningen men försökte aldrig att betala
</ParamField>

<ParamField body="status" type="string" required>
  Nuvarande livscykeltillstånd för detta återställningsförsök. En av:

  * `abandoned` — Upptäckt, inga mejl skickade ännu
  * `recovering` — Minst ett återställningsmejl skickat
  * `recovered` — Kunden slutförde betalningen
  * `exhausted` — Alla mejl skickade eller nyare utcheckning hittad
  * `opted_out` — Kunden avprenumererade
</ParamField>

<ParamField body="abandoned_at" type="string" required>
  ISO 8601-tidsstämpel för när utcheckningen upptäcktes som övergiven.
</ParamField>

<ParamField body="recovered_payment_id" type="string | null">
  Betalnings-ID för den lyckade återställningsbetalningen. `null` tills utcheckningen återställs.
</ParamField>

### Exempel: Hantering av ACR-webhooks

```javascript theme={null}
app.post('/webhooks/dodo', async (req, res) => {
  const event = req.body;

  switch (event.type) {
    case 'abandoned_checkout.detected':
      console.log(`Checkout abandoned: ${event.data.payment_id}`);
      console.log(`Reason: ${event.data.abandonment_reason}`);
      // Track abandonment in your analytics
      await trackAbandonment(event.data);
      break;

    case 'abandoned_checkout.recovered':
      console.log(`Checkout recovered: ${event.data.payment_id}`);
      console.log(`Recovery payment: ${event.data.recovered_payment_id}`);
      // Grant access, update records
      await handleRecovery(event.data);
      break;
  }

  res.json({ received: true });
});
```

***

## Förnyelsehändelser

Följande webhook-händelser spårar livscykeln för abonnemangsförnyelse:

| Händelse            | Beskrivning                                                                                                                                   |
| ------------------- | --------------------------------------------------------------------------------------------------------------------------------------------- |
| `dunning.started`   | Ett försök till förnyelse har skapats för ett abonnemang som har gått in i `on_hold` eller avbrutits av kunden.                               |
| `dunning.recovered` | Kunden uppdaterade sin betalningsmetod och den resulterande betalningen lyckades. Fältet `payment_id` innehåller det lyckade betalnings-ID:t. |

### Fält för nyttolast om förnyelseförsök

<ParamField body="subscription_id" type="string" required>
  Abonnemanget som utlöste förnyelseförsöket.
</ParamField>

<ParamField body="customer_id" type="string" required>
  Kunden som äger abonnemanget.
</ParamField>

<ParamField body="trigger_state" type="string" required>
  Abonnemangstillståndet som utlöste förnyelse. En av:

  * `on_hold` — Abonnemanget pausades på grund av betalningsfel
  * `cancelled` — Kunden avbröt från kundportalen
</ParamField>

<ParamField body="status" type="string" required>
  Nuvarande livscykeltillstånd för detta förnyelseförsök. En av:

  * `recovering` — Förnyelsemejl skickas
  * `recovered` — Kunden uppdaterade betalningsmetod och betalningen lyckades
  * `exhausted` — Alla mejl skickade eller abonnemangstillstånd ändrat
</ParamField>

<ParamField body="created_at" type="string" required>
  ISO 8601-tidsstämpel för när förnyelseförsöket skapades.
</ParamField>

<ParamField body="payment_id" type="string | null">
  Betalnings-ID för den lyckade återställningsbetalningen. `null` under återställning.
</ParamField>

### Exempel: Hantering av förnyelse-webhooks

```javascript theme={null}
app.post('/webhooks/dodo', async (req, res) => {
  const event = req.body;

  switch (event.type) {
    case 'dunning.started':
      console.log(`Dunning started for subscription: ${event.data.subscription_id}`);
      console.log(`Trigger: ${event.data.trigger_state}`);
      // Track dunning in your system
      await trackDunning(event.data);
      break;

    case 'dunning.recovered':
      console.log(`Subscription recovered: ${event.data.subscription_id}`);
      console.log(`Recovery payment: ${event.data.payment_id}`);
      // Reactivate access, update records
      await handleDunningRecovery(event.data);
      break;
  }

  res.json({ received: true });
});
```

<Tip>
  Prenumerera på både `dunning.started` och `dunning.recovered` för att spåra hela förnyelselivscykeln. Använd `dunning.started` för att pausa fristperioder eller markera abonnemang som är riskerade i ditt system.
</Tip>

<CardGroup cols={2}>
  <Card title="Abandoned Cart Recovery" icon="cart-shopping" href="/features/recovery/abandoned-cart-recovery">
    Konfigurera ACR e-postsekvenser och rabattincitament.
  </Card>

  <Card title="Subscription Dunning" icon="rotate" href="/features/recovery/subscription-dunning">
    Konfigurera förnyelse-e-postsekvenser för förfallna abonnemang.
  </Card>

  <Card title="Subscription Webhooks" icon="repeat" href="/developer-resources/webhooks/intents/subscription">
    Relaterade abonnemangslivscykelhändelser som `subscription.on_hold` och `subscription.cancelled`.
  </Card>
</CardGroup>

## Schema för webhook-nyttolast
