API REST v1
Integração estável para gateway, marketplace e plataforma
Crie cobranças Pix, consulte e concilie transações, leia saldo/extrato, faça saques Pix e receba webhooks assinados. O contrato importável é o OpenAPI disponível nesta página.
completed.URL base das integrações
Use exclusivamente https://droppayofc.net/api/v1. Não use endereços técnicos da hospedagem como base da API.
Se o erro for de DNS, revise a URL base. Se receber 401 ou 403 em JSON, verifique o token, o X-Client-ID, a aprovação Gateway e a permissão payments:write. Não envie tokens ao suporte.
Início rápido
Primeiro Pix
curl -X POST "https://droppayofc.net/api/v1/payments/pix" \
-H "Authorization: Bearer SEU_TOKEN" \
-H "X-Client-ID: SEU_CLIENT_ID" \
-H "Idempotency-Key: pedido-1042-pix" \
-H "Content-Type: application/json" \
-d '{
"amount": 49.90,
"payer_name": "Maria Souza",
"payer_email": "[email protected]",
"payer_cpf": "52998224725",
"payer_phone": "5511999999999",
"reference": "pedido-1042"
}'{
"success": true,
"data": {
"transaction_uuid": "9d3f1c1e-6a2b-4d7e-9a51-2f0c8b7e4a10",
"reference": "pedido-1042",
"merchant": { "id": 42, "name": "Gateway Exemplo", "email": "[email protected]", "document": "11222333000181", "phone": "5511999999999" },
"integration": { "client_id": "cli_gateway_01", "name": "Produção", "project": "Gateway Exemplo" },
"amount": 49.90,
"fee": 1.50,
"amount_net": 48.40,
"status": "pending",
"pix_code": "000201010212...",
"qr_code_base64": "data:image/svg+xml;base64,...",
"expires_at": "2026-10-25T23:30:00-03:00",
"expires_in_seconds": 86400
}
}Guarde transaction_uuid junto do pedido. O vencimento varia por adquirente: trate expires_at da resposta como fonte da verdade. Para confirmar pagamento use webhook deposit.completed ou GET /payments/{uuid}.
Segurança
Autenticação
Authorization: Bearer SEU_TOKEN
X-Client-ID: SEU_CLIENT_ID
Accept: application/json
Content-Type: application/jsonContrato novo
Envie sempre Bearer + X-Client-ID. Token deve ficar somente no servidor. Se houver IPs permitidos na credencial, chamadas de outros IPs recebem 403.
Compatibilidade
Integrações antigas que enviam somente o token ou usam X-API-Token continuam aceitas. Não use token na URL ou no corpo.
O mesmo token é o segredo dos webhooks. Ele é exibido no painel no momento da criação/rotação e deve ser tratado como segredo.
Contrato
Convenções e limites
Consultas, limites e segurança
Prefira webhooks para acompanhar os pagamentos. Se precisar consultar GET /payments/{uuid}, use intervalo de pelo menos 30 segundos. O GET retorna o estado salvo na Droppay sem esperar a adquirente. Para cobranças abertas, pode agendar uma verificação em segundo plano, com intervalo mínimo de 30 segundos e sem acumular jobs duplicados da mesma transação. Webhooks, jobs e conciliação agendada atualizam esse estado; a confirmação pode aparecer com atraso.
Em HTTP 429, respeite Retry-After e aumente o intervalo das tentativas. Os limites da API valem por IP, credencial e conta. A revogação ou expiração de uma credencial também impede o envio de seus webhooks ainda na fila.
URLs de webhook precisam usar HTTPS público. Redirecionamentos não são seguidos. As conexões validam o certificado TLS e usam os IPs públicos aprovados na resolução DNS. Webhooks legados de Shopify e WooCommerce estão indisponíveis; utilize os endpoints documentados da API v1.
Conta responsável e identificação para suporte
merchant identifica o cliente cadastrado na Droppay que é titular da operação: ID da conta, nome, e-mail, CPF/CNPJ e telefone do cadastro. A identidade é determinada pela conta da credencial autenticada, sem precisar reenviar esses dados em cada pedido.
integration informa o Client ID, nome da credencial e projeto de origem. Não inclui token, senha ou segredo. Nas transações, os rótulos registrados na criação são preservados; saques e links consultam a credencial vinculada atual. Dados não registrados podem ser null.
payer e payer_* continuam identificando o comprador que paga. reference é a referência do pedido/operação no seu gateway; não altera o titular da conta Droppay.
{
"merchant": {
"id": 42,
"name": "Gateway Exemplo",
"email": "[email protected]",
"document": "11222333000181",
"phone": "5511999999999"
},
"integration": {
"client_id": "cli_gateway_01",
"name": "Produção",
"project": "Gateway Exemplo"
},
"reference": "pedido-1042"
}Esses blocos acompanham criação e consulta de pagamentos, consultas de transações, saques, links de pagamento e os dados dos webhooks. O extrato JSON inclui merchant no nível principal; o CSV mantém seu formato anterior.
Para atendimento: informe o UUID Droppay (ou ID do saque), merchant.id, integration.client_id e a referência do seu sistema. O admin pode buscar esses identificadores e acessar os dados de contato da conta responsável.
Uma credencial representa uma conta cadastrada na Droppay. Os usuários internos do seu gateway não são identificados automaticamente como contas Droppay. Enviar merchant, merchant_id ou user_id no corpo não escolhe outro titular. Cada conta Droppay deve usar sua própria credencial.
Esta identificação serve à rastreabilidade da operação na Droppay. O nome do recebedor exibido no comprovante Pix ou no banco depende da adquirente e da conta recebedora; não é alterado por esses campos. Respostas e webhooks só contêm a identidade da própria conta autorizada.
Dinheiro
BRL como JSON number: 49.90. amount/amount_gross = bruto, fee = taxa, amount_net = líquido.
Idempotência
Em POST /payments/pix e POST /cashout/pix, envie Idempotency-Key (8–80 caracteres). Replay devolve idempotent_replay: true.
Referência
reference é seu ID de pedido/lojista. Volta em respostas/webhooks e pode filtrar transações e extrato.
Rate limit
Padrão: 120 req/min por token e teto adicional por conta; parceiros podem ter limite próprio. Também existe proteção por IP. Em 429 respeite Retry-After.
Datas
ISO 8601 nas respostas; filtros usam AAAA-MM-DD. Não calcule vencimento do Pix por conta própria: use expires_at.
Timeout
Use timeout de 30s. Em erro de rede/5xx, consulte/reuse a mesma Idempotency-Key antes de criar outra operação.
Receber
Cobrança Pix
Para cobrar o cliente final use sempre este endpoint.
https://droppayofc.net/api/v1/payments/pix| Campo | Tipo | Obrigatório | Descrição |
|---|---|---|---|
amount | decimal | Sim | Valor bruto em reais. A taxa é descontada no ato e amount_net é o valor efetivamente creditado. |
payer_name | string | Sim | Nome do pagador. |
payer_email | string | Sim | E-mail válido. |
payer_cpf | string | Sim | CPF ou CNPJ válido por dígito verificador. |
payer_phone | string | Não | DDD+número, opcionalmente com 55. Recomendado para compatibilidade entre adquirentes. |
description | string | Não | Descrição de até 500 caracteres. |
reference | string | Não | Seu ID externo, até 120 caracteres. |
webhook_url | string | Não | HTTPS público específico desta cobrança. |
settlement | string | Não | brl (padrão) ou usdt quando habilitado. |
splits | array | Não | Recebedores {email, percentage}; soma até 100%. |
pending. Nunca libere produto/serviço só porque o QR foi criado.Depósito próprio
POST /cashin/pix existe somente para colocar saldo na própria conta. O valor do Pix é bruto; a taxa é descontada e somente o líquido entra no saldo. Gateways e plataformas não devem usá-lo para cobranças de clientes.
Receber
Cartão de crédito
Disponível apenas para contas habilitadas.
https://droppayofc.net/api/v1/payments/credit-cardRespostas: 201 approved; 202 requires_authentication ou processing; 402 declined. Nunca grave número completo ou CVV. Em 3DS, confirme o resultado pela consulta/webhook, não pela URL de retorno.
https://droppayofc.net/api/v1/payments/{transaction_uuid}/refundEnvie {"amount": 50.00} para parcial ou corpo vazio para total.
Checkout hospedado
Link de pagamento
https://droppayofc.net/api/v1/payment-links| Campo | Tipo | Obrigatório | Descrição |
|---|---|---|---|
amount | decimal | Sim | Valor em reais, mínimo 1. |
description | string | Sim | Descrição, 2 a 120 caracteres. |
methods | array | Não | pix e/ou credit_card. |
max_installments | integer | Não | 1 a 12. |
success_url / cancel_url | url | Não | HTTPS público. |
webhook_url | url | Não | HTTPS público específico do link. |
expires_in_minutes | integer | Não | 5 a 43200. Padrão 1440. |
single_use | boolean | Não | Padrão true. |
external_reference | string | Não | Seu código externo. |
https://droppayofc.net/api/v1/payment-links/{id}https://droppayofc.net/api/v1/payment-links/{id}Status: active, paid, expired ou cancelled. Um link pago não pode ser cancelado.
Liquidação
Pix convertido em USDT
Quando habilitado para a conta, envie "settlement":"usdt" em POST /payments/pix. A consulta da cobrança traz o bloco settlement. A confirmação do Pix continua sendo deposit.completed; entrega cripto usa crypto_settlement.completed.
Marketplace
Split de pagamento
{
"amount": 100.00,
"payer_name": "Maria Souza",
"payer_email": "[email protected]",
"payer_cpf": "52998224725",
"splits": [
{"email": "[email protected]", "percentage": 20}
]
}Recebedores precisam ser contas aprovadas. E-mails não podem repetir e a soma não pode superar 100%. O split é calculado sobre o líquido após a taxa da Droppay.
Conciliação
Consultar, listar, saldo e extrato
https://droppayofc.net/api/v1/payments/{transaction_uuid}Fonte da verdade para uma cobrança. Se estiver aberta, a Droppay tenta conferir a adquirente antes de responder.
https://droppayofc.net/api/v1/transactions?status=completed&type=pix&reference=pedido-1042&per_page=50Filtros aceitos: status, type (pix|credit), start_date, end_date, reference, page e per_page (1–100).
https://droppayofc.net/api/v1/transactions/{transaction_uuid}https://droppayofc.net/api/v1/balanceavailable_for_withdrawal considera dívida de MED/chargeback e reserva de parceiro. Consultar saldo também pode reconciliar pendências recentes, no máximo uma vez por minuto por conta.
https://droppayofc.net/api/v1/statement?from=2026-10-01&to=2026-10-31&format=jsonJanela máxima de 31 dias; format=csv também é aceito. Cada linha traz bruto, taxa e líquido; o líquido é o valor realmente creditado ou enviado.
Pagar
Saque via Pix
Você informa o total que deseja retirar do saldo. A taxa é descontada no ato e somente o líquido é enviado para a chave Pix.
https://droppayofc.net/api/v1/cashout/pix| Campo | Tipo | Obrigatório | Descrição |
|---|---|---|---|
amount | decimal | Sim | Total a debitar do saldo (mínimo R$ 10,00). A taxa é descontada deste valor. |
pix_key | string | Sim | CPF, CNPJ, e-mail, telefone ou EVP. Validada antes de reservar saldo. |
pix_key_type | string | Não | CPF, CNPJ, EMAIL, PHONE ou EVP. Se omitido, a Droppay tenta inferir. |
reference | string | Não | Seu ID de cliente/pedido. |
webhook_url | url | Não | HTTPS público específico deste saque. |
Automático
Exige credencial em modo automático e IP de origem cadastrado. Aprovação da conta, limites e saldo são verificados antes do envio. Parceiros ativados pelo administrador com acesso à API liberado dispensam KYC cadastral.
Homologação
Postman, Insomnia, Thunder Client e bibliotecas HTTP são permitidos. User-Agent não é mecanismo de segurança.
amount=22.00 e a taxa calculada for R$ 3,99, a carteira é debitada em R$ 22,00 e o Pix enviado é de R$ 18,01.O saldo é reservado atomicamente para impedir duplo gasto. A adquirente é escolhida pelo roteamento; se a primeira estiver indisponível antes do envio, a próxima pode assumir. Em falha explícita, o valor volta ao saldo. Em resultado incerto, o saque fica em processamento para conferência — nunca é reenviado às cegas.
https://droppayofc.net/api/v1/withdrawals/{id}Alias compatível: GET /cashout/{id}. Campos principais: status, amount (líquido), amount_gross (total debitado), fee, payout_amount, pix_key, pix_key_type e reference.
Notificações
Webhooks
POST /seu-webhook HTTP/1.1
Content-Type: application/json
X-Webhook-Id: 7f89c866-8d5c-4b84-8b8b-2ff8b67c962a
X-Webhook-Event: deposit.completed
X-Webhook-Timestamp: 1792960200
X-Webhook-Signature-V2: t=1792960200,v1=...
X-Webhook-Signature: ...
{"id":"7f89c866-8d5c-4b84-8b8b-2ff8b67c962a","event":"deposit.completed","data":{"transaction_uuid":"...","status":"completed","amount":49.90,"fee":1.50,"amount_net":48.40},"created_at":"2026-10-25T23:30:00-03:00"}URL deve ser HTTPS pública e responder 2xx em até 10 segundos. Não seguimos redirects. Em erro de conexão ou 5xx, tentamos novamente em cerca de 60s, até 3 tentativas. 4xx é considerado rejeição definitiva.
| Evento | Uso |
|---|---|
deposit.completed | Cobrança confirmada; evento principal para liberar pedido. |
transaction.waiting_payment | Cobrança aguardando pagamento. |
transaction.failed | Cobrança encerrada; status é failed/cancelled e reason pode ser expired. |
transaction.refunded | Estorno de transação. |
transaction.chargeback | Contestação/MED/chargeback. |
withdrawal.pending | Saque criado/reservado. |
withdrawal.completed | Saque confirmado como pago. |
withdrawal.failed | Saque falhou/foi recusado e valor retornou ao saldo. |
crypto_settlement.completed | Liquidação cripto concluída. |
checkout.order_paid | Pedido de link/checkout pago. |
Eventos podem chegar fora de ordem ou repetidos. Guarde o X-Webhook-Id/id do evento e, em dúvida, consulte a operação pela API.
HMAC
Validar assinatura do webhook
- 1. Leia o corpo cru da requisição.
- 2. Leia
tev1em X-Webhook-Signature-V2. - 3. Calcule
HMAC-SHA256(token, t + "." + corpo)e compare em tempo constante. - 4. Recuse timestamps com diferença maior que 5 minutos e deduplique pelo ID do evento.
$raw = file_get_contents("php://input");
$header = $_SERVER["HTTP_X_WEBHOOK_SIGNATURE_V2"] ?? "";
preg_match("/t=(\d+),v1=([a-f0-9]{64})/i", $header, $m);
$timestamp = $m[1] ?? "";
$received = strtolower($m[2] ?? "");
if (!$timestamp || abs(time() - (int) $timestamp) > 300) { http_response_code(401); exit; }
$expected = hash_hmac("sha256", $timestamp . "." . $raw, getenv("DROPPAY_API_TOKEN"));
if (!hash_equals($expected, $received)) { http_response_code(401); exit; }
http_response_code(204);Máquina de estados
Status
| Cobrança | Significado |
|---|---|
pending | Criada/aguardando confirmação. |
waiting_payment | Aguardando pagamento. |
processing | Em conferência. |
completed | Pago e liquidado conforme regra da operação. |
failed | Recusado/falhou. |
cancelled | Cancelado ou expirado. |
refunded | Estornado. |
chargeback | Contestação/chargeback. |
mediation | Em análise de contestação. |
Expiração: o estado persistido é cancelled; quando o motivo for vencimento, o evento de falha traz reason: expired. Um Pix cancelado/expirado pode ser reaberto para completed se a adquirente comprovar pagamento posterior.
| Saque | Significado |
|---|---|
pending | Fila/manual ou aguardando tentativa. |
processing | Enviado ou em conferência. |
paid | Pago. |
rejected | Recusado; saldo devolvido. |
failed | Falha; saldo devolvido. |
cancelled | Cancelado; saldo devolvido. |
Por indisponibilidade operacional das adquirentes, um saque processing pode voltar a pending e ficar na fila administrativa sem devolver a reserva naquele instante.
Erros
Códigos HTTP
| Código | Uso | Ação |
|---|---|---|
| 200 | OK | Consulta/ação concluída ou replay idempotente. |
| 201 | Created | Operação criada. |
| 202 | Accepted | Cartão ainda requer ação/conferência. |
| 400 | Bad Request | Regra financeira/operacional impediu a operação. |
| 401 | Unauthorized | Credenciais ausentes/inválidas/expiradas. |
| 402 | Payment Required | Cartão recusado. |
| 403 | Forbidden | Aprovação, conta, IP ou recurso bloqueado. |
| 404 | Not Found | Recurso inexistente ou de outra conta. |
| 422 | Validation | Payload inválido. Veja errors. |
| 429 | Rate limit | Espere Retry-After. |
| 500 | Server error | Não crie outra operação às cegas; consulte/reuse idempotência. |
{"success":false,"message":"The given data was invalid.","errors":{"payer_cpf":["CPF/CNPJ inválido. Confira os dígitos do documento."]}}Exemplos
Polling seguro e saque
curl "https://droppayofc.net/api/v1/payments/TRANSACTION_UUID" \
-H "Authorization: Bearer SEU_TOKEN" \
-H "X-Client-ID: SEU_CLIENT_ID" \
-H "Accept: application/json"curl -X POST "https://droppayofc.net/api/v1/cashout/pix" \
-H "Authorization: Bearer SEU_TOKEN" \
-H "X-Client-ID: SEU_CLIENT_ID" \
-H "Idempotency-Key: saque-cliente-7788" \
-H "Content-Type: application/json" \
-d '{"amount":150.00,"pix_key":"[email protected]","pix_key_type":"EMAIL","reference":"cliente-7788"}'No exemplo de saque, R$ 150,00 é o total debitado do saldo; a resposta informa fee e payout_amount/amount líquidos. Se estiver exibindo a tela do Pix, consulte a cobrança a cada 5–10s. Para conciliação de backoffice prefira webhook e uma rotina periódica menos agressiva. Nunca use endpoints inexistentes como /pix, /me ou /wallet.
Produção
Checklist
- • Use Authorization Bearer + X-Client-ID e guarde o token somente no servidor.
- • Cadastre IP do servidor quando usar saque automático.
- • Use Idempotency-Key único por intenção de cobrança e por intenção de saque.
- • Envie payer_phone nas cobranças Pix quando possível e sempre CPF/CNPJ válido.
- • Guarde transaction_uuid e reference no seu pedido.
- • Considere expires_at da resposta como fonte da verdade do vencimento.
- • Libere pedido somente após completed/deposit.completed e confira o valor.
- • No saque, trate amount enviado como total debitado e payout_amount como líquido recebido na chave.
- • Valide X-Webhook-Signature-V2 e deduplique pelo ID do evento.
- • Aceite webhooks fora de ordem; em dúvida consulte GET /payments/{uuid}.
- • Em 429/5xx/timeout, aplique backoff e não duplique operações; reutilize a idempotência.
- • Teste Pix pago, Pix expirado, webhook indisponível, replay de criação, saque aprovado e saque recusado antes de abrir tráfego.
- • Importe o OpenAPI desta página no Postman/Insomnia/SDK e mantenha sua integração somente nas rotas documentadas.
Pronto para integrar?
Crie sua conta, aprove o cadastro e gere sua chave de API no painel.