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

# Checkout

> Monte a página de venda pela API: crie o checkout, ajuste as regras de pagamento, adicione um order bump e ligue o pixel de conversão.

O produto existe, a oferta tem preço — falta a página onde alguém compra. É isso que o domínio de **checkout** monta: a página, o que sobe o ticket dentro dela (**order bumps**) e o que mede a conversão (**pixels**). São 12 operações.

<Info>
  Os exemplos usam `$TOKEN` e o produto criado em [Catálogo](/guias/catalogo), `cmty05wl0000apyg1bx1566ej`, com a oferta `540`.
</Info>

## 1. Pegue o link que já existe

Criar um produto pela API já monta um checkout padrão. Antes de criar outro, veja os links que o produto tem:

```bash theme={null}
curl -s https://api.ephra.io/v1/products/cmty05wl0000apyg1bx1566ej/links \
  -H "Authorization: Bearer $TOKEN"
```

```json theme={null}
{
  "success": true,
  "data": [
    { "title": "Curso de Tráfego Pago 2026", "price": 49900, "slug": "l8bp1ac" },
    { "title": "Plano Anual — Curso de Tráfego Pago", "price": 49900, "slug": "n8cp1gb" }
  ],
  "pagination": { "page": 1, "pageSize": 10, "total": 2, "totalPages": 1 }
}
```

O `slug` é o endereço público da oferta no checkout. É esse valor que vai no anúncio.

## 2. Crie uma variação para testar

Um segundo checkout no mesmo produto serve para teste A/B: mesma oferta, página diferente.

```bash theme={null}
curl -s -X POST https://api.ephra.io/v1/checkouts \
  -H "Authorization: Bearer $TOKEN" \
  -H "Content-Type: application/json" \
  -d '{
    "productId": "cmty05wl0000apyg1bx1566ej",
    "checkoutName": "Checkout Black Friday"
  }'
```

```json theme={null}
{
  "success": true,
  "data": {
    "id": "cmty0689f0005pyg16qbp6ie6",
    "version": "v1",
    "checkoutName": "Checkout Black Friday",
    "productId": "cmty05wl0000apyg1bx1566ej",
    "active": true,
    "slug": null,
    "isDefault": false,
    "model": "modeloA",
    "acceptMethod": [],
    "preferredPaymentMethod": null,
    "maxInstallments": null,
    "defaultOfferId": null,
    "collectInstagram": false,
    "allowedDoubleCard": false,
    "allowedCardPix": false,
    "allowedSmartInstallment": false,
    "createdAt": "2026-09-12T06:27:18.483Z",
    "updatedAt": "2026-09-12T06:27:18.483Z"
  }
}
```

<Warning>
  Repare no campo `version`. A Ephra tem duas gerações de checkout e **elas aceitam configurações diferentes**. Um checkout `v1` (o que a API cria hoje) configura cronômetro, banner, depoimentos e o checkout padrão do produto. Um checkout `v2` configura o conjunto de ofertas, os meios de pagamento aceitos e o parcelamento. Pedir a um `v1` algo que só existe no `v2` responde `400`:

  ```json theme={null}
  {
    "success": false,
    "message": "Checkouts da geração v1 não gerenciam o conjunto de ofertas por aqui. Migre o produto para o construtor atual."
  }
  ```
</Warning>

## 3. Configure as regras de pagamento

```bash theme={null}
curl -s -X PATCH https://api.ephra.io/v1/checkouts/cmty0689f0005pyg16qbp6ie6 \
  -H "Authorization: Bearer $TOKEN" \
  -H "Content-Type: application/json" \
  -d '{
    "isDefault": true,
    "allowedCardPix": true,
    "allowedSmartInstallment": true
  }'
```

```json theme={null}
{
  "success": true,
  "data": {
    "id": "cmty0689f0005pyg16qbp6ie6",
    "version": "v1",
    "checkoutName": "Checkout Black Friday",
    "isDefault": true,
    "allowedDoubleCard": false,
    "allowedCardPix": true,
    "allowedSmartInstallment": true,
    "updatedAt": "2026-09-12T06:27:35.006Z"
  }
}
```

`allowedCardPix` deixa o comprador pagar parte no cartão e parte no Pix. `allowedDoubleCard` divide em dois cartões. `isDefault: true` faz esta página virar a que abre pela URL do produto — só um checkout por produto pode ser o padrão.

## 4. Adicione um order bump

O order bump é a oferta que aparece com uma caixinha de seleção dentro do checkout, antes do pagamento.

```bash theme={null}
curl -s -X POST https://api.ephra.io/v1/order-bumps \
  -H "Authorization: Bearer $TOKEN" \
  -H "Content-Type: application/json" \
  -d '{
    "offerId": 540,
    "productId": "cmty05wl0000apyg1bx1566ej",
    "title": "Leve também o Pack de Criativos",
    "callToAction": "Sim, quero o pack por R$ 97",
    "description": "80 criativos prontos para anúncio, editáveis no Canva.",
    "backgroundColor": "#F4F7FB",
    "checkboxColor": "#1B9E4B"
  }'
```

```json theme={null}
{
  "success": true,
  "data": {
    "id": "cmty068d40006pyg1jwzbonwa",
    "offerId": 540,
    "productId": "cmty05wl0000apyg1bx1566ej",
    "checkoutId": null,
    "title": "Leve também o Pack de Criativos",
    "description": "80 criativos prontos para anúncio, editáveis no Canva.",
    "callToAction": "Sim, quero o pack por R$ 97",
    "displayImage": null,
    "showProductImage": false,
    "backgroundColor": "#F4F7FB",
    "textColor": null,
    "borderColor": null,
    "checkboxColor": "#1B9E4B",
    "exibitionOrder": 1,
    "active": true,
    "createdAt": "2026-09-12T06:27:18.616Z",
    "updatedAt": "2026-09-12T06:27:18.616Z"
  }
}
```

As cores vão em hexadecimal de seis dígitos com `#`. `exibitionOrder` decide a ordem quando há mais de um bump na mesma página.

## 5. Ligue o pixel de conversão

Descubra o provedor primeiro — o `pixelServiceTypeId` é o `id` desta lista:

```bash theme={null}
curl -s "https://api.ephra.io/v1/pixel-providers?page=1&pageSize=5" \
  -H "Authorization: Bearer $TOKEN"
```

```json theme={null}
{
  "success": true,
  "data": [
    { "id": "1", "name": "Meta Ads", "type": "meta", "slug": "meta-ads" }
  ],
  "pagination": { "page": 1, "pageSize": 5, "total": 1, "totalPages": 1 }
}
```

```bash theme={null}
curl -s -X POST https://api.ephra.io/v1/pixels \
  -H "Authorization: Bearer $TOKEN" \
  -H "Content-Type: application/json" \
  -d '{
    "productId": "cmty05wl0000apyg1bx1566ej",
    "pixelServiceTypeId": 1,
    "pixelCode": "1284937561029384",
    "name": "Meta — Curso de Tráfego Pago",
    "capiAccessToken": "EAAG9ZC0exemploDeTokenDeConversoes",
    "testEventCode": "TEST48291"
  }'
```

```json theme={null}
{
  "success": true,
  "data": {
    "name": "Meta — Curso de Tráfego Pago",
    "pixelCode": "1284937561029384",
    "provider": { "id": "1", "name": "Meta Ads", "type": "meta", "slug": "meta-ads" },
    "status": true,
    "valueType": "total_order_and_feess",
    "isMarkPix": false,
    "conversionLabel": null,
    "conversionValue": null,
    "triggerOnCheckout": false,
    "triggerOnBeginCheckout": false,
    "hasCapiToken": true,
    "testEventCode": "TEST48291",
    "productIds": ["cmty05wl0000apyg1bx1566ej"],
    "createdAt": "2026-09-12T06:39:20.494Z",
    "updatedAt": "2026-09-12T06:39:20.494Z"
  }
}
```

O token da API de Conversões nunca volta na resposta: sai apenas `hasCapiToken: true`. `isMarkPix: true` dispara a conversão já na geração do Pix, antes do pagamento — útil para otimização de campanha, enganoso para relatório de receita.

## 6. Veja quem desistiu

Carrinho abandonado é um `order draft`: o comprador preencheu os dados e não pagou.

```bash theme={null}
curl -s "https://api.ephra.io/v1/order-drafts?page=1&pageSize=3" \
  -H "Authorization: Bearer $TOKEN"
```

```json theme={null}
{
  "success": true,
  "data": [
    {
      "name": "Mariana Ribeiro Alves",
      "documentType": "CPF",
      "document": "39053344705",
      "email": "mariana.alves@empresadela.com.br",
      "phone": "+5521998877665",
      "items": [
        { "name": "Curso de Tráfego Pago", "amount": 12900, "quantity": 1, "unitPrice": 12900 }
      ]
    }
  ],
  "pagination": { "page": 1, "pageSize": 3, "total": 1, "totalPages": 1 }
}
```

É a matéria-prima da recuperação de carrinho. O evento equivalente em tempo real é [`cart_abandoned`](/webhooks/eventos/recuperacao).

## Todas as operações do domínio

<CardGroup cols={2}>
  <Card title="Checkouts" icon="cart-shopping" href="/api-reference/checkout/criar-checkout">
    Criar, consultar, atualizar, excluir e definir o conjunto de ofertas.
  </Card>

  <Card title="Links de pagamento" icon="link" href="/api-reference/checkout/listar-links-de-venda-do-produto">
    As URLs públicas de cada oferta do produto.
  </Card>

  <Card title="Pixels" icon="chart-line" href="/api-reference/checkout/listar-pixels-de-rastreamento">
    Provedores, cadastro, remoção e vínculo por checkout.
  </Card>

  <Card title="Carrinhos abandonados" icon="cart-flatbed" href="/api-reference/checkout/listar-carrinhos-abandonados">
    Quem preencheu os dados e não concluiu.
  </Card>
</CardGroup>
