📌 Endpoint
POST /stores/:storeId/payments
Cria um pagamento para um ou mais produtos da loja.
🔐 Autenticação
Rota pública. A assinatura ativa do dono da loja é validada internamente.🧾 Parâmetros de rota
🧍 Body (JSON)
🧩 items[]
💳 Gateways suportados
O campogateway segue o padrão <PROVEDOR>_ORDER_<MÉTODO>:
Nota: o gateway precisa estar ativo na loja e com credenciais configuradas. A loja só recebe os métodos que habilitou nas credenciais (paymentMethods).
💳 Parcelamento no cartão
Para cobrar cartão em parcelas, informe o número de parcelas emmetadata.gateway.card.installmentCount:
- O número escolhido é o que vale — deve ficar entre
1e omaxInstallmentsconfigurado no gateway da loja (máximo 12). Se ultrapassar o limite, a API recusa com400 MAX_INSTALLMENTS_EXCEEDED; se for inválido (< 1 ou não inteiro),400 INVALID_INSTALLMENT_COUNT. - Quando o lojista configurou faixas de parcelas (
installmentFees) no gateway, a taxa da faixa que contém oinstallmentCountsubstitui a taxa plana defees.card— aplicada uma única vez sobre o total, que é então dividido igualmente pelas parcelas. Ex.: faixas 1x0% + R$ 0, 2–6x3,49% + R$ 0,49, 7–12x3,99% + R$ 0,49. - Aplicação na gateway: as gateways de cartão suportadas (Asaas e Mercado Pago) recebem o número de parcelas escolhido e dividem o total (taxa já embutida) igualmente nas N× em todos os fluxos — fatura hospedada ou cartão tokenizado. No Mercado Pago o checkout é limitado ao número escolhido (
max_installments). - Sem o campo, o cartão é cobrado à vista (1x) com a taxa plana de
fees.card(no Mercado Pago, até omaxInstallmentsdo lojista). - O
installmentCountfica registrado no pagamento emmetadata.gateway.card.installmentCount(junto degateway.FeePercentage/gateway.FeeAmount), permitindo rastrear em quantas vezes a venda foi parcelada. - Erros de parcelamento retornam somente o código (sem
message), seguindo o padrão da rota:
💳 Cartão transparente (tokenizado)
Para cobrar o cartão sem redirecionar o comprador, o frontend tokeniza os dados no navegador (SDK público da gateway, com a public key) e envia só o token emmetadata.card — os dados do cartão nunca passam pela API:
- O token também é aceito em
metadata.gateway.card.creditCardToken. As parcelas continuam emmetadata.gateway.card.installmentCount(validado contra omaxInstallmentsda loja). - Sem token, nada muda: o fluxo cai no checkout hospedado (redirect) como antes.
- Mercado Pago: com token, a API cobra direto (
POST /v1/payments) e responde seminit_point— vempaymentId,statusestatusDetail; o status final é acompanhado pela fila de verificação (consulta o payment na gateway). Opcional:paymentMethodIdeissuerId(o SDK do MP informa ambos). - Asaas: com token (
creditCardToken, oucreditCard+creditCardHolderInfo), cobra direto; sem token, gera a fatura hospedada (invoiceUrl/init_point). - Erro da gateway (ex.: token inválido) retorna
500 GATEWAY_ERRORcom o corpo do provedor — nenhuma cobrança é criada.
✅ Exemplo de requisição
💳 Exemplo com Asaas (PIX)
💳 Exemplo com Cartão parcelado (6x, Mercado Pago)
🧩 Snippet (cURL)
📦 Respostas
201 — Pagamento via gateway (PIX / Mercado Pago)
201 — Pagamento via gateway (Cartão / Mercado Pago)
201 — Pagamento via gateway (PIX / Asaas)
Para Asaas, acompanhe ostatus/idviametadata.gatewayno filtro de pagamentos (fila de verificação consulta a gateway diretamente). A fatura hospedada (invoiceUrl/init_point) permite ao comprador pagar por PIX, cartão ou boleto sem tokenização.