Transações

Criar uma transação

Este endpoint cria uma nova transação de pagamento. Os métodos suportados na criação são cartão de crédito (credit), PIX (pix) e boleto (billet), com configurações flexíveis como captura automática ou

Visão Geral

Este endpoint cria uma nova transação de pagamento. Os métodos suportados na criação são cartão de crédito (credit), PIX (pix) e boleto (billet), com configurações flexíveis como captura automática ou manual, parcelamento, financiamento automático de juros, cupons empilháveis, split de marketplace, cobrança em nome de uma sub-conta (onBehalfOf), multa/juros/desconto no boleto e PIX com vencimento (cobv).

Precauções

ATENÇÃO! Por favor, leia estas informações importantes antes de usar este endpoint.

  • Métodos de Pagamento: na criação só são aceitos credit, pix e billet. Forneça todos os dados obrigatórios para o método escolhido (cartão para crédito; endereço de cobrança para boleto).
  • Dados Sensíveis: informações de cartão de crédito devem ser transmitidas com segurança. Recomenda-se sempre usar cartões tokenizados (payment.card.id) em vez de enviar os dados completos do cartão.
  • CVV não é persistido: o código de segurança é usado apenas na autorização e nunca é armazenado.
  • Webhooks: configure webhooks para receber as mudanças de status da transação — não faça polling.
  • Idempotência: utilize o header X-Idempotency-Key para evitar criação de transações duplicadas.

Idempotência

Para garantir que uma operação não seja executada mais de uma vez, utilize o header X-Idempotency-Key.

HeaderTipoObrigatórioDescrição
X-Idempotency-KeystringRecomendadoChave única para garantir idempotência da requisição. Recomendamos a utilização de UUIDs v4.

Ao incluir este header, você evita a criação de transações duplicadas caso ocorram problemas de comunicação ou timeouts. Se a mesma chave for enviada novamente dentro da janela de idempotência, o servidor retornará a resposta original da primeira requisição bem-sucedida, sem criar uma nova transação.

Comportamento:

  • Duas requisições idênticas com a mesma chave: apenas a primeira é processada; a segunda devolve a mesma resposta.
  • Se a primeira tentativa falhou com erro 5xx, uma nova tentativa com a mesma chave processa a transação.
  • Mesma chave com corpo diferente retorna erro 422 (Unprocessable Entity).

Definição do Valor da Transação

O campo amount (em centavos) é sempre obrigatório. Ele é o valor antes de descontos (originalAmount na resposta). Limites: mínimo 500 (R$ 5,00) e máximo 20.000.000 (R$ 200.000,00).

Opcionalmente, você pode enviar uma lista de items. Quando items é informado, a soma de unitPrice × quantity de todos os itens deve ser exatamente igual a amount — caso contrário a requisição é rejeitada com 422. Os items são uma itemização do carrinho; eles não substituem o amount.

Requisição

POST /v1/transactions

Exemplos de Requisição por Método de Pagamento

Cartão de Crédito com ID de Cartão

{
  "amount": 10000,
  "payment": {
    "method": "credit",
    "currency": "BRL",
    "capture": true,
    "installments": 3,
    "card": { "id": "card_1234567890" }
  },
  "customer": { "id": "cus_123456789" }
}

Cartão de Crédito com Dados Completos (cliente inline + carrinho)

O cliente pode ser enviado inline (sem id) — firstName, lastName e email são obrigatórios nesse caso; o cliente é localizado ou criado automaticamente antes da cobrança.

{
  "amount": 15000,
  "items": [
    { "name": "Produto Premium", "description": "Produto de alta qualidade", "unitPrice": 10000, "quantity": 1 },
    { "name": "Produto Medium", "description": "Produto de baixa qualidade", "unitPrice": 1000, "quantity": 5 }
  ],
  "payment": {
    "method": "credit",
    "currency": "BRL",
    "installments": 2,
    "card": {
      "holderName": "JOAO SILVA",
      "numbering": "4111111111111111",
      "expirationMonth": "12",
      "expirationYear": "2027",
      "securityCode": "123"
    }
  },
  "customer": {
    "firstName": "João",
    "lastName": "Silva",
    "email": "[email protected]",
    "document": { "type": "cpf", "number": "12345678900" },
    "telephone": { "countryCode": "55", "areaCode": "11", "number": "987654321" }
  }
}

Boleto Bancário

Para boleto, o endereço do pagador é obrigatório e vai em billing.address (não em customer). Informe um id de endereço salvo ou os campos inline postcode + street + number.

{
  "amount": 18900,
  "payment": {
    "method": "billet",
    "currency": "BRL",
    "billet": {
      "expiresInDays": 3
    }
  },
  "customer": {
    "firstName": "Maria",
    "lastName": "Souza",
    "email": "[email protected]",
    "document": { "type": "cpf", "number": "98765432100" },
    "telephone": { "countryCode": "55", "areaCode": "11", "number": "912345678" }
  },
  "billing": {
    "address": {
      "postcode": "01304-000",
      "street": "Rua Augusta",
      "number": "500",
      "district": "Consolação",
      "city": "São Paulo",
      "state": "SP",
      "country": "BR"
    }
  }
}

PIX

{
  "amount": 5000,
  "payment": {
    "method": "pix",
    "currency": "BRL",
    "pix": { "expiresInMinutes": 30 }
  },
  "customer": {
    "firstName": "Carlos",
    "lastName": "Ferreira",
    "email": "[email protected]",
    "document": { "type": "cpf", "number": "45678912300" }
  }
}

Boleto com multa, juros e descontos (billingInstructions)

O boleto aceita termos avançados em payment.billet.billingInstructions: multa por atraso (lateFee), juros (interest) e descontos por antecipação (discounts[]). Todos os offsets de data são relativos ao vencimento (não datas absolutas): startDays = dias após o vencimento; daysBeforeDue = dias antes. Valores em centavos; percentuais de 0 a 100.

{
  "amount": 18900,
  "payment": {
    "method": "billet",
    "billet": {
      "expiresInDays": 5,
      "billingInstructions": {
        "lateFee":  { "mode": "percentage", "percentage": 2, "startDays": 1 },
        "interest": { "mode": "monthlyPercentage", "percentage": 1 },
        "discounts": [
          { "mode": "percentage", "percentage": 10, "daysBeforeDue": 3 }
        ]
      }
    }
  },
  "customer": { "id": "cus_123456789" },
  "billing": { "address": { "id": "addr_123456789" } }
}

Se billingInstructions for omitido, a cobrança herda o default configurado na conta (definido nas configurações da empresa). Enviar o objeto na transação sobrescreve o default para aquela cobrança.

PIX com vencimento (cobv) — PIX datado com desconto

Enviar payment.pix.expiresInDays (em vez de expiresInMinutes) cria um PIX com vencimento (cobv): um PIX datado, como um boleto, que aceita somente discounts em billingInstructions. Exige um customer com nome + documento (CPF/CNPJ).

{
  "amount": 49900,
  "payment": {
    "method": "pix",
    "pix": {
      "expiresInDays": 5,
      "billingInstructions": {
        "discounts": [
          { "mode": "percentage", "percentage": 10, "daysBeforeDue": 3 }
        ]
      }
    }
  },
  "customer": {
    "firstName": "Carlos", "lastName": "Ferreira", "email": "[email protected]",
    "document": { "type": "cpf", "number": "45678912300" }
  }
}

PIX não aplica multa/juros — enviar lateFee/interest em pix.billingInstructions retorna 422. Para multa/juros, use boleto. O PIX cobv é processado via Banco Inter.

Com Cupons (Descontos Empilhados)

Aplique um ou mais cupons via o array discounts[]. Cada item é uma referência ao código de um cupom do catálogo: { "code": "SUMMER10" }. Os cupons empilham e compõem sequencialmente — a ordem importa, pois cada cupom desconta sobre o saldo que restou do anterior. O valor do desconto nunca é lido da requisição: ele é sempre resolvido a partir do cupom no catálogo (validade, limites de uso, escopo). Máximo de 20 cupons.

{
  "amount": 10000,
  "payment": { "method": "pix", "currency": "BRL" },
  "discounts": [
    { "code": "SUMMER10" },
    { "code": "WELCOME" }
  ],
  "customer": { "id": "cus_123456789" }
}

Os campos legados discount (objeto único) e coupon foram removidos — uma cobrança não pode mais carregar um desconto ad-hoc enviado na requisição. Use discounts[] com códigos do catálogo. Cupons inválidos (expirados, esgotados, fora de escopo) ou que deixem o valor abaixo do mínimo retornam HTTP 422 com error.code específico (ex.: couponExpired, couponUsageLimitReached, couponExceedsTotal, discountExceedsAmount).

Cobrança em nome de uma sub-conta (marketplace)

Plataformas de marketplace podem cobrar diretamente em nome de uma sub-conta que possuem, informando onBehalfOf com o publicId da sub-conta. A cobrança passa a ser feita na sub-conta (ela vira o merchant de registro — recebível, saldo e antifraude próprios) e a plataforma recolhe sua taxa de aplicação configurada como um split adicional. Veja Splits.

{
  "amount": 10000,
  "payment": { "method": "pix", "currency": "BRL" },
  "customer": { "id": "cus_123456789" },
  "onBehalfOf": "bus_subseller123"
}

Parâmetros da Requisição

Parâmetros Gerais

ParâmetroTipoObrigatórioDescrição
amountintegerSimValor total da transação em centavos, antes de descontos (mín. 500, máx. 20.000.000)
paymentobjectSimDados do pagamento (ver abaixo)
customerobjectSimCliente por id ou inline (ver abaixo)
billingobjectNão*billing.address — endereço do pagador (*obrigatório para boleto)
itemsarrayNãoItemização do carrinho (máx. 100). Se enviado, Σ(unitPrice×quantity) deve igualar amount
discountsarrayNãoCupons empilháveis (máx. 20). Cada item: { code } (código do cupom no catálogo)
splitsarrayNãoSplits de marketplace (máx. 10) — ver abaixo
onBehalfOfstringNãopublicId de uma sub-conta sua: cobra direto na sub-conta com taxa de aplicação da plataforma
geolocationobjectNãoSinais de geolocalização/dispositivo para antifraude (ipAddress, latitude, longitude, deviceFingerprint, userAgent, acceptLanguage)
shippingobjectNãoBloco de entrega persistido como está e devolvido na leitura
callbackobjectNãocallback.webhookUrl (url) + callback.active (default true): webhook específico desta transação
descriptionstringNãoDescrição livre (máx. 1000) — armazenada em metadata.description
externalReferencestringNãoIdentificador externo (máx. 255)
metadataobjectNãoMetadados livres
sourcestringNãoOrigem da transação (máx. 20). Default: api

Parâmetros de Pagamento (payment)

ParâmetroTipoObrigatórioDescrição
payment.methodstringSimMétodo: credit, pix ou billet
payment.currencystringNãoMoeda (apenas BRL). Default: BRL
payment.installmentsintegerNãoNúmero de parcelas, 1–21. Default: 1. (O máximo realmente ofertado é definido na conta e validado na cobrança — acima dele retorna 422 installmentsExceedMax.)
payment.capturebooleanNãoCaptura automática (true) ou manual/pré-autorização (false). Default: true. Aplica-se a crédito
payment.financeInstallmentsbooleanNãoDefault: true. Quando ligado, a API financia automaticamente o parcelamento, inflando o valor base para o total que o comprador pagaria com os juros configurados pelo vendedor (mesmo motor do simulador). Use false apenas se você já enviou o total financiado. Aplica-se a crédito com installments > 1

Cartão (payment.card) — para crédito

Forneça um cartão tokenizado (payment.card.id) ou os dados completos do cartão. Para method: "credit", um dos dois é obrigatório.

ParâmetroTipoObrigatórioDescrição
payment.card.idstringSim*ID do cartão tokenizado (card_...). *Alternativa aos dados completos
payment.card.holderNamestringSim**Nome do titular. **Se card.id não for enviado
payment.card.numberingstringSim**Número do cartão (validado por Luhn). **Se card.id não for enviado
payment.card.expirationMonthstring/integerSim**Mês de expiração (1–12). **Se card.id não for enviado
payment.card.expirationYearstring/integerSim**Ano de expiração. **Se card.id não for enviado
payment.card.securityCodestringSim**CVV (3–4 dígitos). **Se card.id não for enviado

Boleto (payment.billet)

ParâmetroTipoObrigatórioDescrição
payment.billet.expiresInDaysintegerNãoDias para expiração do boleto / vencimento (1–365). Se omitido, usa o default da conta
payment.billet.billingInstructionsobjectNãoMulta/juros/desconto — ver billingInstructions. Se omitido, herda o default da conta

PIX (payment.pix)

ParâmetroTipoObrigatórioDescrição
payment.pix.expiresInMinutesintegerNãoMinutos para expiração do PIX imediato (15–525600). Default do servidor: 30
payment.pix.expiresInDaysintegerNãoPresente ⇒ PIX com vencimento (cobv) — PIX datado (1–365), exige customer com documento. Ausente ⇒ PIX imediato
payment.pix.billingInstructionsobjectNãoSomente discounts (cobv). lateFee/interest no PIX → 422 (multa/juros são exclusivos do boleto)

billingInstructions — multa / juros / desconto

Disponível no boleto (multa + juros + desconto) e no PIX com vencimento/cobv (somente desconto). Os três blocos são opcionais e independentes. Valores em centavos; percentuais 0–100; offsets de data relativos ao vencimento.

lateFee (multa por atraso)

ParâmetroTipoObrigatórioDescrição
lateFee.modestringNão (default fixed)fixed (valor) ou percentage (% do boleto)
lateFee.amountintegerse mode=fixedValor fixo em centavos
lateFee.percentagenumberse mode=percentagePercentual 0–100
lateFee.startDaysintegerNãoDias após o vencimento para começar a cobrar (carência), 0–60. 0 = a partir do vencimento

interest (juros)

ParâmetroTipoObrigatórioDescrição
interest.modestringNão (default dailyAmount)dailyAmount (valor/dia), dailyPercentage (%/dia) ou monthlyPercentage (%/mês)
interest.amountintegerse mode=dailyAmountValor fixo por dia, em centavos
interest.percentagenumberse mode percentualPercentual 0–100
interest.startDaysintegerNãoDias após o vencimento para começar a cobrar, 0–60

discounts[] (descontos por antecipação) — 1 a 3 faixas

ParâmetroTipoObrigatórioDescrição
discounts[].modestringNão (default fixed)fixed (valor) ou percentage
discounts[].amountintegerse mode=fixedValor fixo em centavos
discounts[].percentagenumberse mode=percentagePercentual 0–100
discounts[].daysBeforeDueintegerNão (default 0)Dias antes do vencimento até quando o desconto vale, 0–365. 0 = até o vencimento

Por adquirente: a Zoop suporta tudo; o Banco Inter ignora a carência (startDays) e o juros dailyPercentage, e usa apenas a 1ª faixa de discounts no boleto (no PIX cobv aceita múltiplas).

Cliente (customer) — por ID ou inline

Forneça customer.id (cliente já cadastrado) ou dados inline. Para o caminho inline, firstName + lastName + email são obrigatórios; os demais campos são opcionais. O endereço do pagador não vai aqui — vai em billing.address.

ParâmetroTipoObrigatórioDescrição
customer.idstringSim*ID do cliente (cus_...). *Alternativa aos dados inline
customer.firstNamestringSim**Primeiro nome (mín. 2). **Se customer.id não for enviado
customer.lastNamestringSim**Sobrenome. **Se customer.id não for enviado
customer.emailstringSim**Email. **Se customer.id não for enviado
customer.document.typestringNãocpf, cnpj ou passport
customer.document.numberstringNãoNúmero do documento
customer.telephone.countryCodestringNãoCódigo do país
customer.telephone.areaCodestringNãoDDD
customer.telephone.numberstringNãoNúmero do telefone
customer.genderstringNãomale, female ou other
customer.birthdatestringNãoData de nascimento (YYYY-MM-DD)
customer.additionalEmailsarrayNãoEmails adicionais (máx. 20)
customer.externalReferencestringNãoReferência externa do cliente
customer.metadataobjectNãoMetadados do cliente

Endereço de cobrança (billing.address) — obrigatório para boleto

Forneça billing.address.id (endereço salvo) ou os campos inline. Para boleto, é obrigatório informar pelo menos postcode + street + number.

ParâmetroTipoDescrição
billing.address.idstringID de endereço salvo (addr_...)
billing.address.postcodestringCEP
billing.address.streetstringLogradouro
billing.address.numberstringNúmero
billing.address.complementstringComplemento
billing.address.districtstringBairro
billing.address.citystringCidade
billing.address.statestringEstado
billing.address.countrystringPaís (2–3 letras)

Itens (items[])

ParâmetroTipoObrigatórioDescrição
items[].namestringSimNome do item
items[].unitPriceintegerSimPreço unitário em centavos
items[].quantityintegerSimQuantidade (1–100.000)
items[].descriptionstringNãoDescrição
items[].currencystringNãoMoeda (BRL)
items[].variantIdstringNãoID de variante de produto
items[].imagesarrayNãoURLs de imagens (máx. 10)
items[].externalReferencestringNãoReferência externa do item
items[].metadataobjectNãoMetadados do item

Parâmetros de Split (marketplace)

Cada split aceita o formato em valor fixo (recipientId + amountCents) ou o formato tipado (recipient + type + value). Máximo de 10 splits; a soma não pode exceder o valor cobrado.

ParâmetroTipoDescrição
splits[].recipientId ou splits[].recipientstringpublicId da empresa destinatária
splits[].amountCentsintegerValor fixo do split em centavos
splits[].typestringpercentage ou flat (alternativa a amountCents)
splits[].valuenumberPercentual (≤ 100) ou valor, conforme type

3D Secure / cartão de débito / Nupay: o endpoint de criação não aceita um bloco threeDSecure, nem os métodos debit/nupay. (nupay é aceito apenas como filtro em Listar.)

Resposta

Sucesso (HTTP 201 Created)

Transações retidas para análise de fraude podem retornar HTTP 202 com status: "fraud-review".

{
  "id": "tra_987654321",
  "customId": "E5D4C3B2A1",
  "amount": 9500,
  "originalAmount": 10000,
  "status": "approved",
  "method": "credit",
  "currency": "BRL",
  "payment": {
    "provider": "selectwin",
    "version": "1.1",
    "refused": null,
    "reusable": false,
    "billetUrl": null,
    "billetBarcode": null,
    "billetSequence": null,
    "billetDocumentNumber": null,
    "billetReferenceNumber": null,
    "pixQrCodeEmv": null,
    "pixQrCodeUrl": null,
    "pixQrCodeImage": null,
    "acquirerTransactionNumber": "9876543210987654321098765432",
    "cardFirstDigits": "553121",
    "cardLastDigits": "4567",
    "cardBrand": "Mastercard",
    "cardRegistered": true,
    "installments": 3,
    "expirationDate": null,
    "paidAt": "2026-03-10T14:23:45.000Z",
    "allowRenewPayment": false,
    "invoiceLink": "https://selectwin.io/invoices/tra_987654321"
  },
  "discount": {
    "value": 500,
    "type": "percentage",
    "percentageOfAmount": 5
  },
  "discounts": [
    {
      "source": "coupon",
      "couponId": 4821,
      "code": "SUMMER10",
      "type": "percentage",
      "value": 5,
      "appliedAmount": 500
    }
  ],
  "customer": {
    "id": "cus_987654321",
    "firstName": "Maria",
    "lastName": "Silva",
    "email": "[email protected]",
    "birthdate": "1985-06-12",
    "gender": "female",
    "document": { "type": "cpf", "number": "98765432100" },
    "telephone": {
      "countryCode": "55",
      "areaCode": "11",
      "number": "987654321",
      "line": "5511987654321"
    },
    "available": true,
    "delinquent": false,
    "externalReference": "Store_Ref_54321",
    "additionalEmails": ["[email protected]"],
    "metadata": { "segment": "premium" },
    "updatedAt": "2026-03-05T10:20:48.000Z",
    "createdAt": "2026-01-15T08:30:48.000Z"
  },
  "billing": {
    "address": {
      "id": "addr_987654321",
      "ownerId": "cus_987654321",
      "ownerType": "customer",
      "street": "Avenida Paulista",
      "number": "2000",
      "complement": "Apto 501",
      "district": "Bela Vista",
      "city": "São Paulo",
      "state": "SP",
      "postcode": "01310200",
      "country": "BR",
      "latitude": "-23.5489",
      "longitude": "-46.638821",
      "line": "Avenida Paulista, 2000 - Apto 501, Bela Vista, São Paulo - SP, 01310200, BR",
      "line1": "Avenida Paulista, 2000",
      "line2": "Apto 501",
      "line3": "Bela Vista",
      "updatedAt": "2026-03-05T10:15:22.745Z",
      "createdAt": "2026-01-15T08:30:48.000Z"
    }
  },
  "shipping": null,
  "externalReference": "pedido_loja_9876",
  "shippable": true,
  "spplited": false,
  "items": [
    {
      "id": "item_987654321",
      "name": "Produto Premium",
      "unitPrice": 10000,
      "quantity": 1,
      "currency": "BRL",
      "description": "Produto de alta qualidade",
      "images": ["https://selectwin.io/assets/produto_premium.png"],
      "isUpsell": false,
      "isOrderbump": false,
      "metadata": { "sku": "PRM-001" },
      "variantId": null,
      "externalReference": null,
      "updatedAt": "2026-03-10T14:20:48.000Z",
      "createdAt": "2026-03-10T14:20:48.000Z"
    }
  ],
  "receivables": [
    {
      "id": "rec_987654321",
      "recipient": "bus_987654321",
      "split": null,
      "status": "paid",
      "amount": 9500,
      "grossAmount": 9500,
      "anticipationFee": 0,
      "installmentNumber": 1,
      "description": null,
      "currency": "BRL",
      "authorizationCode": "AUTH123456",
      "paidAt": "2026-03-10T14:25:30.000Z",
      "refundedAt": null,
      "canceledAt": null,
      "expectedOn": "2026-03-10T14:25:30.000Z",
      "liable": true,
      "chargeProcessingFee": true,
      "updatedAt": "2026-03-10T14:25:30.000Z",
      "createdAt": "2026-03-10T14:23:45.000Z"
    }
  ],
  "splits": null,
  "refunds": null,
  "disputes": null,
  "timeline": [
    {
      "id": "tl_123",
      "message": "Transaction approved",
      "details": null,
      "type": "status_change",
      "updatedAt": "2026-03-10T14:23:45.000Z",
      "createdAt": "2026-03-10T14:23:45.000Z"
    }
  ],
  "callback": {
    "webhookUrl": "https://meucomercio.com.br/webhook/notifications",
    "active": true
  },
  "metadata": {
    "source": "mobile_app",
    "campaign": "promo_verao_2026"
  },
  "processingTimeMs": 5523,
  "updatedAt": "2026-03-10T14:24:15.000Z",
  "createdAt": "2026-03-10T14:23:45.000Z",
  "merchant": {
    "name": "Seller Name",
    "merchantId": "bus_1234567890",
    "isSubAccount": false
  },
  "_links": {
    "self": {
      "href": "https://api.selectwin.io/v1/transactions/tra_987654321",
      "method": "GET",
      "description": "Read a transaction."
    },
    "refund": {
      "href": "https://api.selectwin.io/v1/transactions/tra_987654321/refund",
      "method": "POST",
      "description": "Refund the transaction."
    },
    "capture": {
      "href": "https://api.selectwin.io/v1/transactions/tra_987654321/capture",
      "method": "POST",
      "description": "Capture the transaction."
    }
  }
}

Notas sobre a resposta

  • amount é o valor cobrado (após descontos/financiamento); originalAmount é o valor antes de descontos.
  • payment.version é "1.1" e payment.provider é "selectwin".
  • payment.pixQrCodeImage é sempre null (a API não gera imagem; use pixQrCodeEmv para renderizar o QR ou pixQrCodeUrl).
  • discount é o bloco legado consolidado ({ value, type, percentageOfAmount }), e discounts[] é o detalhamento por cupom aplicado ({ source, couponId, code, type, value, appliedAmount }). Ambos podem ser null quando não há desconto.
  • O customer da transação traz os dados do comprador, mas não embute as listas addresses/cards — para isso use GET /v1/customers/:id.
  • billing.address é um objeto aninhado dentro de billing (todos os campos podem ser null quando não há endereço).
  • processingTimeMs é o tempo de processamento do nosso backend para a cobrança, em milissegundos (de createdAt até o primeiro resultado do adquirente ser registrado). Vem null enquanto o resultado ainda não chegou e é carimbado uma única vez, no primeiro resultado — o mesmo valor aparece na leitura e no webhook transaction.*.
  • _links traz self, refund e capture.

Melhores Práticas

  1. Use cartões tokenizados (payment.card.id) sempre que possível.
  2. Utilize externalReference para rastrear a transação em seus sistemas.
  3. Reaja a webhooks para acompanhar mudanças de status — não faça polling.
  4. Defina expiração adequada para PIX e boleto.
  5. Use X-Idempotency-Key em toda criação para evitar duplicidades.
  6. Para captura manual, envie payment.capture: false e capture depois via Capturar.

How is this guide?

On this page