POST /pagarme-create-order

https://auth.kleevopay.com/functions/v1/pagarme-create-order

Cria o pedido e processa o pagamento (cartão, Pix ou boleto).

🔑 Autenticação: nenhuma. Limite de requisições por IP.

Corpo da requisição

Principais campos:

CampoTipoObrigatórioDescrição
sellerIdstringsimID da sua loja na Kleevo
paymentMethodcredit_card | pix | boletosimForma de pagamento
amountCentsnumbersimValor total em centavos
currencystringsimSempre “BRL”
installmentsnumbernãoParcelas do cartão (1 até maxInstallments)
cardTokenstringse cartãoToken gerado no navegador com a publicKey — nunca envie o número do cartão para seu servidor
itemsarraysim[{ “productId”, “quantity” }]
customerobjetosimname, email, document (CPF/CNPJ), phone
address / billingAddressobjetocondicionalObrigatório para produto físico e sempre para cartão
shippingobjetocondicionalOpção de frete escolhida (veja Calcular frete)
checkoutAttemptIdstringrecomendadoIdentificador único da tentativa — evita cobrança duplicada se você reenviar a requisição

Exemplo de requisição

cURL

curl --request POST \
  --url https://auth.kleevopay.com/functions/v1/pagarme-create-order \
  --header 'content-type: application/json' \
  --data '{
    "sellerId": "uuid",
    "paymentMethod": "pix",
    "amountCents": 15000,
    "currency": "BRL",
    "installments": 1,
    "items": [{ "productId": "uuid", "quantity": 1 }],
    "customer": {
      "name": "Nome do cliente",
      "email": "cliente@email.com",
      "document": "00000000000",
      "phone": "11999999999"
    },
    "address": {},
    "shipping": {},
    "checkoutAttemptId": "attempt-uuid"
  }'

JavaScript

const response = await fetch(
  'https://auth.kleevopay.com/functions/v1/pagarme-create-order',
  {
    method: 'POST',
    headers: { 'content-type': 'application/json' },
    body: JSON.stringify({
      sellerId: 'uuid',
      paymentMethod: 'pix',
      amountCents: 15000,
      currency: 'BRL',
      installments: 1,
      items: [{ productId: 'uuid', quantity: 1 }],
      customer: {
        name: 'Nome do cliente',
        email: 'cliente@email.com',
        document: '00000000000',
        phone: '11999999999',
      },
      address: {},
      shipping: {},
      checkoutAttemptId: 'attempt-uuid',
    }),
  }
)

const order = await response.json()

Python

import requests

response = requests.post(
    "https://auth.kleevopay.com/functions/v1/pagarme-create-order",
    headers={"content-type": "application/json"},
    json={
        "sellerId": "uuid",
        "paymentMethod": "pix",
        "amountCents": 15000,
        "currency": "BRL",
        "installments": 1,
        "items": [{"productId": "uuid", "quantity": 1}],
        "customer": {
            "name": "Nome do cliente",
            "email": "cliente@email.com",
            "document": "00000000000",
            "phone": "11999999999",
        },
        "address": {},
        "shipping": {},
        "checkoutAttemptId": "attempt-uuid",
    },
)

order = response.json()

Resposta 200 (aprovado)

{
  "orderId": "uuid",
  "status": "paid",
  "statusToken": "token-opaco-para-consultar-status",
  "paymentMethod": "pix",
  "pix": { "qrCode": "...", "qrCodeUrl": "...", "expiresAt": "..." }
}

Resposta 400 (recusado)

{ "error": "Cartão recusado pela operadora.", "code": "PAYMENT_DECLINED", "retryable": true, "orderId": "uuid" }
💡 Importante: o valor, os produtos e o frete são sempre recalculados no nosso servidor a partir do que está cadastrado na sua loja. O amountCents enviado é apenas conferido contra esse recálculo — ele nunca é a fonte da verdade do valor cobrado. Reenviar a mesma requisição com o mesmo checkoutAttemptId nunca gera uma segunda cobrança.
🚫 Respostas de erro: seguem o formato padrão { “error”: “…” }, com code e retryable adicionais em recusas de pagamento.