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

> Cancela a assinatura ativa do usuário ao fim do período de cobrança atual.

## Visão geral

Cancela a assinatura do usuário. Ela permanece ativa até o fim do período de cobrança atual e não será renovada. Exige autenticação por sessão (JWT de acesso).

<Note>
  **Para integrações de terceiros:** use `POST /subscriptions/cancel/api` com autenticação por chave de API.
</Note>

<Warning>
  O cancelamento é agendado para o fim do período. O acesso se mantém até `currentPeriodEnd`. Para cancelamento imediato, use o portal de cobrança.
</Warning>

## Autenticação

<ParamField header="Authorization" type="string" required>
  Seu JWT de acesso. 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 Sucesso theme={null}
  {
    "success": true,
    "message": "Subscription cancelled successfully",
    "cancellationDate": "2024-02-15T00:00:00Z"
  }
  ```

  ```json Sem assinatura ativa theme={null}
  {
    "message": "No active subscription to cancel"
  }
  ```
</ResponseExample>

## Campos da resposta

<ResponseField name="success" type="boolean">
  Se o cancelamento foi bem-sucedido.
</ResponseField>

<ResponseField name="message" type="string">
  Mensagem de status legível.
</ResponseField>

<ResponseField name="cancellationDate" type="string">
  Data e hora em ISO 8601 em que a assinatura terminará (apenas em caso de sucesso).
</ResponseField>

## Respostas de erro

<ResponseField name="400">
  Requisição inválida — sem assinatura ativa ou cancelamento indisponível por API.
</ResponseField>

<ResponseField name="401">
  Não autorizado — token ausente ou inválido.
</ResponseField>

## Comportamento do cancelamento

| Cenário                     | Comportamento                                    |
| --------------------------- | ------------------------------------------------ |
| Assinatura ativa            | Cancelada e marcada conforme política            |
| Já cancelada                | Retorna erro                                     |
| Sem assinatura              | Retorna erro                                     |
| Sem ID Stripe da assinatura | Retorna erro (cancelamento por API indisponível) |

## Reativação

Para reativar, o usuário pode:

1. Usar o portal de cobrança (`/subscriptions/portal`)
2. Ou contratar nova assinatura após o término da atual

## Boas práticas

* **Diálogo de confirmação:** confirme antes de cancelar
* **Motivo:** colete o motivo para feedback
* **Retenção:** considere desconto ou pausa
* **Comunicação:** mostre claramente quando o acesso termina

***

## POST /subscriptions/cancel/api

Cancela a assinatura com autenticação por chave de API. Indicado para integrações externas.

### Autenticação

```
Authorization: Bearer llmgen_your_api_key_here
```

### Resposta

Igual à de `/subscriptions/cancel`, acima.

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