Pix2DePix

Referência da API

Gerada de openapi.json — versão 1.0.0.

Gere cobranças Pix na sua plataforma e receba DePix.

O ponto que muda a sua integração: existe um atraso antifraude entre o Pix ser pago e o DePix ser liquidado. Uma cobrança paga fica em paid_pending_settlement antes de chegar a settled. Libere produto em settled, não em paid_pending_settlement.

Todos os valores são inteiros, em centavos de real.

Base: https://api.pix2depix.com

Autenticação

Authorization: Bearer p2d_live_... em produção, p2d_test_... em sandbox. Gere no painel, em API. O segredo aparece uma única vez.

Endpoints

GET /v1/charges

Lista cobranças

Ordenadas da mais recente para a mais antiga. A paginação é por cursor: passe em startingAfter o id da última cobrança da página anterior.

ParâmetroOndeObrigatórioDescrição
externalIdquerynãoO id do pedido no seu sistema.
statusquerynão
createdAfterquerynão
createdBeforequerynão
startingAfterquerynãoid da última cobrança da página anterior.
limitquerynão

Respostas

CódigoSignifica
200Uma página de cobranças
400Parâmetro inválido
401Chave ausente, inválida ou revogada
429Limite atingido

POST /v1/charges

Cria uma cobrança

Devolve o QR Code e o copia-e-cola.

201 quando a cobrança nasce agora. 200 quando o mesmo externalId (ou a mesma Idempotency-Key) já tinha criado esta cobrança com o mesmo corpo — repetir a criação não duplica nada nem vira erro.

ParâmetroOndeObrigatórioDescrição
Idempotency-KeyheadernãoRetry seguro de rede. Se a resposta se perder, repita a requisição com a mesma chave: você recebe a cobrança original em vez de uma segunda.

Corpo

CampoTipoObrigatórioDescrição
amountInCentsintegersimValor bruto em centavos. Mínimo 1000 (R$ 10,00), máximo 500000 (R$ 5.000,00).
payerTaxNumberstringsimCPF ou CNPJ de quem vai pagar. Com ou sem pontuação. Obrigatório: é o provedor de Pix que exige, para identificar o pagador.
payerNamestringnãoNome de quem vai pagar. Não é conferido — depois do pagamento devolvemos o nome que o banco informou.
externalIdstringnãoO id do pedido no seu sistema. Opcional, mas é o que torna a criação idempotente: o mesmo valor nunca vira duas cobranças.
descriptionstringnãoSome na resposta e nos eventos. Não vai para o extrato do pagador.
metadataobjectnãoPares livres, devolvidos em toda resposta e em todo evento.
{
  "amountInCents": 25000,
  "payerTaxNumber": "529.982.247-25",
  "payerName": "Maria Silva",
  "externalId": "pedido-8891",
  "description": "Pedido #8891",
  "metadata": {
    "loja": "sp-01"
  }
}

Respostas

CódigoSignifica
200Cobrança já existia com este externalId e o mesmo corpo
201Cobrança criada
400Corpo inválido (invalid_request)
401Chave ausente, inválida ou revogada
402O provedor de Pix recusou (provider_error)
403Conta não liberada para cobrar (merchant_not_activated, charge_blocked, missing_merchant_id)
409external_id_conflict (mesmo externalId, corpo diferente), idempotency_key_conflict ou charge_processing (a original ainda está sendo criada — repita em 1s)
429Limite por chave atingido (rate_limited)

GET /v1/charges/{id}

Consulta uma cobrança

Confirme por aqui antes de liberar produto. O webhook é o aviso rápido; esta rota é a verdade.

ParâmetroOndeObrigatórioDescrição
idpathsimO id que devolvemos na criação.

Respostas

CódigoSignifica
200A cobrança
401Chave ausente, inválida ou revogada
404Não existe nesta conta e neste ambiente (charge_not_found)
429Limite atingido

POST /v1/charges/{id}/cancel

Cancela uma cobrança não paga

Só antes do pagamento.

⚠️ O QR Code continua tecnicamente pagável depois do cancelamento: nosso provedor de Pix não tem como invalidá-lo. Se o Pix cair mesmo assim, o pagamento vence e a cobrança volta a andar — você recebe charge.paid_pending_settlement como em qualquer outra. Tire o QR da frente do seu cliente ao cancelar.

ParâmetroOndeObrigatórioDescrição
idpathsim

Respostas

CódigoSignifica
200Cobrança cancelada
401Chave ausente, inválida ou revogada
404Não encontrada
409Já paga, expirada ou cancelada (charge_not_cancelable)
429Limite atingido

GET /v1/account

Dados do comerciante, plano e taxa vigente

A taxa vem do seu plano assinado. Se você trocar de plano, ela muda aqui e nas cobranças novas — não guarde percentual no seu código.

Respostas

CódigoSignifica
200A conta
401Chave ausente, inválida ou revogada

POST /v1/webhooks/test

Dispara um evento de teste

Manda um charge.test para a URL configurada no painel, assinado igual a um evento de verdade. Serve para validar o seu código de conferência de assinatura.

Respostas

CódigoSignifica
202Evento enfileirado
401Chave ausente, inválida ou revogada
404Nenhuma URL de webhook configurada para este ambiente

POST /v1/test/charges/{id}/advance

Empurra uma cobrança de teste para o estado pedido

Existe só com chave p2d_test_. É como você exercita a espera da liquidação e os webhooks sem um Pix de verdade. As transições respeitam a mesma máquina de estados da produção: voltar atrás é 409 invalid_transition.

ParâmetroOndeObrigatórioDescrição
idpathsim

Corpo

CampoTipoObrigatórioDescrição
statuspaid_pending_settlement | settled | expired | refundedsim
{
  "status": "paid_pending_settlement"
}

Respostas

CódigoSignifica
200A cobrança no novo estado
401Chave ausente, inválida ou revogada
403Chamada com chave de produção (not_available_in_live)
404Não encontrada
409A cobrança não pode ir para esse estado (invalid_transition)

Webhook

POST <sua URL>

Evento de cobrança

Enviamos para a URL que você configurou no painel a cada mudança de estado.

A entrega é at-least-once: o mesmo evento pode chegar mais de uma vez. Deduplique pelo campo id.

Responda 2xx rápido. Qualquer outra coisa — inclusive 3xx — conta como falha e entra na fila de retentativa, que insiste por até 24h com espera crescente.

ParâmetroOndeObrigatórioDescrição
X-P2D-Event-IdheadersimId do evento. É por ele que você deduplica.
X-P2D-Event-Typeheadersim
X-P2D-TimestampheadersimEpoch em segundos. Recuse o que estiver a mais de 300s do seu relógio.
X-P2D-Signatureheadersimv1= + HMAC-SHA256 de <timestamp>.<corpo bruto> com o segredo do webhook, em hex.

Corpo

CampoTipoObrigatórioDescrição
idstringsimImutável. Deduplique por ele.
typecharge.awaiting_payment | charge.paid_pending_settlement | charge.settled | charge.expired | charge.canceled | charge.failed | charge.refunded | charge.testsim
createdAtstringsim
environmentlive | testsim
dataobjectsim

Respostas

CódigoSignifica
200Recebido. Qualquer 2xx serve.

Objetos

CriarCobranca

CampoTipoObrigatórioDescrição
amountInCentsintegersimValor bruto em centavos. Mínimo 1000 (R$ 10,00), máximo 500000 (R$ 5.000,00).
payerTaxNumberstringsimCPF ou CNPJ de quem vai pagar. Com ou sem pontuação. Obrigatório: é o provedor de Pix que exige, para identificar o pagador.
payerNamestringnãoNome de quem vai pagar. Não é conferido — depois do pagamento devolvemos o nome que o banco informou.
externalIdstringnãoO id do pedido no seu sistema. Opcional, mas é o que torna a criação idempotente: o mesmo valor nunca vira duas cobranças.
descriptionstringnãoSome na resposta e nos eventos. Não vai para o extrato do pagador.
metadataobjectnãoPares livres, devolvidos em toda resposta e em todo evento.

Cobranca

CampoTipoObrigatórioDescrição
idstringsimNosso id. 24 caracteres hexadecimais.
externalIdstringnão
statuscreated | awaiting_payment | paid_pending_settlement | settled | expired | canceled | failed | refundedsimVeja a tabela de status.
environmentlive | testsim
amountValoressimA taxa é uma parcela fixa por depósito mais um percentual do seu plano.
pixPixsim
settlementLiquidacaosimO caminho do dinheiro depois do pagamento.
payerobjectsim
descriptionstringnão
metadataobjectnão
createdAtstringsim
updatedAtstringsim

Valores

A taxa é uma parcela fixa por depósito mais um percentual do seu plano.

CampoTipoObrigatórioDescrição
grossInCentsintegersimO que o seu cliente paga no Pix.
feeBpsintegersimPercentual do plano em pontos-base. 199 = 1,99%.
feeFixedInCentsintegersimParcela fixa por depósito.
feeInCentsintegersimFixa + percentual.
netInCentsintegersimO que chega em DePix na sua carteira.

Pix

CampoTipoObrigatórioDescrição
qrCodestringnãoCopia-e-cola. É isto que vira QR Code na sua tela.
qrCodeImageUrlstringnãoImagem pronta do QR. Pode não vir — gere o QR do qrCode se preferir.
expiresAtstringnãoPassou disso, a cobrança vira expired.

Liquidacao

O caminho do dinheiro depois do pagamento.

CampoTipoObrigatórioDescrição
delayHoursintegernãoRetenção antifraude entre o Pix pago e o DePix liquidado.
estimatedAtstringnãoQuando o DePix deve sair. Só existe depois do pagamento — é a data que você mostra ao seu cliente.
paidAtstringnão
settledAtstringnão
blockchainTxIdstringnãoComprovante on-chain na Liquid. Só depois de settled.

ListaDeCobrancas

CampoTipoObrigatórioDescrição
dataCobranca[]sim
hasMorebooleansimSe true, peça a próxima página com startingAfter no id do último item.

Conta

CampoTipoObrigatórioDescrição
merchantIdstringsimSeu identificador no provedor de Pix.
emailstringsim
environmentlive | testsimO ambiente da chave que você usou.
planobjectsim
feeFixedInCentsintegersimParcela fixa por depósito.
limitsobjectsim
settlementDelayHoursintegersimRetenção antifraude aplicada às cobranças.
webhookobjectnão

Evento

CampoTipoObrigatórioDescrição
idstringsimImutável. Deduplique por ele.
typecharge.awaiting_payment | charge.paid_pending_settlement | charge.settled | charge.expired | charge.canceled | charge.failed | charge.refunded | charge.testsim
createdAtstringsim
environmentlive | testsim
dataobjectsim

Erro

O formato é o mesmo em todos os endpoints e em todos os códigos HTTP.

CampoTipoObrigatórioDescrição
errorobjectsim