Pular para o conteúdo
Painel

Atenção: Proposta provisória de contrato

Estes endpoints ainda não estão em operação e nenhum SDK foi publicado. Os exemplos usam apenas identificadores de teste e nada é enviado a lugar nenhum.

Pagamentos

Checkout

A KrokoPay hospeda a página de pagamento de cada cobrança e de cada link de pagamento. Envie o comprador para uma URL; o checkout cuida do Pix, do cartão, da sua marca e de todos os resultados.

O checkout é a página onde o comprador paga. Ele é hospedado pela KrokoPay, leva a sua marca e funciona com dois tipos de id: uma cobrança criada pela API ou um link de pagamento que você compartilha quantas vezes quiser. Você nunca renderiza campos de cartão, então os números de cartão nunca passam pelos seus servidores.

Como o checkout é aberto

Todo checkout fica em https://krokopay.app/pay/{id}. O id define o que o comprador vê:

  • chg_…: uma cobrança criada com POST /v1/charges. O checkout_url dela já aponta para cá. Uma cobrança, um pagamento.
  • plink_…: um link de pagamento. O url dele aponta para cá. Cada comprador que envia o formulário gera uma nova cobrança, com o link_id preenchido.
Padrões de URL do checkoutHTTP
# A charge created through the API (returned as checkout_url)https://krokopay.app/pay/chg_9Qs5MbT2kXn8Vd​# A payment link (returned as url): reusable, one charge per buyerhttps://krokopay.app/pay/plink_2Wn6HsT9cVb4Lq
Abrir o checkout a partir do seu siteTypeScript
// In the browser. Your own endpoint creates the charge with the secret key// and returns only its checkout_url.const response = await fetch("/api/orders/1042/checkout", { method: "POST" });if (!response.ok) throw new Error("Could not start the checkout");const { checkout_url } = (await response.json()) as { checkout_url: string };window.location.assign(checkout_url);

Sucesso: Nada para embutir

Redirecionar para a URL é toda a integração no front-end. Não é preciso tag de script, pacote nem chave publicável para abrir o checkout.

O que o comprador vê

  1. Passo 1: Sua marca e o pedido

    No topo, o nome de exibição, o quadro com as suas iniciais e o slogan; logo abaixo, a descrição e o valor em BRL.

  2. Passo 2: Um meio de pagamento

    Só os meios permitidos pela cobrança ou pelo link (methods).

  3. Passo 3: Pix

    Um QR Code e um código copia e cola, com contagem regressiva até o expires_at (15 minutos no ambiente de teste; o prazo em produção ainda será definido).

  4. Passo 4: Cartão

    Número, validade, CVC e nome do titular, validados no navegador antes do envio. Só a bandeira e os quatro últimos dígitos são guardados.

  5. Passo 5: Dados do pagador

    Nome e e-mail, usados para encontrar um cliente existente pelo e-mail ou criar um novo.

  6. Passo 6: O resultado

    Um comprovante quando o pagamento é aprovado, ou uma mensagem clara com o próximo passo quando ele não pode ser concluído.

Identidade visual

O checkout lê a sua marca nas configurações da conta, não na requisição. Altere uma vez em Configurações e todas as cobranças e links passam a usá-la.

ConfiguraçãoOnde aparece
Nome de exibiçãoNo cabeçalho do checkout e no comprovante.
Cor de destaqueNo botão principal e no meio de pagamento selecionado.
IniciaisUma ou duas letras exibidas no quadro do logotipo.
SloganLinha curta abaixo do nome. Opcional.
E-mail de suporteNo comprovante e nas telas de erro, para o comprador conseguir falar com você.
Informação: Escolha uma cor de destaque com contraste suficiente para texto branco: o checkout usa essa cor no botão de pagar.

Estados do checkout

A mesma URL mostra telas diferentes conforme o estado da cobrança ou do link por trás dela.

EstadoQuandoO que o comprador pode fazer
Aguardando pagamentoUma cobrança pending ou um link de pagamento ativo.Escolher um meio e pagar.
PagoA cobrança está paid (ou refunded e partially_refunded).Ver o comprovante. Abrir a URL de novo nunca cobra duas vezes.
RecusadoUma tentativa com cartão falhou; a cobrança está failed.Ver o motivo e, se a cobrança veio de um link, recomeçar pelo link.
ExpiradoUma cobrança Pix passou do expires_at sem pagamento.Recomeçar pelo link ou pedir uma nova cobrança a você.
IndisponívelO link de pagamento está inativo, ou o produto ou preço dele foi arquivado.Não há o que pagar; falar com o e-mail de suporte.
InválidoO id não existe.Não há o que pagar; conferir o link recebido.

Reproduza todos os estados com os cartões de teste abaixo (qualquer validade futura e qualquer CVC funcionam) ou deixando a contagem do Pix terminar. Mais detalhes em Ambiente de teste.

Cartão de testeResultado
4242 4242 4242 4242Aprovado: a cobrança passa para paid.
4000 0000 0000 0002Recusado com card_declined.
4000 0000 0000 9995Recusado com insufficient_funds.
4000 0000 0000 0069Recusado com expired_card.
4000 0000 0000 0127Recusado com incorrect_cvc.

Idioma do checkout

O checkout está disponível em inglês e em português do Brasil. O padrão vem da preferência de idioma do checkout em Configurações: auto segue o navegador do comprador, ou você pode fixar em en ou pt-br. Os valores aparecem sempre na moeda da cobrança (BRL), seja qual for o idioma.

Depois do pagamento

Quando o pagamento é confirmado, a cobrança passa para paid e a KrokoPay envia charge.paid para os seus endpoints de webhook. Libere o pedido a partir do webhook, não do navegador: o comprador pode fechar a aba antes de chegar a qualquer página sua.

charge.paidJSON
{  "id": "evt_6Ff7Gg8Hh9Ii0J",  "object": "event",  "type": "charge.paid",  "api_version": "2026-11-01",  "created_at": "2026-11-03T14:23:41.000Z",  "data": {    "object": {      "id": "chg_4Fp9KzW1xQm7Rt",      "object": "charge",      "amount": 49700,      "currency": "BRL",      "status": "paid",      "method": "pix",      "card": null,      "description": "Curso Identidade Visual do Zero",      "customer_id": "cus_8Hq2LmZr4TxN1a",      "product_id": "prod_3Vb7QpK9sWd2Ee",      "price_id": "price_5Kd1NcR8vYq3Hm",      "link_id": "plink_2Wn6HsT9cVb4Lq",      "subscription_id": null,      "fee": null,      "net": null,      "refunded_amount": 0,      "failure_code": null,      "created_at": "2026-11-03T14:22:05.000Z",      "paid_at": "2026-11-03T14:23:41.000Z",      "expires_at": "2026-11-03T14:37:05.000Z",      "available_at": null,      "checkout_url": "https://krokopay.app/pay/chg_4Fp9KzW1xQm7Rt"    }  }}

Atenção: Ainda não há campo de redirecionamento

Mandar o comprador de volta para uma URL sua depois do pagamento não faz parte da proposta atual e ainda será definido. Até lá, o comprador fica no comprovante do checkout; mostre o status do pedido no seu site com base nos seus próprios registros, atualizados pelos webhooks.
  • Tentativa recusada: charge.failed, com o failure_code na cobrança.
  • Pix não pago a tempo: charge.expired.
  • Pagar um link com preço recorrente também emite subscription.created. Veja Assinaturas.

Um link de pagamento é um checkout reutilizável: compartilhe o url dele por e-mail, em uma conversa ou num botão. Ele cobra um preço do catálogo (price_id) ou um valor fixo (amount).

Endpoint: POST/v1/payment_links

Parâmetros do corpo

namestringObrigatório
Título exibido no checkout.
descriptionstringOpcional
Texto curto abaixo do título.
price_idstringOpcional
Cobra um preço do catálogo. Obrigatório se amount não for enviado.
amountintegerOpcional
Valor fixo em centavos, quando não há price_id.
methodsstring[]Obrigatório
pix, card ou os dois.
curl -X POST https://api.krokopay.app/v1/payment_links \  -H "Authorization: Bearer kp_test_sk_4f9a2c7e1b8d4a6f9c3e5d7b" \  -H "Content-Type: application/json" \  -d '{    "name": "Curso Identidade Visual do Zero",    "price_id": "price_5Kd1NcR8vYq3Hm",    "methods": [      "pix",      "card"    ]  }'
curl -X POST https://api.krokopay.app/v1/payment_links \  -H "Authorization: Bearer kp_test_sk_4f9a2c7e1b8d4a6f9c3e5d7b" \  -H "Content-Type: application/json" \  -d '{    "name": "Consultoria — 1 hora",    "description": "Sessão online de uma hora.",    "amount": 25000,    "methods": [      "pix"    ]  }'
Endpoint: GET/v1/payment_links
curl https://api.krokopay.app/v1/payment_links \  -H "Authorization: Bearer kp_test_sk_4f9a2c7e1b8d4a6f9c3e5d7b"
Endpoint: POST/v1/payment_links/{id}

Atualiza name, description, methods ou active. As mudanças valem para o próximo comprador; cobranças já criadas mantêm o valor original.

Endpoint: DELETE/v1/payment_links/{id}

Remove um link. Se ele já tiver cobranças, o link é desativado (active: false) em vez de removido, para preservar o histórico, e a URL passa a mostrar o estado indisponível.

curl -X DELETE https://api.krokopay.app/v1/payment_links/plink_2Wn6HsT9cVb4Lq \  -H "Authorization: Bearer kp_test_sk_4f9a2c7e1b8d4a6f9c3e5d7b"