Introdução
Bem-vindo à documentação da API ONYXPAG. Nossa API permite que você integre recursos de processamento de pagamentos em seu aplicativo ou site de forma rápida e segura. Com ela, você pode criar cobranças, consultar transações e receber notificações em tempo real.
Informações Gerais
- ENDPOINT:
https://api.onyxpag.com - Versão: 2.0
- Formato: JSON
- Encoding: UTF-8
- Timeout: 30 segundos
PIX Instantâneo
Gere códigos PIX com QR Code em tempo real
Segurança
Autenticação via API Key com criptografia
Webhooks
Notificações automáticas de status
Relatórios
Consulte e liste todas as transações
Saques PIX
Solicite saques do seu saldo disponível
Autenticação
A API utiliza autenticação via Basic Authentication com suas chaves de API codificadas em Base64.
Obtenha suas Chaves
Acesse o painel administrativo para obter sua chave pública (pk_) e chave privada (sk_).
Combine as Chaves
Combine as chaves no formato: chave_publica:chave_privada
Codifique em Base64
Codifique a string combinada em Base64 e envie no header Authorization.
Formato de Autenticação
// 1. Combine suas chaves
const credentials = "pk_sua_chave_publica:sk_sua_chave_privada";
// 2. Codifique em Base64
const encodedCredentials = btoa(credentials);
// 3. Use no header Authorization
const headers = {
"Authorization": `Basic ${encodedCredentials}`,
"Content-Type": "application/json"
};
Headers Obrigatórios
Authorization: Basic cGtfc3VhX2NoYXZlX3B1YmxpY2E6c2tfc3VhX2NoYXZlX3ByaXZhZGE=
Content-Type: application/json
Exemplo Prático
Se suas chaves forem:
- Chave Pública:
pk_test_123456 - Chave Privada:
sk_test_789012
A string para codificar seria: pk_test_123456:sk_test_789012
Criar Pagamento
Endpoint para criar uma nova transação PIX.
https://api.onyxpag.com
Parâmetros da Requisição
| Campo | Tipo | Descrição |
|---|---|---|
amount |
number | Valor em reais (ex: 5.00) |
payment_method |
string | Método de pagamento ("pix") |
description |
string | Descrição do pagamento |
items |
array | Lista de itens da transação (opcional) |
customer |
object | Dados do cliente: name, email, document (CPF/CNPJ válido) e phone — todos obrigatórios. phone com DDD, 10 ou 11 dígitos (ex: "11999999999"; aceita +55 e formatação). Sem telefone, ou com menos de 10 dígitos, a cobrança pode ser recusada. |
metadata |
object | Dados personalizados (order_id, product_id, etc.) |
postbackUrl |
string | URL para receber notificações de webhook |
tracking |
object | Dados de rastreamento UTM (opcional) |
source_url obrigatório |
string | Obrigatório. URL (http/https) da página onde a transação foi originada (seu checkout/oferta). Identifica a procedência da transação. |
source_label |
string | Rótulo descritivo da origem, ex.: nome da oferta/produto (opcional). |
split |
object | Configuração de split de pagamento (opcional) |
Estrutura do Campo Split (Opcional)
O campo split permite dividir o valor líquido da transação entre a empresa principal e uma empresa secundária. Útil para cenários de marketplace, parcerias ou revenda.
| Campo | Tipo | Descrição |
|---|---|---|
empresa_id |
integer | ID da empresa que receberá a parcela do split |
p_split |
number | Percentual do valor líquido que a empresa secundária receberá (0-100) |
Estrutura do Campo Tracking (Opcional)
O campo tracking permite enviar dados de rastreamento de campanhas e origem do tráfego. Todos os subcampos são opcionais.
| Campo | Tipo | Descrição |
|---|---|---|
src |
string | Origem do tráfego (ex: "google", "facebook") |
utm_source |
string | Fonte da campanha (ex: "google", "newsletter") |
utm_medium |
string | Meio da campanha (ex: "cpc", "email", "social") |
utm_campaign |
string | Nome da campanha (ex: "black_friday", "lancamento") |
utm_term |
string | Termo da campanha (palavras-chave) |
utm_content |
string | Conteúdo da campanha (variação do anúncio) |
sck |
string | SCK para Goodtrack (opcional) |
client_reference_id |
string | Client Reference ID para Goodtrack (opcional) |
xcode |
string | XCode para Goodtrack (opcional) |
Estrutura do Campo Items
O campo items é opcional e permite especificar detalhes dos produtos/serviços da transação. Se não fornecido, será criado automaticamente um item com base na descrição.
| Campo | Tipo | Descrição |
|---|---|---|
title |
string | Nome do item/produto |
unitPrice |
integer | Preço unitário em centavos (500 = R$ 5,00) |
quantity |
integer | Quantidade do item |
tangible |
boolean | Se é produto físico (true) ou digital (false) |
Exemplo de Items
"items": [
{
"title": "Plano Pro",
"unitPrice": 2590,
"quantity": 1,
"tangible": false
},
{
"title": "Taxa de Setup",
"unitPrice": 500,
"quantity": 1,
"tangible": false
}
]
items não for fornecido, será criado automaticamente um item com base no campo description e valor total da transação.
Rastreamento de Campanhas
O campo tracking é completamente opcional e permite rastrear a origem das transações. Útil para:
- Medir performance de campanhas de marketing
- Identificar canais de aquisição mais efetivos
- Integrar com ferramentas de analytics (Xtracky, Utmfy, etc.)
- Otimizar investimentos em publicidade
Nota: Todos os subcampos de tracking são opcionais. Você pode enviar apenas os dados que forem relevantes para sua análise.
Origem da Transação (source_url)
Obrigatório. Envie o campo source_url com a URL da página onde a transação foi originada (a página de checkout/oferta do seu site em que o comprador iniciou o pagamento). Necessário para:
- Rastrear de qual link/oferta cada venda veio
- Segurança e conciliação (identificar a origem real de cada transação)
- Suporte mais rápido em caso de disputa ou análise
Opcionalmente, envie source_label com um nome descritivo da origem (ex.: o nome da oferta). Se sua chamada partir do navegador do comprador, o cabeçalho Origin/Referer também é capturado automaticamente.
Exemplo de Requisição (cURL)
curl -X POST "https://api.onyxpag.com" \
-H "Authorization: Basic cGtfdGVzdF8xMjM0NTY6c2tfdGVzdF83ODkwMTI=" \
-H "Content-Type: application/json" \
-d '{
"amount": 25.90,
"payment_method": "pix",
"description": "Compra de produto XYZ",
"items": [
{
"title": "Plano Pro",
"unitPrice": 2590,
"quantity": 1,
"tangible": false
}
],
"customer": {
"name": "João Silva",
"email": "joao.silva@email.com",
"document": "123.456.789-00",
"phone": "11999999999"
},
"metadata": {
"order_id": "12345",
"product_id": "789"
},
"postbackUrl": "https://seu-site.com/webhook/pagamentos",
"tracking": {
"src": "google",
"utm_source": "google",
"utm_medium": "cpc",
"utm_campaign": "black_friday_2024",
"utm_term": "produto_xyz",
"utm_content": "anuncio_1",
"sck": "sck_123456",
"client_reference_id": "ref_789",
"xcode": "xcode_abc"
},
"source_url": "https://sua-loja.com/checkout/oferta-xyz",
"source_label": "Oferta XYZ - Checkout"
}'
Exemplo de Requisição com Split (cURL)
curl -X POST "https://api.onyxpag.com" \
-H "Authorization: Basic cGtfdGVzdF8xMjM0NTY6c2tfdGVzdF83ODkwMTI=" \
-H "Content-Type: application/json" \
-d '{
"amount": 100.00,
"payment_method": "pix",
"description": "Venda Marketplace - Produto ABC",
"items": [
{
"title": "Produto ABC",
"unitPrice": 10000,
"quantity": 1,
"tangible": true
}
],
"customer": {
"name": "Maria Souza",
"email": "maria@email.com",
"document": "987.654.321-00",
"phone": "11988887777"
},
"metadata": {
"order_id": "98765",
"seller_id": "123"
},
"postbackUrl": "https://seu-site.com/webhook/pagamentos",
"split": {
"empresa_id": 123,
"p_split": 30
}
}'
Exemplo de Resposta
{
"success": true,
"data": {
"id": "PXB_68E6C0A14DC3D_1759953057",
"status": "pendente",
"amount": 5,
"payment_method": "pix",
"pix_code": "00020126860014br.gov.bcb.pix2564pix.bancoe2.com.br/qr/v3/at/afa55845-f3f2-4275-8b31-e4abd...",
"pix_qr_code": "iVBORw0KGgoAAAANSUhEUgAAAOwAAADsCAAAAABSuBXIAAAEn0lEQVR42u2dQXLjSAwE+f9Pcy9zmIkVUVltXw...",
"external_ref": "12345",
"created_at": "2025-10-08 19:50:57",
"expires_at": "2025-10-09 19:50:57",
"customer": {
"name": "João Silva",
"email": "joao.silva@email.com",
"document": "123.456.789-00",
"phone": "11999999999"
},
"metadata": {
"order_id": "12345",
"product_id": "789"
},
"split": {
"empresa_id": 123,
"p_split": 30,
"valor_split": null,
"valor_principal": null,
"processado": false
}
}
}
Campos de Split na Resposta
Quando o split é configurado na requisição, a resposta inclui:
empresa_id- ID da empresa secundáriap_split- Percentual configuradovalor_split- Valor do split (calculado após pagamento)valor_principal- Valor da empresa principal (calculado após pagamento)processado- Indica se o split já foi processado na compensação
Status Possíveis da Transação
| Status | Descrição |
|---|---|
| pendente | Pagamento criado e aguardando confirmação do cliente |
| pago | Pagamento confirmado e aprovado com sucesso |
| reembolsado | Pagamento foi estornado/reembolsado ao cliente |
Nota: Você receberá notificações via webhook sempre que o status da transação mudar.
Criar Pagamento com Cartão de Crédito
Endpoint para criar uma nova transação com cartão de crédito.
https://api.onyxpag.com
Parâmetros da Requisição
| Campo | Tipo | Obrigatório | Descrição |
|---|---|---|---|
amount |
number | Sim | Valor em reais (ex: 100.00) |
payment_method |
string | Sim | Deve ser "credit_card" |
installments |
integer | Sim | Número de parcelas (1 a 12) |
description |
string | Sim | Descrição do pagamento |
customer |
object | Sim | Dados do cliente |
card |
object | Sim | Dados do cartão de crédito |
postbackUrl |
string | Não | URL para receber notificações de webhook |
metadata |
object | Não | Dados personalizados (order_id, etc.) |
Estrutura do Campo Customer
| Campo | Tipo | Obrigatório | Descrição |
|---|---|---|---|
name |
string | Sim | Nome completo do cliente |
email |
string | Sim | Email do cliente |
document |
string | Sim | CPF ou CNPJ válido do cliente (apenas números). O documento é validado pelo dígito verificador — um CPF/CNPJ inválido faz a cobrança ser recusada. |
phone |
string | Sim | Telefone do cliente com DDD, 10 ou 11 dígitos (ex: "11999999999"). Pode vir com +55 e formatação. |
Estrutura do Campo Card
| Campo | Tipo | Obrigatório | Descrição |
|---|---|---|---|
number |
string | Sim | Número do cartão (16 dígitos) |
holder_name |
string | Sim | Nome impresso no cartão |
expiration_month |
string | Sim | Mês de validade (01-12) |
expiration_year |
string | Sim | Ano de validade (YYYY) |
cvv |
string | Sim | Código de segurança (3 ou 4 dígitos) |
Segurança
IMPORTANTE: Os dados do cartão são processados de forma segura e não são armazenados em nossos servidores. Utilize sempre HTTPS em suas requisições.
Exemplo de Requisição
curl -X POST "https://api.onyxpag.com" \
-H "Authorization: Basic cGtfdGVzdF8xMjM0NTY6c2tfdGVzdF83ODkwMTI=" \
-H "Content-Type: application/json" \
-d '{
"amount": 100.00,
"payment_method": "credit_card",
"installments": 3,
"description": "Compra de produto",
"customer": {
"name": "João Silva",
"email": "joao@example.com",
"document": "12345678900",
"phone": "11999999999"
},
"card": {
"number": "4111111111111111",
"holder_name": "JOAO SILVA",
"expiration_month": "12",
"expiration_year": "2026",
"cvv": "123"
},
"postbackUrl": "https://seusite.com/webhook",
"metadata": {
"order_id": "12345"
}
}'
Exemplo de Resposta (Sucesso)
{
"success": true,
"data": {
"id": "CC_695C9F3731CED_1767677751",
"status": "pago",
"amount": 10,
"payment_method": "credit_card",
"card_brand": "mastercard",
"card_last_digits": "4962",
"installments": 1,
"installment_amount": 10,
"authorization_code": "TEST480561",
"nsu": "NSU203601",
"tid": "TID157592201",
"created_at": "2026-01-06 13:35:51",
"customer": {
"name": "João Silva",
"email": "joao@example.com",
"document": "12345678900",
"phone": "11999999999"
},
"metadata": {
"order_id": "12345"
}
}
}
Exemplo de Resposta (Recusada)
{
"success": false,
"error": "Pagamento recusado",
"data": {
"id": "CC_695C9F3731CED_1767677752",
"status": "recusado",
"amount": 10,
"payment_method": "credit_card",
"card_brand": "mastercard",
"card_last_digits": "4962"
}
}
Status Possíveis da Transação com Cartão
| Status | Descrição |
|---|---|
| pendente | Transação criada e em processamento |
| pago | Transação aprovada pela adquirente |
| recusado | Transação recusada pela adquirente ou por análise de risco |
| reembolsado | Transação estornada/reembolsada ao cliente |
Nota: Os status são retornados diretamente da adquirente e padronizados pela API. Você receberá notificações via webhook quando o status mudar.
Pagamentos Globais
Cobre compradores fora do Brasil pelo mesmo endpoint das cobranças PIX, mudando apenas o payment_method. Há dois trilhos:
- México —
spei(transferência bancária via CLABE) eoxxo(pagamento em dinheiro na loja, com referência). Valor em pesos mexicanos (MXN); o crédito entra na sua conta em reais. - Internacional (checkout hospedado) —
internacional: cartão (com Apple Pay e Google Pay) e, em euro, Bizum e Klarna. Valor na moeda que você enviar; o crédito entra na sua carteira em dólar (USD). - Portugal —
mbway: pedido de pagamento enviado ao telemóvel do comprador, que aprova na app MB WAY. Sem checkout: você só informa o telefone. Valor em euro (EUR); o crédito entra na sua carteira em dólar (USD).
https://api.onyxpag.com
Resumo por país e método
| Região | Método | payment_method |
Moeda da cobrança | O comprador paga | Confirmação | Repasse (padrão) |
|---|---|---|---|---|---|---|
| México | SPEI | spei |
MXN | Transferência para a CLABE retornada | Webhook (assíncrona) | D+0 |
| México | OXXO | oxxo |
MXN | Referência em dinheiro na loja | Webhook (assíncrona) | D+5 |
| EUA e global | Cartão internacional, Apple Pay, Google Pay | internacional |
USD (padrão), EUR, GBP e outras com cotação | Checkout hospedado | Webhook (assíncrona) | D+3 |
| Espanha | Bizum | internacional + only_methods: ["bizum"] |
EUR | Checkout hospedado, confirma no app do banco | Webhook (assíncrona) | D+3 |
| Europa | Klarna | internacional + only_methods: ["klarna"] |
EUR | Checkout hospedado, fluxo da Klarna | Webhook (assíncrona) | D+3 |
| Portugal | MB WAY | mbway |
EUR | Aprova o pedido na app MB WAY do telemóvel (sem checkout) | Webhook (assíncrona) | D+3 |
| Portugal e Europa | Multibanco, SEPA, iDEAL | — | — | Indisponíveis no momento. Não estão habilitados no nosso processamento internacional; se forem enviados em only_methods a cobrança é recusada (HTTP 400). |
||
O prazo de repasse é configurado por conta pela equipe Onyxpag; os valores acima são os padrões. Prazo 0 ou 1 = disponível na confirmação; acima disso o líquido fica "a liberar" e entra no saldo automaticamente na data.
Moedas: como amount e currency funcionam
amounté sempre na moeda informada emcurrency.currency: "EUR"comamount: 50.00cobra exatamente € 50,00 do comprador. Nada é convertido na cobrança.- Sem
currency, a cobrança é em USD. - Sua carteira é em dólar: na confirmação, o valor bruto é convertido pela cotação do dia (fixada naquela venda) e devolvido no campo
amount_usddo webhook e da consulta. A taxa percentual incide sobre o valor em USD e a taxa fixa é em US$. - Moedas aceitas: USD, EUR, GBP, MXN, CAD, AUD, CHF e qualquer outra com cotação diária disponível. Moeda sem cotação devolve HTTP 400
"Moeda não suportada". - Métodos locais exigem a moeda deles: Bizum e Klarna só com EUR; MB WAY é sempre em EUR (o campo
currencyé ignorado). Cartão aceita qualquer moeda da lista. - SPEI e OXXO são sempre em MXN (o campo
currencyé ignorado nesses métodos).
México — SPEI e OXXO
Escolha entre spei (transferência via CLABE) e oxxo (pagamento em dinheiro com referência OXXO). O valor é cobrado em pesos mexicanos.
| Campo | Tipo | Obrigatório | Descrição |
|---|---|---|---|
amount | number | Sim | Valor em pesos mexicanos (ex: 350.00) |
payment_method | string | Sim | Deve ser "spei" ou "oxxo" |
customer | object | Sim | Dados do cliente (name, email, document) |
description | string | Não | Descrição do pagamento |
postbackUrl | string | Não | URL para receber notificações de webhook |
metadata | object | Não | Dados personalizados (order_id, etc.) |
Exemplo de Requisição (SPEI)
curl -X POST "https://api.onyxpag.com" \
-H "Authorization: Basic cGtfdGVzdF8xMjM0NTY6c2tfdGVzdF83ODkwMTI=" \
-H "Content-Type: application/json" \
-d '{
"amount": 350.00,
"payment_method": "spei",
"description": "Compra de produto",
"customer": {
"name": "Juan Pérez",
"email": "juan@example.com",
"document": "GODE561231GR8"
},
"postbackUrl": "https://seusite.com/webhook",
"metadata": {
"order_id": "12345"
}
}'
Resposta (SPEI — CLABE)
{
"success": true,
"data": {
"id": "PXB_6AB41D1E4720D_1790188830",
"status": "pendente",
"amount": "350.00",
"currency": "MXN",
"payment_method": "spei",
"external_ref": "12345",
"created_at": "2026-09-24 18:40:30",
"customer": { "name": "Juan Pérez", "email": "juan@example.com" },
"metadata": { "order_id": "12345" },
"spei": {
"clabe": "646180111812345678",
"bank": "STP",
"beneficiary": "ONYX",
"expires_at": "2026-09-25 18:40:30"
}
}
}
Resposta (OXXO — referência)
{
"success": true,
"data": {
"id": "PXB_6AB41D1E4720D_1790188831",
"status": "pendente",
"amount": "350.00",
"currency": "MXN",
"payment_method": "oxxo",
"external_ref": "12345",
"created_at": "2026-09-24 18:40:30",
"customer": { "name": "Juan Pérez", "email": "juan@example.com" },
"oxxo": {
"reference": "98765432109876",
"barcode_url": "https://.../barcode.png",
"bank": "OXXO",
"expires_at": "2026-09-27 18:40:30"
}
}
}
O que mostrar ao comprador e como confirmar
Apresente a clabe (SPEI) ou a reference / barcode_url (OXXO) e o expires_at. A cobrança nasce pendente; a confirmação chega na sua postbackUrl (transaction.paid) — nunca de forma síncrona. Depois de expires_at a referência deixa de ser pagável: trate a transação como expirada a partir desse horário.
Internacional — cartão, Bizum e Klarna (checkout hospedado)
A resposta devolve uma URL de checkout hospedado: redirecione o comprador para ela. O formulário seguro apresenta os métodos elegíveis para a moeda e o país dele (cartão com Apple Pay e Google Pay; em euro, também Bizum e Klarna). Você não manuseia dados de cartão e não precisa enviar telefone ou dados bancários: o próprio checkout pede o que cada método exigir.
| Campo | Tipo | Obrigatório | Descrição |
|---|---|---|---|
amount | number | Sim | Valor na moeda de currency (ex: 49.90) |
payment_method | string | Sim | Deve ser "internacional" |
currency | string | Não | Moeda da cobrança (ISO 4217): "USD" (padrão), "EUR", "GBP", "MXN"... Bizum e Klarna exigem "EUR". |
only_methods | array | Não | Restringe o checkout a métodos específicos: ["card"], ["bizum"] ou ["klarna"]. Sem este campo, o checkout mostra automaticamente os métodos elegíveis. Método não habilitado devolve HTTP 400. |
customer | object | Sim | name e email obrigatórios; document é opcional para o comprador internacional. |
description | string | Não | Descrição do pagamento |
postbackUrl | string | Não | URL para receber notificações de webhook |
metadata | object | Não | Dados personalizados (order_id, etc.) |
Exemplo de Requisição (cartão em USD)
curl -X POST "https://api.onyxpag.com" \
-H "Authorization: Basic cGtfdGVzdF8xMjM0NTY6c2tfdGVzdF83ODkwMTI=" \
-H "Content-Type: application/json" \
-d '{
"amount": 49.90,
"payment_method": "internacional",
"currency": "USD",
"description": "Global plan",
"customer": { "name": "John Buyer", "email": "john@example.com" },
"postbackUrl": "https://seusite.com/webhook",
"metadata": { "order_id": "12345" }
}'
Exemplo de Requisição (Bizum em EUR)
curl -X POST "https://api.onyxpag.com" \
-H "Authorization: Basic cGtfdGVzdF8xMjM0NTY6c2tfdGVzdF83ODkwMTI=" \
-H "Content-Type: application/json" \
-d '{
"amount": 50.00,
"payment_method": "internacional",
"currency": "EUR",
"only_methods": ["bizum"],
"description": "Pedido 12346",
"customer": { "name": "María García", "email": "maria@example.com" },
"postbackUrl": "https://seusite.com/webhook",
"metadata": { "order_id": "12346" }
}'
Resposta (sucesso)
{
"success": true,
"data": {
"id": "PXB_6AC512880F354_1791300232",
"status": "pendente",
"amount": "50.00",
"currency": "EUR",
"payment_method": "internacional",
"external_ref": "12346",
"created_at": "2026-10-06 12:23:52",
"customer": { "name": "María García", "email": "maria@example.com" },
"metadata": { "order_id": "12346" },
"international": {
"checkout_url": "https://pay.onyxpag.com/pay-intl.php?tx=PXB_6AC512880F354_1791300232"
}
}
}
Fluxo de integração
1. Crie a cobrança com payment_method: "internacional" (e currency / only_methods se precisar).
2. Redirecione o comprador para data.international.checkout_url. O link também é devolvido na consulta enquanto a cobrança estiver pendente.
3. O comprador paga na página hospedada: cartão é aprovado na hora; Bizum é confirmado no app do banco; Klarna segue o fluxo da Klarna.
4. Você recebe transaction.paid na sua postbackUrl, com amount na moeda cobrada e amount_usd (valor convertido que entrou na sua carteira). A confirmação não é síncrona.
Validade e abandono
A página de pagamento vale por 24 horas. Se o comprador não concluir, a cobrança é fechada automaticamente como expirado (até cerca de 2 horas após o vencimento). Para uma nova tentativa, crie uma nova cobrança. Cartão recusado ou pagamento que falhou vira recusada.
Portugal — MB WAY (pedido no telemóvel)
Não há página de pagamento: ao criar a cobrança, o comprador recebe um pedido de pagamento na app MB WAY do telemóvel informado em customer.phone e aprova por lá. Use quando você já coletou o telefone no seu próprio checkout. O valor é sempre em euro.
| Campo | Tipo | Obrigatório | Descrição |
|---|---|---|---|
amount | number | Sim | Valor em euros (ex: 25.00) |
payment_method | string | Sim | Deve ser "mbway" |
customer | object | Sim | name, email e phone obrigatórios. phone deve ser um telemóvel português (9 dígitos começando em 9, com ou sem +351: "912345678", "+351 912 345 678"). document é opcional. |
description | string | Não | Descrição do pagamento (aparece na app) |
postbackUrl | string | Não | URL para receber notificações de webhook |
metadata | object | Não | Dados personalizados (order_id, etc.) |
Exemplo de Requisição (MB WAY)
curl -X POST "https://api.onyxpag.com" \
-H "Authorization: Basic cGtfdGVzdF8xMjM0NTY6c2tfdGVzdF83ODkwMTI=" \
-H "Content-Type: application/json" \
-d '{
"amount": 25.00,
"payment_method": "mbway",
"description": "Pedido 12347",
"customer": {
"name": "Ana Silva",
"email": "ana@example.pt",
"phone": "+351 912 345 678"
},
"postbackUrl": "https://seusite.com/webhook",
"metadata": { "order_id": "12347" }
}'
Resposta (sucesso)
{
"success": true,
"data": {
"id": "MBW_6AC5A1F2C3D4E_1791336000",
"status": "pendente",
"amount": "25.00",
"currency": "EUR",
"payment_method": "mbway",
"external_ref": "12347",
"created_at": "2026-10-06 22:20:00",
"customer": { "name": "Ana Silva", "email": "ana@example.pt", "phone": "+351 912 345 678" },
"metadata": { "order_id": "12347" },
"mbway": {
"phone_notified": "+351912345678",
"message": "Confirme o pagamento na app MB WAY do seu telemóvel."
}
}
}
O que mostrar ao comprador e como confirmar
Mostre mbway.message e o número em mbway.phone_notified ("Abra a app MB WAY no +351 912 345 678 e aprove o pagamento de € 25,00"). O pedido vale poucos minutos: se o comprador não aprovar, a cobrança vira recusada (aviso do processador) e você precisa criar uma nova. A confirmação chega na sua postbackUrl (transaction.paid, com amount_usd) — nunca de forma síncrona. Telefone que não seja um telemóvel português válido devolve HTTP 400 antes de qualquer pedido ser enviado.
Status por método
| Status | SPEI / OXXO | Internacional (cartão, Bizum, Klarna) | MB WAY |
|---|---|---|---|
| pendente | Aguardando a transferência (SPEI) ou o pagamento na loja (OXXO). A referência vale até expires_at. |
Aguardando o comprador no checkout hospedado (válido por 24h). | Pedido enviado; aguardando aprovação na app (poucos minutos). |
| pago | Pagamento confirmado; transaction.paid enviado. |
Pagamento confirmado; transaction.paid enviado com amount_usd. |
Aprovado na app; transaction.paid enviado com amount_usd. |
| expirado | Não é marcado automaticamente: considere expirada após expires_at (a referência deixa de ser pagável). |
Checkout vencido ou abandonado (fechado automaticamente após as 24h). | Sem resposta do processador em 2h (rede de segurança; o normal é virar recusada). |
| recusada | — | Cartão recusado ou pagamento que falhou no processador. | Comprador recusou, não aprovou a tempo ou o telemóvel não tem MB WAY. |
| reembolsado | — | Estorno total confirmado pelo processador. | Estorno total confirmado pelo processador. |
Exemplos de webhook (postbackUrl)
A estrutura é a mesma do webhook PIX (veja Webhooks e PostbackURL). O que muda: currency e payment_method refletem a transação; no internacional, amount está na moeda cobrada e amount_usd traz o bruto convertido para a sua carteira; fee_amount e net_amount estão na moeda da sua carteira (USD no internacional, MXN no SPEI/OXXO).
SPEI pago
{
"event": "transaction.paid",
"timestamp": "2026-09-24T19:02:11-03:00",
"data": {
"transaction_id": "PXB_6AB41D1E4720D_1790188830",
"external_id": "12345",
"amount": "350.00",
"fee_amount": "24.47",
"net_amount": "325.53",
"currency": "MXN",
"payment_method": "spei",
"status": "paid",
"created_at": "2026-09-24T18:40:30-03:00",
"updated_at": "2026-09-24T19:02:11-03:00",
"paid_at": "2026-09-24T19:02:11-03:00",
"customer": { "name": "Juan Pérez", "email": "juan@example.com", "phone": null, "document": "GODE561231GR8" },
"items": [ { "title": "Compra de produto", "quantity": 1, "unit_price": "350.00" } ]
}
}
Internacional pago (cartão em USD)
{
"event": "transaction.paid",
"timestamp": "2026-10-06T12:31:40-03:00",
"data": {
"transaction_id": "PXB_6AC51286D0D4B_1791300230",
"external_id": "12345",
"amount": "49.90",
"fee_amount": "3.29",
"net_amount": "46.61",
"currency": "USD",
"payment_method": "internacional",
"amount_usd": "49.90",
"status": "paid",
"created_at": "2026-10-06T12:23:50-03:00",
"updated_at": "2026-10-06T12:31:40-03:00",
"paid_at": "2026-10-06T12:31:40-03:00",
"customer": { "name": "John Buyer", "email": "john@example.com", "phone": null, "document": null },
"items": [ { "title": "Global plan", "quantity": 1, "unit_price": "49.90" } ]
}
}
Internacional pago (Bizum em EUR)
{
"event": "transaction.paid",
"timestamp": "2026-10-06T12:35:02-03:00",
"data": {
"transaction_id": "PXB_6AC512880F354_1791300232",
"external_id": "12346",
"amount": "50.00",
"fee_amount": "3.66",
"net_amount": "52.39",
"currency": "EUR",
"payment_method": "internacional",
"amount_usd": "56.05",
"status": "paid",
"created_at": "2026-10-06T12:23:52-03:00",
"updated_at": "2026-10-06T12:35:02-03:00",
"paid_at": "2026-10-06T12:35:02-03:00",
"customer": { "name": "María García", "email": "maria@example.com", "phone": null, "document": null },
"items": [ { "title": "Pedido 12346", "quantity": 1, "unit_price": "50.00" } ]
}
}
No exemplo em EUR: € 50,00 convertidos a US$ 56,05 pela cotação do dia; taxa de 6% + US$ 0,30 sobre o valor em USD = US$ 3,66; líquido creditado US$ 52,39.
MB WAY pago (EUR)
{
"event": "transaction.paid",
"timestamp": "2026-10-06T22:23:10-03:00",
"data": {
"transaction_id": "MBW_6AC5A1F2C3D4E_1791336000",
"external_id": "12347",
"amount": "25.00",
"fee_amount": "1.98",
"net_amount": "26.04",
"currency": "EUR",
"payment_method": "mbway",
"amount_usd": "28.02",
"status": "paid",
"created_at": "2026-10-06T22:20:00-03:00",
"updated_at": "2026-10-06T22:23:10-03:00",
"paid_at": "2026-10-06T22:23:10-03:00",
"customer": { "name": "Ana Silva", "email": "ana@example.pt", "phone": "+351912345678", "document": null },
"items": [ { "title": "Pedido 12347", "quantity": 1, "unit_price": "25.00" } ]
}
}
Consultar Pagamento
Consulte o status de uma transação específica.
/transactions/{id}
Parâmetros da URL
| Parâmetro | Tipo | Descrição |
|---|---|---|
id |
string | ID único da transação (formato: PXB_xxxxx) |
Exemplo de Requisição
curl -X GET "https://api.onyxpag.com/transactions/PXB_68E6C0A14DC3D_1759953057" \
-H "Authorization: Basic cGtfdGVzdF8xMjM0NTY6c2tfdGVzdF83ODkwMTI=" \
-H "Content-Type: application/json"
Exemplo de Resposta
{
"success": true,
"data": {
"id": "PXB_68E6C0A14DC3D_1759953057",
"status": "pago",
"amount": 5,
"currency": "BRL",
"payment_method": "pix",
"created_at": "2025-10-08 19:50:57",
"paid_at": "2025-10-08 19:51:18",
"customer": {
"name": "João Silva",
"email": "joao.silva@email.com",
"document": "123.456.789-00",
"phone": "11999999999"
},
"metadata": {
"order_id": "12345",
"product_id": "789"
}
}
}
Pagamentos globais na consulta
currency é a moeda da cobrança (BRL, MXN, EUR no MB WAY ou a moeda enviada no internacional). No internacional e no MB WAY, a resposta traz também amount_usd (bruto convertido para a sua carteira, após o pagamento). No internacional, enquanto pendente, vem international.checkout_url para reenviar o comprador ao checkout; no MB WAY vem mbway.phone_notified (telemóvel que recebeu o pedido).
Aguardando pagamento
Pagamento confirmado
Transação cancelada
Verificar 3DS Secure
Verifique se o 3D Secure está ativo para sua empresa. O 3DS (3D Secure) é uma camada adicional de segurança para transações com cartão de crédito.
/?verificar_3ds
Headers Obrigatórios
| Header | Valor |
|---|---|
Authorization |
Basic {base64(chave_publica:chave_privada)} |
Resposta de Sucesso (200 OK)
{
"success": true,
"data": {
"empresa_id": 1,
"empresa_nome": "Minha Empresa LTDA",
"3ds_ativo": true,
"3ds_status": "ATIVO - Transações terão autenticação 3D Secure",
"configuracao_origem": "empresa"
}
}
Resposta - Empresa sem Adquirente Configurado
{
"success": true,
"data": {
"empresa_id": 1,
"empresa_nome": "Minha Empresa LTDA",
"3ds_ativo": false,
"mensagem": "Empresa não possui adquirente de cartão configurado"
}
}
Sobre o 3D Secure
- 3ds_ativo: Indica se o 3DS está ativo (true/false)
- 3ds_status: Mensagem descritiva do status atual
- configuracao_origem: Indica se a configuração vem da "empresa" ou "global"
- A configuração da empresa tem prioridade sobre a global
Valores Possíveis
| Campo | Valores | Descrição |
|---|---|---|
3ds_ativo |
true / false | Status final do 3DS para a empresa |
3ds_status |
String descritiva | "ATIVO - Transações terão autenticação 3D Secure" ou "INATIVO - Transações sem autenticação adicional" |
configuracao_origem |
"empresa" / "global" | Indica de onde vem a configuração aplicada |
Exemplo de Requisição
cURL
curl -X GET "https://api.onyxpag.com/?verificar_3ds" \
-H "Authorization: Basic cGtfbGl2ZV9hYmMxMjM6c2tfbGl2ZV94eXo3ODk=" \
-H "Content-Type: application/json"
JavaScript
const chavePublica = 'pk_live_abc123xyz';
const chavePrivada = 'sk_live_xyz789abc';
const credentials = btoa(`${chavePublica}:${chavePrivada}`);
fetch('https://api.onyxpag.com/?verificar_3ds', {
method: 'GET',
headers: {
'Authorization': `Basic ${credentials}`,
'Content-Type': 'application/json'
}
})
.then(response => response.json())
.then(data => {
if (data.success && data.data['3ds_ativo']) {
console.log('3D Secure está ATIVO');
console.log('Adquirente:', data.data.adquirente.nome);
} else {
console.log('3D Secure está DESATIVADO');
}
})
.catch(error => console.error('Erro:', error));
PHP
$chavePublica = 'pk_live_abc123xyz';
$chavePrivada = 'sk_live_xyz789abc';
$credentials = base64_encode("$chavePublica:$chavePrivada");
$ch = curl_init('https://api.onyxpag.com/?verificar_3ds');
curl_setopt($ch, CURLOPT_HTTPHEADER, [
'Authorization: Basic ' . $credentials,
'Content-Type: application/json'
]);
curl_setopt($ch, CURLOPT_RETURNTRANSFER, true);
$response = curl_exec($ch);
$data = json_decode($response, true);
curl_close($ch);
if ($data['success'] && $data['data']['3ds_ativo']) {
echo "3D Secure ATIVO\n";
echo "Adquirente: " . $data['data']['adquirente']['nome'] . "\n";
} else {
echo "3D Secure DESATIVADO\n";
}
Códigos de Erro
Credenciais de API inválidas
{
"error": "Invalid API credentials"
}
Erro interno do servidor
{
"error": "Internal server error: [mensagem]"
}
Consultar Empresa
Consulte os dados cadastrais da sua empresa autenticada. Esta rota retorna todas as informações da empresa, incluindo as chaves de API, mas não inclui o saldo.
/?empresa
Importante
Esta rota requer autenticação via Basic Auth. As credenciais devem ser válidas e a empresa deve estar com status ativo.
Headers Obrigatórios
| Header | Valor | Descrição |
|---|---|---|
Authorization |
Basic {base64} | Chaves codificadas em Base64 (public_key:private_key) |
Exemplo de Requisição
curl -X GET "https://api.onyxpag.com/?empresa" \
-H "Authorization: Basic cGtfdGVzdF8xMjM0NTY6c2tfdGVzdF83ODkwMTI=" \
-H "Content-Type: application/json"
Exemplo de Resposta (200 OK)
{
"success": true,
"data": {
"id": 117,
"codigo_cliente": "EMP252073",
"nome_empresa": "Minha Empresa LTDA",
"tipo_pessoa": "juridica",
"cnpj": "12.345.678/0001-90",
"cpf": null,
"email": "contato@minhaempresa.com",
"telefone": "11999999999",
"endereco": "Rua Exemplo, 123",
"cidade": "São Paulo",
"estado": "SP",
"cep": "01234-567",
"responsavel_nome": "João Silva",
"responsavel_email": "joao@minhaempresa.com",
"responsavel_telefone": "11988888888",
"chave_publica": "pk_live_abc123xyz",
"chave_privada": "sk_live_xyz789abc",
"status": "aprovado",
"created_at": "2025-01-01 10:00:00"
}
}
Campos Retornados
| Campo | Tipo | Descrição |
|---|---|---|
id |
integer | ID único da empresa |
codigo_cliente |
string | Código único do cliente (ex: EMP252073) |
nome_empresa |
string | Nome/Razão social da empresa |
tipo_pessoa |
string | Tipo de pessoa (fisica ou juridica) |
cnpj |
string|null | CNPJ da empresa (se tipo_pessoa = juridica) |
cpf |
string|null | CPF do responsável (se tipo_pessoa = fisica) |
email |
string | Email de contato da empresa |
telefone |
string | Telefone de contato |
endereco |
string | Endereço completo |
cidade |
string | Cidade |
estado |
string | Estado (UF) |
cep |
string | CEP |
responsavel_nome |
string | Nome do responsável pela empresa |
responsavel_email |
string | Email do responsável |
responsavel_telefone |
string | Telefone do responsável |
chave_publica |
string | Chave pública da API (pk_live_...) |
chave_privada |
string | Chave privada da API (sk_live_...) |
status |
string | Status da conta (aprovado, pendente, rejeitado) |
created_at |
datetime | Data de criação da conta |
Códigos de Erro
Header Authorization ausente ou inválido
{
"error": "Authorization header missing or invalid"
}
Credenciais de API inválidas ou empresa inativa
{
"error": "Invalid API credentials"
}
Erro interno do servidor
{
"error": "Internal server error: [mensagem]"
}
Exemplos de Integração
JavaScript (Fetch API)
const chavePublica = 'pk_live_abc123xyz';
const chavePrivada = 'sk_live_xyz789abc';
const credentials = btoa(`${chavePublica}:${chavePrivada}`);
fetch('https://api.onyxpag.com/?empresa', {
method: 'GET',
headers: {
'Authorization': `Basic ${credentials}`,
'Content-Type': 'application/json'
}
})
.then(response => response.json())
.then(data => {
console.log('Dados da empresa:', data.data);
console.log('Nome:', data.data.nome_empresa);
console.log('Email:', data.data.email);
console.log('Código Cliente:', data.data.codigo_cliente);
})
.catch(error => console.error('Erro:', error));
PHP (cURL)
$chavePublica = 'pk_live_abc123xyz';
$chavePrivada = 'sk_live_xyz789abc';
$credentials = base64_encode("$chavePublica:$chavePrivada");
$ch = curl_init('https://api.onyxpag.com/?empresa');
curl_setopt($ch, CURLOPT_HTTPHEADER, [
'Authorization: Basic ' . $credentials,
'Content-Type: application/json'
]);
curl_setopt($ch, CURLOPT_RETURNTRANSFER, true);
$response = curl_exec($ch);
$httpCode = curl_getinfo($ch, CURLINFO_HTTP_CODE);
curl_close($ch);
if ($httpCode === 200) {
$data = json_decode($response, true);
echo "Nome: " . $data['data']['nome_empresa'] . "\n";
echo "Email: " . $data['data']['email'] . "\n";
echo "Código: " . $data['data']['codigo_cliente'] . "\n";
} else {
echo "Erro: " . $response . "\n";
}
Python (Requests)
import requests
import base64
chave_publica = 'pk_live_abc123xyz'
chave_privada = 'sk_live_xyz789abc'
credentials = base64.b64encode(f'{chave_publica}:{chave_privada}'.encode()).decode()
response = requests.get(
'https://api.onyxpag.com/?empresa',
headers={
'Authorization': f'Basic {credentials}',
'Content-Type': 'application/json'
}
)
if response.status_code == 200:
data = response.json()
print(f"Nome: {data['data']['nome_empresa']}")
print(f"Email: {data['data']['email']}")
print(f"Código: {data['data']['codigo_cliente']}")
else:
print(f"Erro: {response.text}")
Casos de Uso
- Validação de Credenciais: Verificar se as chaves de API estão corretas antes de processar transações
- Exibir Informações: Mostrar dados da empresa no painel do cliente
- Sincronização: Manter dados da empresa atualizados em sistemas externos
- Auditoria: Registrar qual empresa está fazendo requisições
Segurança
Importante: Esta rota retorna as chaves de API (chave_publica e chave_privada). Certifique-se de:
- Usar HTTPS em todas as requisições
- Não expor as chaves no frontend/cliente
- Armazenar as chaves de forma segura (variáveis de ambiente, cofres de senhas)
- Fazer requisições apenas do backend/servidor
- A empresa deve ter status "aprovado" para que a rota funcione
Listar Pagamentos
Liste todas as transações da sua conta com filtros opcionais.
transactions
Parâmetros de Query (Opcionais)
| Parâmetro | Tipo | Descrição |
|---|---|---|
page |
integer | Página (padrão: 1) |
limit |
integer | Itens por página (padrão: 20, máx: 100) |
status |
string | Filtrar por status |
start_date |
string | Data inicial (YYYY-MM-DD) |
end_date |
string | Data final (YYYY-MM-DD) |
Exemplo de Requisição
curl -X GET "https://api.onyxpag.com/transactions?page=1&limit=10&status=pago" \
-H "Authorization: Basic cGtfdGVzdF8xMjM0NTY6c2tfdGVzdF83ODkwMTI=" \
-H "Content-Type: application/json"
Exemplo de Resposta
{
"success": true,
"data": {
"transactions": [
{
"id": "PXB_68E6C0A14DC3D_1759953057",
"status": "pago",
"amount": 5,
"created_at": "2025-10-08 19:50:57",
"customer": {
"name": "João Silva",
"email": "joao.silva@email.com"
}
}
],
"pagination": {
"current_page": 1,
"total_pages": 5,
"total_items": 87,
"items_per_page": 20
}
}
}
Saques PIX
Solicite saques do seu saldo disponível via PIX de forma rápida e segura.
Como Funcionam os Saques
Os saques permitem transferir o saldo disponível da sua conta para uma chave PIX de sua escolha. O processo é simples e seguro:
- Solicite o saque informando valor e chave PIX
- O valor é reservado do seu saldo disponível
- Nossa equipe analisa e processa a solicitação
- O valor é transferido para sua chave PIX
Solicitar Saque
/withdrawal
Parâmetros da Requisição
| Campo | Tipo | Obrigatório | Descrição |
|---|---|---|---|
amount |
number | Sim | Valor do saque em reais (ex: 100.50) |
pix_key_type |
string | Sim | Tipo da chave PIX (cpf, cnpj, email, telefone, aleatoria) |
pix_key |
string | Sim | Chave PIX para recebimento do valor |
documento_responsavel_pix |
string | Condicional | Obrigatório quando pix_key_type for diferente de "cpf". CPF do responsável pela chave PIX (apenas números) |
observacoes |
string | Não | Observações sobre o saque |
- Se a chave PIX for do tipo telefone, email, cnpj ou aleatoria, você DEVE informar o campo
documento_responsavel_pixcom o CPF do titular da chave PIX - O campo
documento_responsavel_pixdeve conter apenas números (sem pontos ou traços) - Se a chave PIX for do tipo cpf, o campo
documento_responsavel_pixé opcional (será usado o próprio CPF da chave) - Esta informação é necessária para o processamento correto do PIX pelo banco
Formatos de Chave PIX
| Tipo | Formato | Exemplo |
|---|---|---|
cpf |
000.000.000-00 | 123.456.789-00 |
cnpj |
00.000.000/0000-00 | 12.345.678/0001-90 |
email |
usuario@dominio.com | joao@exemplo.com |
telefone |
(00) 00000-0000 | (11) 99999-9999 |
aleatoria |
UUID | 550e8400-e29b-41d4-a716-446655440000 |
Exemplo de Requisição com CPF (cURL)
curl -X POST "https://api.onyxpag.com/withdrawal" \
-H "Authorization: Basic cGtfdGVzdF8xMjM0NTY6c2tfdGVzdF83ODkwMTI=" \
-H "Content-Type: application/json" \
-d '{
"amount": 20.00,
"pix_key_type": "cpf",
"pix_key": "12345678900",
"observacoes": "Saque via api"
}'
Exemplo de Requisição com Telefone (cURL)
Atenção: Quando usar chave PIX do tipo telefone, email, cnpj ou aleatoria, é obrigatório informar o CPF do responsável.
curl -X POST "https://api.onyxpag.com/withdrawal" \
-H "Authorization: Basic cGtfdGVzdF8xMjM0NTY6c2tfdGVzdF83ODkwMTI=" \
-H "Content-Type: application/json" \
-d '{
"amount": 50.00,
"pix_key_type": "telefone",
"pix_key": "11999999999",
"documento_responsavel_pix": "12345678900",
"observacoes": "Saque para telefone"
}'
Exemplo de Resposta
{
"success": true,
"message": "Withdrawal request created successfully",
"data": {
"id": 123,
"amount": 20.00,
"fee_amount": 0.00,
"net_amount": 20.00,
"pix_key_type": "cpf",
"pix_key": "000.000.000-00",
"status": "pendente",
"created_at": "2025-01-07 10:30:00",
"observacoes": "Saque via api"
}
}
Consultar Saque
/withdrawal?id={id}
Exemplo de Consulta
curl -X GET "https://api.onyxpag.com/withdrawal?id=123" \
-H "Authorization: Basic cGtfdGVzdF8xMjM0NTY6c2tfdGVzdF83ODkwMTI=" \
-H "Content-Type: application/json"
Listar Saques
/withdrawal?list=true
Parâmetros de Query (Opcionais)
| Parâmetro | Tipo | Descrição |
|---|---|---|
limit |
integer | Itens por página (padrão: 50, máx: 100) |
offset |
integer | Offset para paginação (padrão: 0) |
status |
string | Filtrar por status (pendente, aprovado, cancelado) |
Status dos Saques
Aguardando análise
Aprovado para pagamento
Cancelado
- O valor solicitado é imediatamente reservado do seu saldo disponível
- Saques são processados em horário comercial (dias úteis)
- Podem ser aplicadas taxas conforme configuração da conta
- Verifique sempre os limites mínimo e máximo de saque
Resumo da Conta
/withdrawal
Retorna um resumo dos saques da sua conta:
{
"success": true,
"data": {
"total_saques": 15,
"valor_pendente": 500.00,
"valor_aprovado": 750.00,
"valor_concluido": 2350.00,
"valor_cancelado": 0.00
}
}
Webhooks e PostbackURL
Receba notificações automáticas sobre mudanças de status das transações.
Como Funcionam
Quando o status de uma transação muda, enviamos uma requisição POST para a URL configurada no campo postbackUrl.
Eventos Enviados
| Evento | Descrição | Quando é disparado |
|---|---|---|
transaction.created |
Quando uma nova transação é criada | Imediatamente após a criação da transação |
transaction.paid |
Quando uma transação é paga com sucesso | Quando o pagamento é confirmado pelo gateway |
transaction.failed |
Quando uma transação falha | Quando o pagamento é recusado ou falha por qualquer motivo |
transaction.expired |
Quando uma transação expira | Quando o prazo para pagamento é excedido |
transaction.refunded |
Quando uma transação é estornada | Quando um reembolso é processado (total ou parcial) |
Estrutura do Webhook
{
"event": "transaction.paid",
"timestamp": "2025-01-07T08:51:18-03:00",
"data": {
"transaction_id": "PXB_68E4FE71E4AF4_1759837809",
"external_id": "12345",
"amount": "25.90",
"fee_amount": "1.30",
"net_amount": "24.60",
"currency": "BRL",
"payment_method": "pix",
"status": "paid",
"created_at": "2025-01-07T08:50:11-03:00",
"updated_at": "2025-01-07T08:51:18-03:00",
"paid_at": "2025-01-07T08:51:18-03:00",
"customer": {
"name": "João Silva",
"email": "joao.silva@email.com",
"phone": "11999999999",
"document": "12345678900"
},
"items": [
{
"title": "Nome do produto",
"quantity": 1,
"unit_price": "25.90"
}
]
}
}
Pagamentos globais
currency e payment_method refletem a transação (BRL/pix, MXN/spei ou oxxo, e a moeda enviada no internacional). No internacional o payload traz também amount_usd. Exemplos completos por método em Pagamentos Globais.
Validação de Webhooks
Dicas de Segurança
- Sempre valide a origem da requisição
- Use HTTPS na sua URL de webhook
- Implemente retry logic para falhas temporárias
- Responda com status 200 para confirmar recebimento
Exemplo de Implementação
<?php
// webhook.php
$input = file_get_contents('php://input');
$data = json_decode($input, true);
if ($data['event'] === 'transaction.paid') {
$transactionId = $data['data']['transaction_id'];
$amount = $data['data']['amount'];
// Processar pagamento confirmado
updateOrderStatus($transactionId, 'paid');
// Responder com sucesso
http_response_code(200);
echo json_encode(['status' => 'received']);
}
?>
Integre com IA
Cole o prompt abaixo em qualquer IA (ChatGPT, Claude, Gemini, etc.) e peça para ela gerar o código de integração completo na linguagem que você preferir.
Como usar
- Copie o prompt abaixo clicando em Copiar Prompt
- Abra o ChatGPT, Claude ou outra IA de sua preferência
- Cole o prompt e adicione ao final: "Me ajude com [sua linguagem/framework]"
- A IA irá gerar o código completo de integração para você
Prompt Completo para Gerar PIX e Consultar Transação
Qualquer Linguagem
PHP, Python, Node.js, Java, Go, C# e muito mais
Código Pronto
A IA gera código funcional pronto para usar no seu projeto
Personalizável
Peça ajustes, tratamento de erros e qualquer customização