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

# Assinatura atual

> Retorna o status e os detalhes da assinatura do usuário autenticado.

## Visão geral

Retorna dados da assinatura atual do usuário (plano, ciclo de cobrança, renovações). Exige JWT de sessão.

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

## 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 GET https://api.llmgenerator.com/api/v1/subscriptions/current \
    -H "Authorization: Bearer YOUR_ACCESS_TOKEN"
  ```

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

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

  response = requests.get(
      'https://api.llmgenerator.com/api/v1/subscriptions/current',
      headers={'Authorization': 'Bearer YOUR_ACCESS_TOKEN'}
  )
  data = response.json()
  ```
</RequestExample>

<ResponseExample>
  ```json Assinatura ativa theme={null}
  {
    "hasSubscription": true,
    "subscription": {
      "plan": "professional",
      "status": "active",
      "billingCycle": "monthly",
      "currentPeriodStart": "2024-01-15T00:00:00Z",
      "currentPeriodEnd": "2024-02-15T00:00:00Z",
      "cancelAtPeriodEnd": false
    },
    "planDetails": {
      "id": "professional",
      "name": "Professional",
      "monthlyCredits": 3000,
      "price": 12.99,
      "features": [
        "3,000 credits/month",
        "Priority support",
        "Advanced analytics"
      ]
    }
  }
  ```

  ```json Sem assinatura theme={null}
  {
    "hasSubscription": false,
    "subscription": null,
    "planDetails": null
  }
  ```

  ```json Cancelada (ainda ativa) theme={null}
  {
    "hasSubscription": true,
    "subscription": {
      "plan": "professional",
      "status": "active",
      "billingCycle": "monthly",
      "currentPeriodStart": "2024-01-15T00:00:00Z",
      "currentPeriodEnd": "2024-02-15T00:00:00Z",
      "cancelAtPeriodEnd": true
    },
    "planDetails": {
      "id": "professional",
      "name": "Professional",
      "monthlyCredits": 3000,
      "price": 12.99,
      "features": [...]
    }
  }
  ```
</ResponseExample>

## Campos da resposta

<ResponseField name="hasSubscription" type="boolean">
  Se o usuário possui assinatura ativa.
</ResponseField>

<ResponseField name="subscription" type="object">
  Detalhes da assinatura (null se não houver).

  <Expandable title="Propriedades">
    <ResponseField name="plan" type="string">
      Identificador do plano (starter, professional, business, agency).
    </ResponseField>

    <ResponseField name="status" type="string">
      Status: `active`, `canceled`, `past_due` ou `trialing`.
    </ResponseField>

    <ResponseField name="billingCycle" type="string">
      Periodicidade: `monthly` ou `yearly`.
    </ResponseField>

    <ResponseField name="currentPeriodStart" type="string">
      Início do período de cobrança atual (ISO 8601).
    </ResponseField>

    <ResponseField name="currentPeriodEnd" type="string">
      Fim do período de cobrança atual (ISO 8601).
    </ResponseField>

    <ResponseField name="cancelAtPeriodEnd" type="boolean">
      Se verdadeiro, a assinatura encerra em `currentPeriodEnd`.
    </ResponseField>
  </Expandable>
</ResponseField>

<ResponseField name="planDetails" type="object">
  Informações completas do plano (null se não houver assinatura).
</ResponseField>

## Status da assinatura

| Status     | Descrição                            |
| ---------- | ------------------------------------ |
| `active`   | Assinatura ativa e em dia            |
| `trialing` | Usuário em período de teste          |
| `past_due` | Pagamento falhou; suspensão iminente |
| `canceled` | Assinatura totalmente cancelada      |

## Respostas de erro

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

***

## GET /subscriptions/current/api

Retorna a assinatura atual com chave de API. Indicado para integrações externas.

### Autenticação

```
Authorization: Bearer llmgen_your_api_key_here
```

### Resposta

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

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

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

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

  response = requests.get(
      'https://api.llmgenerator.com/api/v1/subscriptions/current/api',
      headers={'Authorization': 'Bearer llmgen_your_api_key_here'}
  )
  data = response.json()
  ```
</RequestExample>
