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

# Résilier l’abonnement

> Planifie la résiliation de l’abonnement actif à la fin de la période de facturation en cours.

## Vue d'ensemble

Résilie l'abonnement de l'utilisateur. Celui-ci reste actif jusqu'à la fin de la période en cours, puis ne sera pas renouvelé. Nécessite une authentification par session (jeton d'accès JWT).

<Note>
  **Pour les intégrations tierces :** utilisez `POST /subscriptions/cancel/api` avec authentification par clé d'API.
</Note>

<Warning>
  Cette action planifie la résiliation en fin de période. L'accès est maintenu jusqu'à `currentPeriodEnd`. Pour une résiliation immédiate, utilisez le portail de facturation.
</Warning>

## Authentification

<ParamField header="Authorization" type="string" required>
  Jeton d'accès JWT. Format : `Bearer YOUR_ACCESS_TOKEN`
</ParamField>

<RequestExample>
  ```bash cURL theme={null}
  curl -X POST https://api.llmgenerator.com/api/v1/subscriptions/cancel \
    -H "Authorization: Bearer YOUR_ACCESS_TOKEN"
  ```

  ```javascript JavaScript theme={null}
  const response = await fetch('https://api.llmgenerator.com/api/v1/subscriptions/cancel', {
    method: 'POST',
    headers: {
      'Authorization': 'Bearer YOUR_ACCESS_TOKEN'
    }
  });

  const data = await response.json();
  if (data.success) {
    console.log('Subscription will end on:', data.cancellationDate);
  }
  ```

  ```python Python theme={null}
  import requests

  response = requests.post(
      'https://api.llmgenerator.com/api/v1/subscriptions/cancel',
      headers={'Authorization': 'Bearer YOUR_ACCESS_TOKEN'}
  )
  data = response.json()
  if data['success']:
      print(f"Subscription will end on: {data['cancellationDate']}")
  ```
</RequestExample>

<ResponseExample>
  ```json Success theme={null}
  {
    "success": true,
    "message": "Subscription cancelled successfully",
    "cancellationDate": "2024-02-15T00:00:00Z"
  }
  ```

  ```json No Active Subscription theme={null}
  {
    "message": "No active subscription to cancel"
  }
  ```
</ResponseExample>

## Champs de réponse

<ResponseField name="success" type="boolean">
  Indique si la demande de résiliation a réussi.
</ResponseField>

<ResponseField name="message" type="string">
  Message lisible décrivant le statut.
</ResponseField>

<ResponseField name="cancellationDate" type="string">
  Horodatage ISO 8601 de la fin effective de l'abonnement (en cas de succès).
</ResponseField>

## Réponses d'erreur

<ResponseField name="400">
  Requête incorrecte : pas d'abonnement actif à résilier, ou résiliation impossible via l'API.
</ResponseField>

<ResponseField name="401">
  Non autorisé : jeton manquant ou invalide.
</ResponseField>

## Comportement de la résiliation

| Scénario                 | Comportement                              |
| ------------------------ | ----------------------------------------- |
| Abonnement actif         | Résiliation planifiée et enregistrée      |
| Déjà résilié             | Erreur renvoyée                           |
| Aucun abonnement         | Erreur renvoyée                           |
| Pas d'identifiant Stripe | Erreur (résiliation impossible via l'API) |

## Réactivation

Pour réactiver un abonnement, l'utilisateur peut :

1. Utiliser le portail de facturation (`/subscriptions/portal`)
2. Souscrire à nouveau après la fin de la période en cours

## Bonnes pratiques

* **Boîte de confirmation** : demander confirmation avant résiliation
* **Collecte du motif** : recueillir la raison du départ pour améliorer le produit
* **Offre de rétention** : envisager une remise ou une pause
* **Communication claire** : indiquer précisément la date de fin d'accès

***

## POST /subscriptions/cancel/api

Planifie la résiliation avec authentification par clé d'API. Adapté aux intégrations tierces.

### Authentification

Authentification par clé d'API obligatoire. Indiquez votre clé dans l'en-tête `Authorization` :

```
Authorization: Bearer llmgen_your_api_key_here
```

### Réponse

Identique à `/subscriptions/cancel` ci-dessus.

<RequestExample>
  ```bash cURL theme={null}
  curl -X POST https://api.llmgenerator.com/api/v1/subscriptions/cancel/api \
    -H "Authorization: Bearer llmgen_your_api_key_here"
  ```

  ```javascript JavaScript theme={null}
  const response = await fetch('https://api.llmgenerator.com/api/v1/subscriptions/cancel/api', {
    method: 'POST',
    headers: {
      'Authorization': 'Bearer llmgen_your_api_key_here'
    }
  });

  const data = await response.json();
  if (data.success) {
    console.log('Subscription will end on:', data.cancellationDate);
  }
  ```

  ```python Python theme={null}
  import requests

  response = requests.post(
      'https://api.llmgenerator.com/api/v1/subscriptions/cancel/api',
      headers={'Authorization': 'Bearer llmgen_your_api_key_here'}
  )
  data = response.json()
  if data['success']:
      print(f"Subscription will end on: {data['cancellationDate']}")
  ```
</RequestExample>
