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

# Cancelar Assinatura

> Cancele assinaturas recorrentes ativas

Permite cancelar uma assinatura ativa. O cancelamento será agendado para a data da próxima cobrança, garantindo que o cliente tenha acesso até o fim do período pago.

<Note>
  **Importante:** O cancelamento não é imediato. A assinatura será cancelada na
  data da próxima cobrança (`next_charge_at`), permitindo que o cliente
  aproveite o período já pago.
</Note>

## Parâmetros da Requisição

<ParamField body="subscription_id" type="string" required>
  UUID da assinatura a ser cancelada **Formato:** UUID válido **Exemplo:**
  `"550e8400-e29b-41d4-a716-446655440000"`
</ParamField>

<ParamField body="cancelation_requested_at" type="string" required>
  Data/hora em que o cancelamento foi solicitado **Formato:** ISO 8601
  **Exemplo:** `"2024-01-15T14:30:00Z"`
</ParamField>

<ParamField body="canceled_reason" type="string" required>
  Motivo do cancelamento (mínimo 3 caracteres) **Exemplos:** `"Cliente solicitou"`,
  `"Mudança de plano"`, `"Insatisfação com o serviço"`
</ParamField>

## Exemplos de Requisição

<CodeGroup>
  ```bash cURL - Cancelamento Simples theme={null}
  curl -X POST https://pay.autorizou.dev/api/v1/subscriptions/cancel \
    -H "Authorization: Bearer 4eC39HqLyjWDarjtT1zdp7dc" \
    -H "Content-Type: application/json" \
    -d '{
      "subscription_id": "550e8400-e29b-41d4-a716-446655440000",
      "cancelation_requested_at": "2024-01-15T14:30:00Z",
      "canceled_reason": "Cliente solicitou cancelamento"
    }'
  ```

  ```bash cURL - Mudança de Plano theme={null}
  curl -X POST https://pay.autorizou.dev/api/v1/subscriptions/cancel \
    -H "Authorization: Bearer 4eC39HqLyjWDarjtT1zdp7dc" \
    -H "Content-Type: application/json" \
    -d '{
      "subscription_id": "660f9511-f30c-52e5-b827-557766551111",
      "cancelation_requested_at": "2024-01-15T10:00:00Z",
      "canceled_reason": "Mudança de plano"
    }'
  ```

  ```javascript JavaScript theme={null}
  const response = await fetch(
    "https://pay.autorizou.dev/api/v1/subscriptions/cancel",
    {
      method: "POST",
      headers: {
        Authorization: "Bearer 4eC39HqLyjWDarjtT1zdp7dc",
        "Content-Type": "application/json",
      },
      body: JSON.stringify({
        subscription_id: "550e8400-e29b-41d4-a716-446655440000",
        cancelation_requested_at: new Date().toISOString(),
        canceled_reason: "Cliente solicitou",
      }),
    }
  )

  const result = await response.json()
  console.log(result.message)
  ```

  ```php PHP theme={null}
  <?php

  $data = [
      'subscription_id' => '550e8400-e29b-41d4-a716-446655440000',
      'cancelation_requested_at' => date('c'), // ISO 8601
      'canceled_reason' => 'Cliente não renovou',
  ];

  $curl = curl_init();
  curl_setopt_array($curl, [
      CURLOPT_URL => 'https://pay.autorizou.dev/api/v1/subscriptions/cancel',
      CURLOPT_RETURNTRANSFER => true,
      CURLOPT_POST => true,
      CURLOPT_HTTPHEADER => [
          'Authorization: Bearer 4eC39HqLyjWDarjtT1zdp7dc',
          'Content-Type: application/json'
      ],
      CURLOPT_POSTFIELDS => json_encode($data)
  ]);

  $response = curl_exec($curl);
  $result = json_decode($response, true);
  curl_close($curl);

  echo $result['message'];
  ?>
  ```

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

  url = 'https://pay.autorizou.dev/api/v1/subscriptions/cancel'
  headers = {
      'Authorization': 'Bearer 4eC39HqLyjWDarjtT1zdp7dc',
      'Content-Type': 'application/json'
  }
  data = {
      'subscription_id': '550e8400-e29b-41d4-a716-446655440000',
      'cancelation_requested_at': datetime.now().isoformat(),
      'canceled_reason': 'Cliente solicitou',
  }

  response = requests.post(url, json=data, headers=headers)
  result = response.json()
  print(result['message'])
  ```
</CodeGroup>

## Resposta

<ResponseField name="message" type="string">
  Mensagem de sucesso ou erro do cancelamento
</ResponseField>

### Exemplos de Resposta

```json 200 OK - Sucesso theme={null}
{
  "message": "Assinatura cancelada com sucesso"
}
```

```json 500 Internal Server Error - Erro theme={null}
{
  "message": "Erro ao cancelar assinatura"
}
```

## Códigos de Status

<ResponseExample>
  ```json 422 - Validation Error theme={null}
  {
    "message": "Os dados fornecidos são inválidos",
    "errors": {
      "subscription_id": ["A assinatura não existe"],
      "cancelation_requested_at": [
        "O campo cancelation_requested_at é obrigatório"
      ],
      "canceled_reason": ["O motivo do cancelamento é obrigatório."]
    }
  }
  ```

  ```json 404 - Not Found theme={null}
  {
    "message": "Assinatura não encontrada"
  }
  ```

  ```json 401 - Unauthorized theme={null}
  {
    "message": "Unauthenticated."
  }
  ```
</ResponseExample>

## Fluxo de Cancelamento

### O que acontece ao cancelar?

1. **Status atualizado** para `cancelation_requested`
2. **Data de cancelamento definida** para `next_charge_at` (próxima cobrança)
3. **Cliente mantém acesso** até a data de cancelamento
4. **Cobranças futuras** são automaticamente canceladas
5. **Webhook enviado** informando o cancelamento

### Timeline do Cancelamento

```
Hoje (15/01)          Próxima Cobrança (10/02)
    │                           │
    │  Solicitação              │  Cancelamento
    │  de Cancelamento          │  Efetivo
    ▼                           ▼
    ●───────────────────────────●
         Cliente tem acesso
```

## Próximos Passos

Após cancelar uma assinatura:

1. Envie email de confirmação ao cliente
2. Configure webhook para o evento `subscription.inactivated`
3. Revogue acessos na data de `canceled_at`
4. Considere pesquisa de satisfação para entender motivo
