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

# Cancelar suscripción

> Cancela la suscripción activa del usuario al final del período de facturación actual.

## Descripción general

Cancela la suscripción del usuario. La suscripción sigue activa hasta el final del período de facturación actual y no se renovará. Requiere autenticación por sesión (token de acceso JWT).

<Note>
  **Para integraciones de terceros:** use `POST /subscriptions/cancel/api` con autenticación por clave API.
</Note>

<Warning>
  Esta acción programa la cancelación al final del período. El usuario conserva el acceso hasta `currentPeriodEnd`. Para una cancelación inmediata, use el portal de facturación.
</Warning>

## Autenticación

<ParamField header="Authorization" type="string" required>
  Su token de acceso JWT. Formato: `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>

## Campos de respuesta

<ResponseField name="success" type="boolean">
  Indica si la cancelación se realizó correctamente.
</ResponseField>

<ResponseField name="message" type="string">
  Mensaje de estado legible.
</ResponseField>

<ResponseField name="cancellationDate" type="string">
  Marca de tiempo ISO 8601 en que finalizará la suscripción (solo si hubo éxito).
</ResponseField>

## Respuestas de error

<ResponseField name="400">
  Solicitud incorrecta: el usuario no tiene suscripción activa que cancelar, o la suscripción no puede cancelarse vía API.
</ResponseField>

<ResponseField name="401">
  No autorizado: token no válido o ausente.
</ResponseField>

## Comportamiento de la cancelación

| Escenario                                  | Comportamiento                                |
| ------------------------------------------ | --------------------------------------------- |
| Suscripción activa                         | Cancelada y marcada como tal                  |
| Ya cancelada                               | Devuelve error                                |
| Sin suscripción                            | Devuelve error                                |
| Sin identificador de suscripción en Stripe | Devuelve error (no se puede cancelar vía API) |

## Reactivación

Si el usuario desea reactivar, puede:

1. Usar el portal de facturación (`/subscriptions/portal`)
2. O crear una suscripción nueva cuando finalice la actual

## Buenas prácticas

* **Diálogo de confirmación**: confirme siempre antes de cancelar
* **Motivo**: pregunte por qué cancela para obtener comentarios
* **Retención**: valore ofrecer descuento u opción de pausa
* **Comunicación clara**: indique cuándo terminará el acceso

***

## POST /subscriptions/cancel/api

Cancela la suscripción del usuario mediante autenticación por clave API. Adecuado para integraciones de terceros.

### Autenticación

Requiere autenticación por clave API. Incluya su clave en el encabezado `Authorization`:

```
Authorization: Bearer llmgen_your_api_key_here
```

### Respuesta

Igual que `/subscriptions/cancel` arriba.

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