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

# Recursos de Finalização de Compra

> Finalização de compra otimizada para conversão, em conformidade global, com suporte a múltiplas moedas, múltiplos idiomas, cálculo automático de impostos, códigos de desconto, complementos e coleta inteligente de endereços.

<Frame>
  <img src="https://mintcdn.com/dodopayments/Vafy52417ELLVDIx/images/checkout/cover.png?fit=max&auto=format&n=Vafy52417ELLVDIx&q=85&s=2dc0a0db8e021e39fb17e84fc12eb5f9" alt="Página de checkout" style={{ maxHeight: '500px', width: 'auto' }} width="2844" height="1556" data-path="images/checkout/cover.png" />
</Frame>

<Info>
  Dodo Payments checkout é um checkout otimizado para conversão, compatível globalmente, projetado para produtos digitais e empresas SaaS. Ele oferece suporte a múltiplas moedas, idiomas, impostos, descontos, complementos e fluxos de conformidade voltados para empresas.
</Info>

<CardGroup cols={2}>
  <Card title="Checkout Sessions API" icon="code" href="/api-reference/checkout-sessions/create">
    Crie sessões de checkout hospedadas programaticamente.
  </Card>

  <Card title="Preview Checkout" icon="eye" href="/api-reference/checkout-sessions/preview">
    Calcule preços e impostos antes de criar uma sessão.
  </Card>

  <Card title="Payment Methods" icon="credit-card" href="/features/payment-methods">
    Métodos de pagamento suportados e opções de configuração.
  </Card>
</CardGroup>

## Moeda Adaptativa

A Moeda Adaptativa permite que os clientes paguem em sua moeda local preferida, melhorando a confiança e as taxas de conversão.

### Como Funciona

1. **Habilitar**: Ative a Moeda Adaptativa em **Configurações → Negócio**
2. **Selecionar**: Os clientes podem trocar de moeda diretamente no checkout
3. **Converter**: Os preços são convertidos dinamicamente usando taxas de câmbio em tempo real
4. **Exibir**: O valor final a pagar é mostrado de forma transparente antes do pagamento

<Frame>
  <img src="https://mintcdn.com/dodopayments/Vafy52417ELLVDIx/images/checkout/c1.png?fit=max&auto=format&n=Vafy52417ELLVDIx&q=85&s=c2f9ee4b1748448d4ab7ab23954dcc64" alt="Seletor de moeda no checkout" style={{ maxHeight: '500px', width: '70%' }} width="794" height="858" data-path="images/checkout/c1.png" />
</Frame>

<Card title="Adaptive Currency" icon="money-bill-transfer" href="/features/adaptive-currency">
  Saiba mais sobre moedas suportadas, taxas de conversão e tratamento de reembolsos.
</Card>

## Checkout em Múltiplas Línguas

Dodo Payments suporta múltiplas línguas na página de checkout, permitindo que os clientes concluam pagamentos em um idioma com o qual se sintam confortáveis.

<Frame>
  <img src="https://mintcdn.com/dodopayments/Vafy52417ELLVDIx/images/checkout/c2.png?fit=max&auto=format&n=Vafy52417ELLVDIx&q=85&s=ecc6eb8db604e37433d8797c51768577" alt="Seletor de idioma no checkout" style={{ maxHeight: '500px', width: '70%' }} width="794" height="858" data-path="images/checkout/c2.png" />
</Frame>

### Principais Destaques

* Seletor de idioma disponível diretamente no checkout
* Texto da interface, rótulos e mensagens do sistema são localizados
* Melhora a acessibilidade e a conversão internacional

### Idiomas Suportados

A página de checkout oferece suporte a 21 idiomas:

| Language  | Code |
| --------- | ---- |
| Árabe     | `ar` |
| Catalão   | `ca` |
| Chinês    | `zh` |
| Holandês  | `nl` |
| Inglês    | `en` |
| Francês   | `fr` |
| Alemão    | `de` |
| Hebraico  | `he` |
| Indonésio | `id` |
| Italiano  | `it` |
| Japonês   | `ja` |
| Coreano   | `ko` |
| Malaio    | `ms` |
| Polonês   | `pl` |
| Português | `pt` |
| Romeno    | `ro` |
| Russo     | `ru` |
| Espanhol  | `es` |
| Sueco     | `sv` |
| Tailandês | `th` |
| Turco     | `tr` |

<Tip>
  Você pode forçar um idioma específico no checkout definindo o parâmetro `force_language` ao criar uma sessão de checkout. Veja a [Checkout Sessions API](/developer-resources/checkout-session#14-forcing-a-language) para obter mais detalhes.
</Tip>

## Cálculo automático de impostos

Os impostos são calculados automaticamente com base na localização de cobrança do cliente, garantindo conformidade com os requisitos de GST, VAT e imposto sobre vendas sem configuração manual.

### Como funciona o cálculo de impostos

<Steps>
  <Step title="Location Detection">
    Regras de impostos são aplicadas com base no país do cliente (e na região, quando aplicável).
  </Step>

  <Step title="Dynamic Updates">
    O valor do imposto é atualizado automaticamente quando:

    * O país é alterado
    * O endereço é atualizado
  </Step>

  <Step title="Transparent Display">
    O detalhamento final dos impostos é mostrado claramente antes do pagamento.
  </Step>
</Steps>

<Tip>
  O cálculo de impostos é totalmente automatizado. Nenhuma configuração manual é necessária para bens digitais padrão e produtos SaaS.
</Tip>

## Suporte ao ID Fiscal da Empresa

Para empresas registradas, o checkout permite que os clientes insiram seu ID Fiscal (por exemplo, número VAT/GST).

### O que acontece quando um ID Fiscal é inserido

* A elegibilidade fiscal é validada em tempo real
* Exceções fiscais aplicáveis ou regras de cobrança reversa são aplicadas
* O valor do imposto é atualizado instantaneamente no checkout

<Frame>
  <img src="https://mintcdn.com/dodopayments/Vafy52417ELLVDIx/images/checkout/c3.png?fit=max&auto=format&n=Vafy52417ELLVDIx&q=85&s=76451fed5636a6ef3e5c3ec7f6a96c9f" alt="Entrada de ID Fiscal Comercial no checkout" style={{ maxHeight: '500px', width: '70%' }} width="1440" height="1716" data-path="images/checkout/c3.png" />
</Frame>

<Info>
  Isso é especialmente útil para SaaS B2B e serviços digitais onde clientes empresariais podem ser elegíveis para isenções fiscais.
</Info>

## Códigos de desconto

Os clientes podem aplicar códigos de desconto ou promocionais criados no painel diretamente na página de checkout.

### Experiência no checkout

1. O cliente insere o código de desconto
2. O desconto é validado instantaneamente
3. O preço atualizado e a economia são exibidos claramente

<Frame>
  <img src="https://mintcdn.com/dodopayments/Vafy52417ELLVDIx/images/checkout/c4.png?fit=max&auto=format&n=Vafy52417ELLVDIx&q=85&s=639dcc94ddd1b41fdd6ff200c2a28e47" alt="Entrada de código de desconto no checkout" style={{ maxHeight: '500px', width: '70%' }} width="794" height="858" data-path="images/checkout/c4.png" />
</Frame>

### Integração com a API

Pré-aplique um ou mais códigos de desconto em pilha ou habilite o campo de entrada para desconto:

```typescript theme={null}
const session = await client.checkoutSessions.create({
  product_cart: [
    { product_id: 'prod_abc', quantity: 1 }
  ],
  discount_codes: ['WELCOME20'], // Pre-apply one or more codes (max 20, applied in order)
  feature_flags: {
    allow_discount_code: true // Show discount input field
  },
  return_url: 'https://yoursite.com/return'
});
```

<Info>
  `discount_codes` aceita uma matriz de até 20 códigos que se acumulam na ordem. O campo singular `discount_code` está obsoleto, mas ainda funciona — integrações existentes não precisam mudar imediatamente. Migre para `discount_codes` quando conveniente para usar o empilhamento e a forma de resposta mais rica.
</Info>

<Card title="Discount Codes" icon="percent" href="/features/discount-codes">
  Aprenda a criar e gerenciar códigos de desconto.
</Card>

<Card title="Validate Discount by Code" icon="tag" href="/api-reference/discounts/get-discount-by-code">
  Pesquise e valide descontos usando nomes de códigos.
</Card>

## Coleta de Endereço Inteligente

O checkout suporta entrada de endereço flexível para conclusão mais rápida.

### Opções Disponíveis

| Opção                                       | Descrição                                      |
| ------------------------------------------- | ---------------------------------------------- |
| **Autopreenchimento de Endereço do Google** | Seleção rápida com preenchimento automático    |
| **Entrada Manual**                          | Controle total para endereços completos        |
| **Seleção de País**                         | Impulsiona a lógica de impostos e conformidade |

<Tip>
  A coleta de endereços equilibra velocidade, precisão e cobertura global para maximizar a conversão enquanto garante conformidade.
</Tip>

## Coleta de Número de Telefone

Controle se o campo de número de telefone aparece no checkout — e se é obrigatório — usando flags de recurso de sessão de checkout.

| Flag                            | Padrão  | Comportamento                                                                                         |
| ------------------------------- | ------- | ----------------------------------------------------------------------------------------------------- |
| `allow_phone_number_collection` | `true`  | Mostra o campo de número de telefone no formulário de checkout                                        |
| `require_phone_number`          | `false` | Torna o campo de número de telefone obrigatório (a validação do formulário aplica um valor não vazio) |

```typescript theme={null}
const session = await client.checkoutSessions.create({
  product_cart: [{ product_id: 'prod_abc', quantity: 1 }],
  feature_flags: {
    allow_phone_number_collection: true,
    require_phone_number: true
  },
  return_url: 'https://yoursite.com/return'
});
```

<Warning>
  `require_phone_number: true` requer `allow_phone_number_collection: true`. A API rejeita sessões onde a coleta de telefone está desativada enquanto o número de telefone é obrigatório.
</Warning>

<Tip>
  Use `require_phone_number` para B2B SaaS, indústrias regulamentadas ou qualquer fluxo onde você precise de um canal de contato verificado para suporte, revisão de fraude ou conformidade.
</Tip>

## Campos Personalizados

Colete informações adicionais dos clientes durante o checkout definindo campos de formulário personalizados. Isso é útil para coletar dados como nome da empresa, tamanho da equipe, fonte de indicação ou qualquer outra informação específica de negócios.

### Tipos de Campo Disponíveis

| Tipo       | Descrição                        |
| ---------- | -------------------------------- |
| `text`     | Entrada de texto de uma linha    |
| `number`   | Entrada numérica                 |
| `email`    | Endereço de e-mail com validação |
| `url`      | URL com validação                |
| `date`     | Seletor de data                  |
| `dropdown` | Seleção de opções predefinidas   |
| `boolean`  | Alternância Sim/Não              |

### Exemplo

```typescript theme={null}
const session = await client.checkoutSessions.create({
  product_cart: [
    { product_id: 'prod_abc', quantity: 1 }
  ],
  custom_fields: [
    {
      key: 'company_name',
      label: 'Company Name',
      field_type: 'text',
      required: true
    },
    {
      key: 'team_size',
      label: 'Team Size',
      field_type: 'dropdown',
      required: true,
      options: ['1-10', '11-50', '51-200', '200+']
    }
  ],
  return_url: 'https://yoursite.com/return'
});
```

<Info>
  As respostas dos clientes são incluídas automaticamente em payloads de webhook (`payment.succeeded`, `subscription.active`) e respostas de API via a matriz `custom_field_responses`. Você pode definir até 5 campos personalizados por sessão de checkout.
</Info>

<Card title="Custom Fields Guide" icon="input-text" href="/developer-resources/checkout-session#15-collecting-custom-fields">
  Saiba mais sobre configuração de campos personalizados e acesso a respostas.
</Card>

## Aceitação de Política de Privacidade & Termos

Para garantir transparência legal e de conformidade:

* Links de [Política de Privacidade](https://dodopayments.com/privacy-policy) e [Termos do Comprador](https://dodopayments.com/buyer-terms) são claramente exibidos no checkout
* Clientes reconhecem explicitamente antes de completar o pagamento

<Info>
  Isso ajuda a atender aos requisitos globais de proteção ao consumidor e privacidade de dados, incluindo conformidade com GDPR.
</Info>

## Checkout de Coleções

Coleções de Produtos permitem uma experiência de checkout unificada, onde os clientes podem visualizar e selecionar entre vários produtos relacionados (por exemplo, planos Starter, Pro, Enterprise) em um único checkout.

### Como Funciona

1. **Todos os produtos exibidos**: Clientes veem todos os produtos ativos na coleção
2. **Primeiro produto pré-selecionado**: O primeiro produto na coleção é automaticamente selecionado
3. **Comparar opções**: Clientes podem comparar preços e recursos antes de escolher
4. **Seleção única**: Após selecionar um produto, o checkout prossegue com o fluxo de pagamento padrão

### Criando um Checkout de Coleção

```typescript theme={null}
const session = await client.checkoutSessions.create({
  product_collection_id: 'pdc_abc123',
  product_cart: [], // Required: pass an empty array for collection checkout
  return_url: 'https://yoursite.com/return'
});
```

<Warning>
  Ao usar `product_collection_id`, passe uma matriz `product_cart` vazia. Códigos de desconto não podem ser pré-aplicados na criação da sessão.
</Warning>

<Card title="Product Collections" icon="layer-group" href="/features/product-collections">
  Aprenda a criar e gerenciar coleções de produtos para experiências de checkout unificadas.
</Card>

## Configuração da Sessão de Checkout

Controle o comportamento do checkout usando a API de Sessões de Checkout:

```typescript theme={null}
const session = await client.checkoutSessions.create({
  product_cart: [
    { product_id: 'prod_abc', quantity: 1 }
  ],
  customer: {
    email: 'customer@example.com',
    name: 'Jane Doe'
  },
  billing_currency: 'EUR', // Set specific currency
  discount_codes: ['PROMO10'],
  feature_flags: {
    allow_discount_code: true
  },
  return_url: 'https://yoursite.com/return',
  cancel_url: 'https://yoursite.com/pricing', // Optional: where to redirect on cancel
  metadata: {
    order_ref: 'ORD-12345'
  }
});
```

<Info>
  Após o pagamento, os clientes são redirecionados para seu `return_url` com parâmetros de consulta anexados automaticamente — incluindo `payment_id` ou `subscription_id`, `status`, `email`, e `license_key` (se aplicável). Veja o [guia de Sessões de Checkout](/developer-resources/checkout-session#request-body) para a lista completa.
</Info>

<CardGroup cols={2}>
  <Card title="Checkout Sessions API" icon="code" href="/api-reference/checkout-sessions/create">
    Referência completa da API para sessões de checkout.
  </Card>

  <Card title="Checkout Integration Guide" icon="book" href="/developer-resources/checkout-session">
    Guia passo a passo para integrar o checkout.
  </Card>
</CardGroup>

## Personalização do Tema de Checkout

Personalize a aparência da página de checkout para combinar com sua marca usando o parâmetro `customization.theme_config` ao criar uma sessão de checkout via API. Configure cores, fontes, raio de borda e texto dos botões para modos claro e escuro.

<Frame>
  <img src="https://mintcdn.com/dodopayments/rTHkQICkStFgSdh-/images/checkout/theme-example.png?fit=max&auto=format&n=rTHkQICkStFgSdh-&q=85&s=5277b69d67c90fd87e7c5d9c125fee12" alt="Página de checkout com tema personalizado" style={{ maxHeight: '500px', width: 'auto' }} width="2856" height="1490" data-path="images/checkout/theme-example.png" />
</Frame>

<Card title="Design & Theme Customization" icon="palette" href="/features/design">
  Configure temas visualmente a partir do painel com temas pré-construídos, tipografia, cores e visualização ao vivo.
</Card>

<Info>
  Esta seção cobre a configuração de tema **server-side API** usando `customization.theme_config`. Se você estiver usando o **Checkout SDK** (checkout sobreposto ou inline), veja as seções de personalização de tema em [Overlay Checkout](/developer-resources/overlay-checkout#theme-customization) ou [Inline Checkout](/developer-resources/inline-checkout#theme-customization) que utilizam propriedades camelCase (e.g., `bgPrimary` em vez de `bg_primary`).
</Info>

### Opções de Configuração de Tema

| Propriedade          | Descrição                                                                                       |
| -------------------- | ----------------------------------------------------------------------------------------------- |
| `light`              | Configuração de cor para modo claro                                                             |
| `dark`               | Configuração de cor para modo escuro                                                            |
| `font_primary_url`   | URL para a fonte primária                                                                       |
| `font_secondary_url` | URL para a fonte secundária                                                                     |
| `font_size`          | Tamanho da fonte: `xs`, `sm`, `md`, `lg`, `xl`, `2xl`                                           |
| `font_weight`        | Peso da fonte: `normal`, `medium`, `bold`, `extraBold`                                          |
| `radius`             | Raio de borda para elementos de UI (e.g., `4px`, `0.5rem`, `8px`)                               |
| `pay_button_text`    | Texto personalizado para o botão de pagamento (por exemplo, "Concluir Compra", "Assinar Agora") |

### Configuração de Cor (Modo Claro/Escuro)

Cada modo (`light` e `dark`) suporta as seguintes propriedades de cor:

| Propriedade              | Descrição                        |
| ------------------------ | -------------------------------- |
| `bg_primary`             | Cor principal de fundo           |
| `bg_secondary`           | Cor secundária de fundo          |
| `text_primary`           | Cor principal do texto           |
| `text_secondary`         | Cor secundária do texto          |
| `text_placeholder`       | Cor do texto do placeholder      |
| `text_error`             | Cor do texto de erro             |
| `text_success`           | Cor do texto de sucesso          |
| `border_primary`         | Cor principal da borda           |
| `border_secondary`       | Cor secundária da borda          |
| `button_primary`         | Cor de fundo do botão primário   |
| `button_primary_hover`   | Cor de hover do botão primário   |
| `button_secondary`       | Cor de fundo do botão secundário |
| `button_secondary_hover` | Cor de hover do botão secundário |
| `button_text_primary`    | Cor do texto do botão primário   |
| `button_text_secondary`  | Cor do texto do botão secundário |
| `input_focus_border`     | Cor da borda de foco do input    |

<Info>
  Todos os campos de cor aceitam formatos de cor CSS padrão:

  * Hex: `#fff`, `#ffffff`, `#ffffffff`
  * RGB/RGBA: `rgb(255, 255, 255)`, `rgba(255, 255, 255, 0.5)`
  * HSL/HSLA: `hsl(120, 100%, 50%)`, `hsla(120, 100%, 50%, 0.5)`
  * Cores nomeadas: `red`, `blue`, `transparent`
</Info>

### Exemplo

<Info>
  Esta seção cobre a configuração de tema da **API do lado do servidor** usando `customization.theme_config`. Se você estiver usando o **Checkout SDK** (checkout sobreposto ou embutido), consulte a seção de personalização de tema em [Overlay Checkout](/developer-resources/overlay-checkout#theme-customization), que usa propriedades em camelCase (por exemplo, `bgPrimary` em vez de `bg_primary`).
</Info>

<Tip>
  Você não precisa especificar todas as propriedades de cor. Quaisquer propriedades não especificadas usarão os valores padrão do tema.
</Tip>

| Propriedade          | Descrição                                                                                       |
| -------------------- | ----------------------------------------------------------------------------------------------- |
| `light`              | Configuração de cor para modo claro                                                             |
| `dark`               | Configuração de cor para modo escuro                                                            |
| `font_primary_url`   | URL para a fonte primária                                                                       |
| `font_secondary_url` | URL para a fonte secundária                                                                     |
| `font_size`          | Tamanho da fonte: `xs`, `sm`, `md`, `lg`, `xl`, `2xl`                                           |
| `font_weight`        | Peso da fonte: `normal`, `medium`, `bold`, `extraBold`                                          |
| `radius`             | Raio da borda para elementos UI (por exemplo, `4px`, `0.5rem`, `8px`)                           |
| `pay_button_text`    | Texto personalizado para o botão de pagamento (por exemplo, "Finalizar Compra", "Assine Agora") |

### Configuração de Cor (Modo Claro/Escuro)

Cada modo (`light` e `dark`) suporta as seguintes propriedades de cor:

| Propriedade              | Descrição                        |
| ------------------------ | -------------------------------- |
| `bg_primary`             | Cor principal do fundo           |
| `bg_secondary`           | Cor secundária do fundo          |
| `text_primary`           | Cor principal do texto           |
| `text_secondary`         | Cor secundária do texto          |
| `text_placeholder`       | Cor do texto placeholder         |
| `text_error`             | Cor do texto de erro             |
| `text_success`           | Cor do texto de sucesso          |
| `border_primary`         | Cor principal da borda           |
| `border_secondary`       | Cor secundária da borda          |
| `button_primary`         | Cor do fundo do botão primário   |
| `button_primary_hover`   | Cor de hover do botão primário   |
| `button_secondary`       | Cor do fundo do botão secundário |
| `button_secondary_hover` | Cor de hover do botão secundário |
| `button_text_primary`    | Cor do texto do botão primário   |
| `button_text_secondary`  | Cor do texto do botão secundário |
| `input_focus_border`     | Cor da borda de foco do input    |

<Info>
  Todos os campos de cor aceitam formatos de cor padrão do CSS:

  * Hex: `#fff`, `#ffffff`, `#ffffffff`
  * RGB/RGBA: `rgb(255, 255, 255)`, `rgba(255, 255, 255, 0.5)`
  * HSL/HSLA: `hsl(120, 100%, 50%)`, `hsla(120, 100%, 50%, 0.5)`
  * Cores nomeadas: `red`, `blue`, `transparent`
</Info>

### Exemplo

```typescript theme={null}
const session = await client.checkoutSessions.create({
  product_cart: [
    { product_id: 'prod_abc', quantity: 1 }
  ],
  customization: {
    theme_config: {
      // Custom fonts
      font_primary_url: 'https://fonts.googleapis.com/css2?family=Inter:wght@400;500;600&display=swap',
      font_size: 'md',
      font_weight: 'medium',
      radius: '8px',
      pay_button_text: 'Complete Purchase',
      
      // Light mode colors
      light: {
        bg_primary: '#ffffff',
        bg_secondary: '#f5f5f5',
        text_primary: '#1a1a1a',
        text_secondary: '#666666',
        button_primary: '#0066ff',
        button_primary_hover: '#0052cc',
        button_text_primary: '#ffffff',
        border_primary: '#e0e0e0'
      },
      
      // Dark mode colors
      dark: {
        bg_primary: '#1a1a1a',
        bg_secondary: '#2d2d2d',
        text_primary: '#ffffff',
        text_secondary: '#a0a0a0',
        button_primary: '#3385ff',
        button_primary_hover: '#4d99ff',
        button_text_primary: '#ffffff',
        border_primary: '#404040'
      }
    }
  },
  return_url: 'https://yoursite.com/return'
});
```

<Tip>
  Não é necessário especificar todas as propriedades de cor. Quaisquer propriedades não especificadas usarão os valores padrão do tema.
</Tip>
