<!-- Generated from https://developers.superfrete.com/openapi.yaml (operationId: checkoutShipment). -->

# Pagar etiqueta com saldo

> `POST /api/v0/checkout` · Referência interativa: https://developers.superfrete.com/referencia#checkoutShipment

- **Method:** `POST`
- **Path:** `/api/v0/checkout`
- **Operation ID:** `checkoutShipment`
- **Tags:** Etiquetas

Paga uma etiqueta criada em [Criar etiqueta](https://developers.superfrete.com/referencia/md/createShipment.md) com o saldo da carteira SuperFrete. Com o pagamento aprovado, a etiqueta passa para `released` (aguardando postagem) e a resposta já traz o link de impressão.

> **Uma etiqueta por chamada**
>
> `orders` é um array, mas só o primeiro ID é pago. Para pagar várias etiquetas, faça uma chamada para cada uma.

O código de rastreio é gerado logo depois do pagamento e pode ainda vir vazio nesta resposta. Busque-o em [Consultar pedido](https://developers.superfrete.com/referencia/md/getOrder.md) ou pelo evento `order.generated` dos [webhooks](https://developers.superfrete.com/referencia/md/orderEvent.md).

## Como colocar saldo na carteira

**Produção:** no [painel](https://web.superfrete.com), abra **Perfil > Carteira**, clique em **Recarregue com Pix**, escolha o valor e pague o Pix gerado no app do seu banco. O saldo entra assim que o pagamento é confirmado.

**Sandbox:** no [sandbox](https://sandbox.superfrete.com), abra **Perfil > Carteira**, clique em **Recarregue com Pix**, escolha o valor e clique em **Copiar código PIX**. Cole o código na barra de endereço do navegador e tecle Enter: isso simula o pagamento e credita o saldo de teste.

## Effective servers

- `https://sandbox.superfrete.com`

  Sandbox (testes, etiquetas sem validade)
- `https://api.superfrete.com`

  Produção

## Authentication

- **bearerAuth**: HTTP bearer (`JWT`)

  Token de acesso da SuperFrete, no header `Authorization: Bearer {token}`.
  - **Integração da própria loja:** gere o token no painel, em **Integrações** ([produção](https://web.superfrete.com/#/integrations) ou [sandbox](https://sandbox.superfrete.com/#/integrations)).
  - **Plataforma que conecta várias contas:** obtenha um token por seller com o fluxo OAuth 2.0 ([`exchangeOAuthToken`](https://developers.superfrete.com/referencia/md/exchangeOAuthToken.md)).

  O token não expira e dá acesso a todas as rotas da API para a conta; não há escopos. Ele deixa de valer quando a integração é removida no painel. O token de sandbox só funciona no sandbox, e o de produção só em produção.

## Header parameters

- **`User-Agent` (required)**: `string`

  Nome da sua aplicação com um e-mail de contato técnico, no formato `Aplicação (email@exemplo.com)`. Hoje só [Listar pedidos](https://developers.superfrete.com/referencia/md/listOrders.md) recusa um valor fora desse formato, mas envie em todas as rotas.

  **Example:**

  ```json
  "MinhaLoja (dev@minhaloja.com.br)"
  ```

## Request body

**Required:** `true`

**Content type:** `application/json`

- **`orders` (required)**

  ID do pedido devolvido em Criar etiqueta. Só o primeiro item é pago.

  **One of:**
  - `array of string`, minItems: `1`
  - `string`

**Example:**

```json
{
  "orders": [
    "r8p3dhqjn4I0tBpnvkpU"
  ]
}
```

## Responses

### 200 Pagamento aprovado.

**Content type:** `application/json`

- **`purchase`**: `object`
  - **`id`**: `string`

    ID do pedido pago.
  - **`orders`**: `array`

    **Items:**
    - **`discount`**: `number`

      Desconto em relação ao preço de balcão, em reais.
    - **`id`**: `string`
    - **`price`**: `number`

      Valor cobrado, em reais.
    - **`print`**: `object`
      - **`url`**: `string`, format: `uri`

        PDF da etiqueta.
    - **`protocol`**: `string`

      Igual a `id`.
    - **`self_tracking`**: `string`

      Igual a `tracking`.
    - **`service_id`**: `integer`, possible values: `1, 2, 3, 17, 31, 33`

      `1` PAC · `2` SEDEX · `17` Mini Envios · `3` Jadlog · `31` Loggi · `33` J\&T.
    - **`tags`**: `array`, schema: `OrderTags`

      Identificação do pedido na sua plataforma, enviada em `options.tags`.

      **Items:**
      - **`tag`**: `string`
      - **`url`**: `string`
    - **`tracking`**: `string`

      Código de rastreio. Pode vir vazio; ele é gerado logo após o pagamento.
  - **`status`**: `string`, possible values: `"paid"`
- **`success`**: `boolean`

**Example:**

```json
{
  "success": true,
  "purchase": {
    "id": "r8p3dhqjn4I0tBpnvkpU",
    "status": "paid",
    "orders": [
      {
        "id": "r8p3dhqjn4I0tBpnvkpU",
        "protocol": "r8p3dhqjn4I0tBpnvkpU",
        "service_id": 1,
        "price": 22.38,
        "discount": 7.41,
        "tracking": "",
        "self_tracking": "",
        "print": {
          "url": "https://etiqueta.superfrete.com/_etiqueta/pdf/eyJvcmRlcl9pZCI6InI4cDNkaHFqbjRJMHRCcG52a3BVIiwidWlkIjoiTTJ0RFMwZHgifQ==?format=A4"
        },
        "tags": [
          {
            "tag": "3101481",
            "url": "https://minhaloja.com.br/pedidos/3101481"
          }
        ]
      }
    ]
  }
}
```

### 400 Requisição inválida.

**Content type:** `application/json`

**Any of:**

- `object`, schema: `ValidationError`

  Um ou mais campos da requisição são inválidos.
  - **`errors` (required)**: `object`

    Mapa do campo (ex.: `to.postal_code`) para a lista de mensagens de erro desse campo.

    **Additional properties:**

    `array of string`
  - **`message` (required)**: `string`

    Sempre `Ocorreu um ou mais erros.`
- `object`, schema: `Error`

  Erro de regra de negócio ou de autenticação. `message` e `error` trazem o mesmo texto.
  - **`error` (required)**: `string`

    Mesmo conteúdo de `message`, mantido por compatibilidade.
  - **`message` (required)**: `string`

    Mensagem legível do erro.

**Example:**

```json
{
  "message": "Ocorreu um ou mais erros.",
  "errors": {
    "orders": [
      "(orders) é obrigatório."
    ]
  }
}
```

### 401 Token ausente, inválido, removido ou de outro ambiente.

**Content type:** `application/json`

*Schema `Error` is shown above.*

**Example:**

```json
{
  "message": "Token inválida!",
  "error": "Token inválida!"
}
```

### 409 A etiqueta não pode ser paga agora.

**Content type:** `application/json`

*Schema `Error` is shown above.*

**Example: noBalance**

Saldo insuficiente

```json
{
  "message": "Sem saldo na carteira! Utilize o app para recarregar a carteira ou pagar a etiqueta com cartão de crédito.",
  "error": "Sem saldo na carteira! Utilize o app para recarregar a carteira ou pagar a etiqueta com cartão de crédito."
}
```

**Example: alreadyPaid**

Etiqueta já paga

```json
{
  "message": "Pedido já comprado.",
  "error": "Pedido já comprado."
}
```

**Example: cancelled**

Etiqueta cancelada

```json
{
  "message": "Este pedido está cancelado e não pode ser pago. Para emitir uma nova etiqueta, crie um novo pedido.",
  "error": "Este pedido está cancelado e não pode ser pago. Para emitir uma nova etiqueta, crie um novo pedido."
}
```

**Example: labelLimitReached**

Limite de etiquetas em aberto

```json
{
  "message": "Não foi possível realizar a compra pois o limite de etiquetas disponível para esta conta foi atingido. Faça a postagem das etiquetas emitidas ou entre em contato com nosso suporte.",
  "error": "Não foi possível realizar a compra pois o limite de etiquetas disponível para esta conta foi atingido. Faça a postagem das etiquetas emitidas ou entre em contato com nosso suporte."
}
```

### 500 O pagamento não foi concluído. Também é a resposta quando o ID do pedido não existe.

**Content type:** `application/json`

*Schema `Error` is shown above.*

**Example:**

```json
{
  "message": "Não foi possível finalizar o pagamento tente pelo app ou entre em contato com o suporte",
  "error": "Não foi possível finalizar o pagamento tente pelo app ou entre em contato com o suporte"
}
```

## Schemas

- `Error` — shown above.
- `ValidationError` — shown above.

### ServiceId

**Type:** `integer`, possible values: `1, 2, 3, 17, 31, 33`

`1` PAC · `2` SEDEX · `17` Mini Envios · `3` Jadlog · `31` Loggi · `33` J\&T.

- `OrderTags` — shown above.
