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

# Criar Preço de Assinatura

> Crie planos de preço para produtos de assinatura

## Visão Geral

Crie um preço de assinatura para definir quanto e com que frequência os clientes serão cobrados. Um produto pode ter múltiplos preços (ex: mensal, anual).

## Parâmetros

### Campos Obrigatórios

<ParamField body="productId" type="string" required>
  UUID do produto pai (ex: `prod_abc123xyz`). O produto deve ser do tipo `subscription`.
</ParamField>

<ParamField body="name" type="string" required>
  Nome do plano exibido ao cliente (ex: "Plano Mensal").
</ParamField>

<ParamField body="amount" type="number" required>
  Valor em Reais (ex: 49.90).
</ParamField>

<ParamField body="billingInterval" type="string" required>
  Intervalo de cobrança: `daily`, `weekly`, `monthly`, `annually`.
</ParamField>

### Campos Opcionais

<ParamField body="trialDays" type="integer" default="0">
  Dias de teste gratuito antes da primeira cobrança.
</ParamField>

<ParamField body="isActive" type="boolean" default="true">
  Se o plano está disponível para novos assinantes.
</ParamField>

<Note>
  A moeda padrão é `BRL` (Real Brasileiro). Não é necessário enviar o campo `currency` na requisição.
</Note>

## Exemplo de Requisição

<CodeGroup>
  ```bash cURL theme={null}
  curl -X POST https://garu.com.br/api/subscription-prices \
    -H "Authorization: Bearer sk_test_sua_chave" \
    -H "Content-Type: application/json" \
    -d '{
      "productId": "prod_abc123xyz",
      "name": "Plano Mensal",
      "amount": 49.90,
      "billingInterval": "monthly",
      "trialDays": 7
    }'
  ```

  ```javascript JavaScript theme={null}
  const response = await fetch('https://garu.com.br/api/subscription-prices', {
    method: 'POST',
    headers: {
      'Authorization': `Bearer ${process.env.GARU_API_KEY}`,
      'Content-Type': 'application/json'
    },
    body: JSON.stringify({
      productId: 'prod_abc123xyz',
      name: 'Plano Mensal',
      amount: 49.90,
      billingInterval: 'monthly',
      trialDays: 7
    })
  });

  const preco = await response.json();
  console.log(`Checkout: https://garu.com.br/pay/prod_abc123xyz?priceId=${preco.uuid}`);
  ```

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

  response = requests.post(
      'https://garu.com.br/api/subscription-prices',
      headers={
          'Authorization': f'Bearer {os.environ["GARU_API_KEY"]}',
          'Content-Type': 'application/json'
      },
      json={
          'productId': 'prod_abc123xyz',
          'name': 'Plano Mensal',
          'amount': 49.90,
          'billingInterval': 'monthly',
          'trialDays': 7
      }
  )

  preco = response.json()
  print(f"Preço criado: {preco['uuid']}")
  ```
</CodeGroup>

## Resposta de Sucesso

<ResponseField name="id" type="number">
  ID interno do preço.
</ResponseField>

<ResponseField name="uuid" type="string">
  Identificador único usado no link de checkout.
</ResponseField>

<ResponseField name="productId" type="string">
  UUID do produto pai.
</ResponseField>

<ResponseField name="name" type="string">
  Nome do plano.
</ResponseField>

<ResponseField name="amount" type="number">
  Valor em Reais.
</ResponseField>

<ResponseField name="billingInterval" type="string">
  Intervalo de cobrança.
</ResponseField>

<ResponseField name="trialDays" type="number">
  Dias de teste gratuito.
</ResponseField>

<ResponseField name="isActive" type="boolean">
  Se o plano está ativo.
</ResponseField>

### Exemplo de Resposta (201 Created)

```json theme={null}
{
  "id": "price_def456uvw",
  "productId": "prod_abc123xyz",
  "sellerId": 1,
  "name": "Plano Mensal",
  "amount": 49.90,
  "currency": "BRL",
  "billingInterval": "monthly",
  "trialDays": 7,
  "isActive": true,
  "createdAt": "2024-01-15T10:35:00.000Z",
  "updatedAt": "2024-01-15T10:35:00.000Z"
}
```

## Intervalos de Cobrança

| Intervalo | Valor      | Descrição                      |
| --------- | ---------- | ------------------------------ |
| Diário    | `daily`    | Cobrança a cada dia            |
| Semanal   | `weekly`   | Cobrança a cada 7 dias         |
| Mensal    | `monthly`  | Cobrança no mesmo dia todo mês |
| Anual     | `annually` | Cobrança uma vez por ano       |

## Link de Pagamento

Após criar o preço de assinatura, você pode gerar o link de pagamento combinando o UUID do produto com o ID do preço.

### Formato do Link

```
https://garu.com.br/pay/{product_uuid}?priceId={price_id}
```

| Parâmetro      | Origem                                      | Descrição                      |
| -------------- | ------------------------------------------- | ------------------------------ |
| `product_uuid` | Resposta de `POST /api/products`            | UUID do produto (campo `uuid`) |
| `price_id`     | Resposta de `POST /api/subscription-prices` | ID do preço (campo `id`)       |

### Exemplo

Considerando:

* Produto criado com `uuid`: `c69c63d2-4207-4613-ad69-28e7e902544b`
* Preço criado com `id`: `price_gNgQVRrG5goab0Ql`

O link de pagamento será:

```
https://garu.com.br/pay/c69c63d2-4207-4613-ad69-28e7e902544b?priceId=price_gNgQVRrG5goab0Ql
```

### Exemplo Completo em Código

```javascript theme={null}
// 1. Criar produto de assinatura
const produto = await fetch('https://garu.com.br/api/products', {
  method: 'POST',
  headers: {
    'Authorization': `Bearer ${process.env.GARU_API_KEY}`,
    'Content-Type': 'application/json'
  },
  body: JSON.stringify({
    name: 'Plano Premium',
    isSubscription: true
  })
}).then(r => r.json());

// 2. Criar preço de assinatura
const preco = await fetch('https://garu.com.br/api/subscription-prices', {
  method: 'POST',
  headers: {
    'Authorization': `Bearer ${process.env.GARU_API_KEY}`,
    'Content-Type': 'application/json'
  },
  body: JSON.stringify({
    productId: produto.uuid,
    name: 'Mensal',
    amount: 49.90,
    billingInterval: 'monthly'
  })
}).then(r => r.json());

// 3. Gerar link de pagamento
const linkPagamento = `https://garu.com.br/pay/${produto.uuid}?priceId=${preco.id}`;
console.log(linkPagamento);
// https://garu.com.br/pay/c69c63d2-4207-4613-ad69-28e7e902544b?priceId=price_gNgQVRrG5goab0Ql
```

<Tip>
  Salve o `uuid` do produto e o `id` do preço no seu banco de dados para poder gerar links de pagamento a qualquer momento.
</Tip>

## Múltiplos Planos

Crie diferentes planos para o mesmo produto:

```javascript theme={null}
// Plano Básico - Mensal
await criarPreco({
  productId: 'prod_abc123xyz',
  name: 'Básico Mensal',
  amount: 29.90,
  billingInterval: 'monthly'
});

// Plano Pro - Mensal
await criarPreco({
  productId: 'prod_abc123xyz',
  name: 'Pro Mensal',
  amount: 49.90,
  billingInterval: 'monthly',
  trialDays: 7
});

// Plano Pro - Anual (com desconto de 20%)
await criarPreco({
  productId: 'prod_abc123xyz',
  name: 'Pro Anual',
  amount: 479.00, // 12 meses com 20% de desconto
  billingInterval: 'annually',
  trialDays: 14
});
```

## Próximos Passos

<CardGroup cols={2}>
  <Card title="Listar Preços" icon="list" href="/api-reference/assinaturas/precos/listar">
    Consulte todos os preços cadastrados
  </Card>

  <Card title="Listar Assinaturas" icon="users" href="/api-reference/assinaturas/listar">
    Consulte as assinaturas ativas
  </Card>
</CardGroup>
