Documentação da API Voltar ao painel

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.

1

Obtenha suas Chaves

Acesse o painel administrativo para obter sua chave pública (pk_) e chave privada (sk_).

2

Combine as Chaves

Combine as chaves no formato: chave_publica:chave_privada

3

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
Importante: Mantenha suas chaves seguras! A chave privada (sk_) nunca deve ser exposta no frontend ou em repositórios públicos.

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.

POST 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
  }
]
Importante: Se o campo 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ária
  • p_split - Percentual configurado
  • valor_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.

POST 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) e oxxo (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).
POST 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 em currency. currency: "EUR" com amount: 50.00 cobra 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_usd do 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
amountnumberSimValor em pesos mexicanos (ex: 350.00)
payment_methodstringSimDeve ser "spei" ou "oxxo"
customerobjectSimDados do cliente (name, email, document)
descriptionstringNãoDescrição do pagamento
postbackUrlstringNãoURL para receber notificações de webhook
metadataobjectNãoDados 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
amountnumberSimValor na moeda de currency (ex: 49.90)
payment_methodstringSimDeve ser "internacional"
currencystringNãoMoeda da cobrança (ISO 4217): "USD" (padrão), "EUR", "GBP", "MXN"... Bizum e Klarna exigem "EUR".
only_methodsarrayNãoRestringe 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.
customerobjectSimname e email obrigatórios; document é opcional para o comprador internacional.
descriptionstringNãoDescrição do pagamento
postbackUrlstringNãoURL para receber notificações de webhook
metadataobjectNãoDados 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
amountnumberSimValor em euros (ex: 25.00)
payment_methodstringSimDeve ser "mbway"
customerobjectSimname, 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.
descriptionstringNãoDescrição do pagamento (aparece na app)
postbackUrlstringNãoURL para receber notificações de webhook
metadataobjectNãoDados 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.

GET /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).

pendente

Aguardando pagamento

cancelado

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.

GET /?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

401 Unauthorized

Credenciais de API inválidas

{
  "error": "Invalid API credentials"
}
500 Internal Server Error

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.

GET /?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

401 Unauthorized

Header Authorization ausente ou inválido

{
  "error": "Authorization header missing or invalid"
}
401 Unauthorized

Credenciais de API inválidas ou empresa inativa

{
  "error": "Invalid API credentials"
}
500 Internal Server Error

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.

GET 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

POST /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
Importante sobre CPF:
  • Se a chave PIX for do tipo telefone, email, cnpj ou aleatoria, você DEVE informar o campo documento_responsavel_pix com o CPF do titular da chave PIX
  • O campo documento_responsavel_pix deve 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

GET /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

GET /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

pendente

Aguardando análise

aprovado

Aprovado para pagamento

cancelado

Cancelado

Importante:
  • 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

GET /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

Prompt para IA — Integração Onyxpag
Você é um especialista em integração de APIs de pagamento. Preciso integrar a API Onyxpag Hub na minha aplicação.

## Informações da API

Base URL: https://api.onyxpag.com
Autenticação: Basic Auth — combinar chave_publica:chave_privada e codificar em Base64
Content-Type: application/json

---

## 1. GERAR PIX

Método: POST https://api.onyxpag.com

Headers:
  Authorization: Basic {base64(chave_publica:chave_privada)}
  Content-Type: application/json

Body (JSON):
{
  "amount": 25.90,
  "payment_method": "pix",
  "source_url": "https://sua-loja.com/checkout/oferta-xyz",
  "description": "Descrição do pagamento",
  "items": [
    {
      "title": "Nome do Produto",
      "unitPrice": 2590,
      "quantity": 1,
      "tangible": false
    }
  ],
  "customer": {
    "name": "Nome do Cliente",
    "email": "cliente@email.com",
    "document": "000.000.000-00",
    "phone": "11999999999"
  },
  "postbackUrl": "https://seu-site.com/webhook",
  "metadata": {
    "order_id": "pedido_123"
  }
}

IMPORTANTE — o campo "source_url" é OBRIGATÓRIO: URL (http/https) da página onde a transação foi originada (o checkout/oferta do cliente). Serve para identificar a procedência da venda (segurança, conciliação e suporte em disputas). O código gerado DEVE sempre enviar a URL real da página de checkout em "source_url" — nunca deixe fixo/vazio. Opcionalmente, envie também "source_label" (string) descrevendo a oferta/produto.

Resposta de Sucesso (HTTP 201):
{
  "success": true,
  "data": {
    "id": "PXB_68E4FE71E4AF4_1759837809",
    "status": "pendente",
    "amount": "25.90",
    "payment_method": "pix",
    "pix_code": "00020126570014br.gov.bcb.pix...",
    "pix_qr_code": "data:image/png;base64,...",
    "external_ref": "pedido_123",
    "created_at": "2025-01-07 08:50:11",
    "expires_at": "2025-01-08 08:50:11"
  }
}

---

## 2. CONSULTAR TRANSAÇÃO PIX (verificar se foi pago)

Método: GET https://api.onyxpag.com/transactions/{transaction_id}

Headers:
  Authorization: Basic {base64(chave_publica:chave_privada)}

Resposta de Sucesso:
{
  "success": true,
  "data": {
    "id": "PXB_68E4FE71E4AF4_1759837809",
    "status": "pago",
    "amount": "25.90",
    "payment_method": "pix",
    "customer": {
      "name": "Nome do Cliente",
      "email": "cliente@email.com"
    },
    "created_at": "2025-01-07 08:50:11",
    "paid_at": "2025-01-07 08:51:18"
  }
}

Status possíveis da transação:
  - "pendente"  → Aguardando pagamento
  - "pago"      → Pagamento confirmado
  - "expirado"  → PIX expirou sem pagamento
  - "cancelado" → Transação cancelada

---

## 3. WEBHOOK (Notificação automática quando pago)

Ao enviar "postbackUrl" na criação do PIX, o servidor notificará via POST quando o pagamento for confirmado:

{
  "event": "transaction.paid",
  "timestamp": "2025-01-07T08:51:18-03:00",
  "data": {
    "transaction_id": "PXB_68E4FE71E4AF4_1759837809",
    "external_id": "seu_order_id",
    "status": "paid",
    "amount": "25.90",
    "payment_method": "pix",
    "customer": {
      "name": "Nome do Cliente",
      "email": "cliente@email.com",
      "phone": "11999999999",
      "document": "12345678900"
    },
    "items": [
      { "title": "Nome do produto", "quantity": 1, "unit_price": "25.90" }
    ]
  }
}

---

Com base nessas informações, me ajude a implementar a integração completa em: [INFORME AQUI SUA LINGUAGEM/FRAMEWORK, ex: PHP, Node.js, Python, React, etc.]

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