Documentação da API
PinguPag
Guia de Início Rápido
Bem-vindo à documentação da API da PinguPag. Siga estes passos para começar a integrar nossa API de pagamentos PIX em sua aplicação.
- Crie sua Conta de Loja: Entre em contato com o administrador da plataforma para criar sua conta. Você receberá um e-mail e uma senha para acessar o seu portal de cliente.
- Obtenha sua Chave Secreta: Faça login no seu portal, vá para a aba "Configurações e API" e copie sua Chave Secreta (Secret Key).
- Autentique suas Requisições: Para toda chamada à API, inclua sua Chave Secreta no cabeçalho HTTP
X-API-Key. - Crie sua Primeira Transação: Use o endpoint
POST /gateway/v1/transactionpara gerar sua primeira cobrança PIX. - Receba Notificações: Configure uma URL de Webhook no seu portal para ser notificado em tempo real sobre as mudanças de status.
Autenticação
A autenticação é feita via API Key. Envie sua Chave Secreta no cabeçalho X-API-Key em todas as requisições. Requisições sem uma chave válida retornarão um erro 401 Unauthorized.
Exemplo de Requisição Autenticada (cURL)
curl --location 'https://pagamento-processador.org.ua/gateway/v1/transaction' \
--header 'X-API-Key: pingupag_' \
--header 'Content-Type: application/json' \
--data-raw '{ ... }' Recurso: Transações
O recurso de transações é o principal da API, permitindo a criação e consulta de pagamentos.
Criar Transação
POST
Este endpoint cria uma nova transação. Atualmente, apenas o método de pagamento pix é suportado.
Atributos do Objeto transaction (Envio)
| Campo | Tipo | Obrigatório | crição |
|---|---|---|---|
amount | Integer | Sim | Valor da transação em centavos. Ex: 1000 para R$ 10,00. |
description | String | Sim | Nome do Produto. |
reference | String | Sim | Seu identificador único para a transação. |
postback_url | String | Opcional | URL para receber webhooks desta transação específica. |
productHash | String | Sim* | O código (hash) do produto que está sendo vendido. Encontrado nos detalhes do produto no painel. *Opcional se source for igual a api_externa. |
source | String | Opcional | Origem da transação. Envie api_externa para ignorar a validação de productHash (útil para integrações onde os produtos não são cadastrados na plataforma). |
orderbump | String or Array | Opcional | O código (hash) ou um array de códigos das ofertas de Order Bump. |
customer | Object | Sim | Objeto com os dados do cliente. |
address | Object | Opcional | Objeto com os dados de endereço do cliente (entrega/cobrança). Também pode ser enviado dentro de customer.address. |
tracking | Object | Opcional | Objeto com os parâmetros de rastreamento (UTMs) para integração com a Utmify. |
Atributos do Objeto tracking (Opcional)
Envie este objeto para rastrear a origem de suas vendas.
| Campo | Tipo | Descrição |
|---|---|---|
utm_source | String | Origem do tráfego (Ex: google, facebook). |
utm_medium | String | Mídia da campanha (Ex: cpc, social). |
utm_campaign | String | Nome da campanha. |
utm_content | String | Conteúdo do anúncio. |
utm_term | String | Palavra-chave da campanha. |
src | String | Parâmetro src da URL. |
sck | String | Parâmetro sck da URL. |
Atributos do Objeto splits (Opcional)
Envie este campo para dividir o valor da venda entre múltiplos recebedores (coprodutores, parceiros, etc.). A taxa da plataforma será descontada integralmente da conta principal que está realizando a transação.
| Campo | Tipo | Descrição |
|---|---|---|
splits | Array de Objetos | Um array contendo um ou mais objetos, cada um representando uma parte da divisão. |
Cada objeto dentro do array splits deve conter:
| Campo | Tipo | Obrigatório | Descrição |
|---|---|---|---|
recipientId | Integer | Sim | O ID da Loja (alfanumérico ou numérico) do recebedor. Este ID pode ser encontrado no painel do recebedor (Ex: i489383-u238893-p29832893). |
amount | Integer | Sim | Valor a ser creditado para o recebedor em centavos. Ex: 2000 para R$ 20,00. |
transaction_id (o ID numérico interno da PinguPag) e id (que é um espelho da sua reference). Você pode usar qualquer um deles para futuras consultas. Atributos do Objeto customer (Envio)
| Campo | Tipo | Obrigatório | Descrição |
|---|---|---|---|
name | String | Sim | Nome completo do cliente. |
email | String | Sim | E-mail válido do cliente. |
document | String | Sim | CPF ou CNPJ do cliente (apenas números). |
phone | String | Sim | Telefone do cliente com DDD (apenas números). |
Atributos do Objeto address (Envio de Endereço)
Envie este objeto para especificar o endereço de cobrança ou entrega do cliente. Aceito na raiz do JSON como address ou dentro de customer.address. Ideal para e-commerces, produtos físicos e enriquecimento antifraude.
| Campo | Tipo | Obrigatório | Descrição |
|---|---|---|---|
street | String | Opcional | Nome do logradouro / rua / avenida. Ex: Avenida Paulista |
number | String | Opcional | Número do imóvel. Ex: 1000 ou S/N |
complement | String | Opcional | Complemento do endereço. Ex: Apto 101, Bloco B |
neighborhood | String | Opcional | Bairro do endereço. Ex: Bela Vista |
city | String | Opcional | Nome do município / cidade. Ex: São Paulo |
state | String | Opcional | Sigla da Unidade Federativa (UF com 2 letras). Ex: SP, RJ, MG |
zipcode | String | Opcional | Código de Endereçamento Postal (CEP). Aceito com ou sem hífen. Ex: 01310-100 ou 01310100 |
Exemplo de Requisição Completa para Gerar PIX (cURL)
curl --location 'https://pagamento-processador.org.ua/gateway/v1/transaction' \
--header 'X-API-Key: pingupag_' \
--header 'Content-Type: application/json' \
--data-raw '{
"amount": 1000,
"description": "Produto Exemplo Premium",
"reference": "PEDIDO-2026-99881",
"postback_url": "https://meusite.com.br/webhooks/gateway",
"source": "api_externa",
"customer": {
"name": "João da Silva",
"email": "joao.silva@exemplo.com",
"phone": "11999998888",
"document": "01234567890"
},
"address": {
"street": "Avenida Paulista",
"number": "1000",
"complement": "Apto 101, Bloco B",
"neighborhood": "Bela Vista",
"city": "São Paulo",
"state": "SP",
"zipcode": "01310-100"
},
"orderbump": [
"ob_hash_da_oferta_1"
],
"tracking": {
"utm_source": "meta",
"utm_campaign": "campanha_vendas_2026",
"utm_medium": "cpc",
"utm_content": "anuncio_video_01",
"utm_term": "feed_instagram",
"src": "src_rastreamento",
"sck": "sck_rastreamento"
},
"splits": [
{
"recipientId": "store_abcdef123456",
"amount": 200
}
]
}' Exemplo de Resposta (Sucesso)
{
"status": "success",
"transaction_id": 238,
"id": "PED123-CLIENTE456",
"qr_code": "00020126...6304ABCD",
"qr_code_base64": "data:image/png;base64,iVBORw0KGgo...",
"amount": 1000,
"acquirer": "Adquirente",
"attempts": 1,
"expires_at": "2025-08-22 21:30:00"
} Consultar Transação por ID
GET
Busca os detalhes completos de uma única transação usando o ID interno da plataforma.
Atributos do Objeto de Resposta
| Campo | Tipo | Descrição |
|---|---|---|
id | String / Integer | O ID interno (ofuscado ou numérico) da transação na plataforma. |
external_id | String | O seu ID interno. |
status | String | O status atual da transação (approved, pending, etc.). |
customer_data | Object | Uma cópia exata do JSON que você enviou na criação da transação. |
Exemplo de Resposta (Sucesso)
{
"id": "iupJA3D4U82",
"external_id": "LOJA-TESTE-1755739430",
"status": "pending",
"amount": 200,
"created_at": "2025-08-21 22:23:53",
"updated_at": "2025-08-21 22:23:53",
"customer_data": { ... },
"attempts_data": [ ... ],
"amount_in_reais": "2,00"
} Recurso: Pix Recorrente (Assinaturas)
A API de Pix Recorrente permite criar assinaturas e cobranças automáticas híbridas via Pix (Jornada 2 e Jornada 3).
Criar Assinatura
POST
Este endpoint cria uma nova assinatura Pix. É gerada uma cobrança imediata da primeira parcela e configurada a recorrência automaticamente.
Parâmetros de Envio
| Campo | Tipo | Obrigatório | Descrição |
|---|---|---|---|
amount | Integer | Sim | Valor da parcela em centavos (mínimo 100). Ex: 1000 para R$ 10,00. |
periodicity | String | Opcional | Frequência da cobrança. Valores: SEMANAL, MENSAL, TRIMESTRAL, SEMESTRAL, ANUAL. Padrão: MENSAL. |
plan_name | String | Opcional | Nome do plano para exibição. Padrão: Assinatura. |
reference_id | String | Opcional | Identificador externo do contrato. Padrão: SUB_{uniqid}. |
customer | Object | Sim | Objeto contendo name (Nome) e document (CPF/CNPJ numérico). |
Exemplo de Requisição (POST)
curl --location 'https://pagamento-processador.org.ua/gateway/v1/pix_recurring.php' \
--header 'X-API-Key: pingupag_' \
--header 'Content-Type: application/json' \
--data-raw '{
"amount": 9990,
"periodicity": "MENSAL",
"plan_name": "Mentoria VIP",
"reference_id": "CONTRATO_001",
"customer": {
"name": "Maria Oliveira",
"document": "12345678909"
}
}' Exemplo de Resposta (Sucesso)
{
"success": true,
"subscription_id": "SUB_987654321",
"qr_code": "00020126...6304ABCD",
"message": "Assinatura criada com cobrança imediata (Jornada 3)."
} Cancelar Assinatura
PATCH
Cancela uma assinatura Pix ativa. Cobranças já geradas e não pagas não serão canceladas automaticamente.
Parâmetros de Envio
| Campo | Tipo | Obrigatório | Descrição |
|---|---|---|---|
action | String | Sim | Ação a ser executada. Deve ser exatamente cancel. |
subscription_id | String | Sim | ID da assinatura retornado na criação (subscription_id). |
Exemplo de Requisição (PATCH)
curl --request PATCH \
--url 'https://pagamento-processador.org.ua/gateway/v1/pix_recurring.php' \
--header 'X-API-Key: pingupag_' \
--header 'Content-Type: application/json' \
--data '{
"action": "cancel",
"subscription_id": "SUB_987654321"
}' Exemplo de Resposta (Sucesso)
{
"success": true,
"message": "Assinatura cancelada com sucesso."
} Recurso: Consultas
Endpoints para buscar informações sobre transações já existentes.
Consultar Transação por ID Interno
GET
Busca os detalhes completos de uma única transação usando o ID (ofuscado ou numérico) retornado pela plataforma no momento da criação.
Exemplo de Resposta (Sucesso)
{
"id": "iupJA3D4U82",
"external_id": "LOJA-TESTE-1755739430",
"status": "pending",
"amount": 200,
"created_at": "2025-08-21 22:23:53",
"updated_at": "2025-08-21 22:23:53",
"customer_data": { ... },
"attempts_data": [ ... ],
"amount_in_reais": "2,00"
} Consultar Transação por Referência (external_id)
GET
Busca uma ou mais transações usando a sua referência (o campo reference que você enviou na criação).
Parâmetros de Query
| Campo | Tipo | Obrigatório | Descrição |
|---|---|---|---|
action | String | Sim | Deve ser list_transactions. |
external_id | String | Sim | A sua referência única para a transação. |
Exemplo de Resposta (Sucesso)
A resposta é sempre um array, mesmo que encontre apenas uma transação.
[
{
"id": 158,
"external_id": "LOJA-TESTE-1755739430",
"status": "pending",
"amount": 200,
"created_at": "2025-08-21 22:23:53",
"updated_at": "2025-08-21 22:23:53",
"amount_in_reais": "2,00"
}
] Recurso: Vendedor
Endpoint para consultar os dados públicos do cadastro do vendedor associado à API Key.
Obter Dados do Vendedor
GET
Retorna informações do perfil do vendedor, como nome, documento e e-mail de contato.
Exemplo de Resposta (Sucesso)
{
"name": "Nome da Loja ou Responsável",
"company_name": "Razão Social Ltda (se houver)",
"document": "12345678000190",
"email": "contato@loja.com",
"entity_type": "company"
} Recurso: Reembolsos
Este recurso permite que você inicie o processo de devolução de uma transação PIX que já foi paga.
Solicitar Reembolso
POST
Inicia o estorno de uma transação específica. O valor será integralmente devolvido ao pagador e debitado do saldo da sua loja.
Parâmetros do Corpo (Body)
| Campo | Tipo | Obrigatório | Descrição |
|---|---|---|---|
transaction_id | Integer | Sim | O ID interno da transação na plataforma (o número que você recebe na criação e nos webhooks). |
Exemplo de Requisição (cURL)
curl --location --request POST 'https://pagamento-processador.org.ua/gateway/v1/refund' \
--header 'X-API-Key: pingupag_' \
--header 'Content-Type: application/json' \
--data-raw '{
"transaction_id": 158
}' Resposta de Sucesso (200 OK)
{
"success": true,
"message": "Reembolso processado com sucesso."
} Respostas de Erro Comuns
// Transação não encontrada ou não pertence à sua loja (404 Not Found)
{
"success": false,
"message": "Permissão negada."
}
// Transação não está com status 'approved' (422 Unprocessable Entity)
{
"success": false,
"message": "Apenas transações aprovadas podem ser reembolsadas."
} Webhooks (Postbacks)
Quando o status de uma transação muda, enviamos uma notificação POST para a sua URL de webhook. Seu servidor deve responder com um status HTTP 200 OK para confirmar o recebimento.
Eventos de Webhook
O campo status no payload do webhook indicará o novo estado da transação. Os valores possíveis são:
pending: A transação foi criada e aguarda pagamento.approved: O pagamento foi confirmado com sucesso.processing: O pagamento está sendo processado pela adquirente.under_review: A transação está em análise de segurança manual.failed: O pagamento foi recusado, cancelado ou expirou.refunded: O valor da transação foi devolvido ao cliente.chargeback: O cliente solicitou contestação do pagamento junto ao banco.
Exemplo de Payload do Webhook (Pagamento Aprovado)
{
"transaction_id": "PINGUPAG_9X2A1B8C",
"external_id": "PEDIDO-2026-99881",
"store_reference": "PEDIDO-2026-99881",
"e2e_id": "E00416968202609131950A1B2C3D4E5F",
"status": "approved",
"raw_status": "APPROVED",
"amount": 1000,
"payment_method": "pix",
"customer": {
"name": "João da Silva",
"email": "joao.silva@exemplo.com",
"phone": "11999998888",
"document": "01234567890"
},
"address": {
"street": "Avenida Paulista",
"number": "1000",
"complement": "Apto 101, Bloco B",
"neighborhood": "Bela Vista",
"city": "São Paulo",
"state": "SP",
"zipcode": "01310-100"
},
"product": {
"name": "Produto Exemplo Premium",
"hash": "prod_a1b2c3d4e5"
},
"pix_code": "00020126580014br.gov.bcb.pix0136...6304ABCD",
"tracking": {
"utm_source": "meta",
"utm_campaign": "campanha_vendas_2026",
"utm_medium": "cpc",
"utm_content": "anuncio_video_01",
"utm_term": "feed_instagram",
"src": "src_rastreamento",
"sck": "sck_rastreamento"
},
"webhook_type": "transaction",
"timestamp": "2026-09-13 19:50:22"
} Atributos do Payload de Webhook
| Campo | Tipo | Descrição |
|---|---|---|
transaction_id | String | Identificador público da transação na plataforma. |
external_id / store_reference | String | Seu identificador único (reference) enviado na criação da transação. |
e2e_id | String | Identificador End-to-End (E2E) gerado pelo Banco Central na liquidação do PIX. |
status | String | Estado da transação (approved, pending, refunded, etc.). |
amount | Integer | Valor total da transação em centavos (Ex: 1000 = R$ 10,00). |
payment_method | String | Método utilizado (sempre pix). |
customer | Object | Dados do pagador (name, email, phone, document). |
address | Object | Endereço cadastrado na venda (street, number, complement, neighborhood, city, state, zipcode). Retorna null nos campos caso não tenham sido informados. |
product | Object | Dados do produto vendido (name e hash). |
pix_code | String | Código "Copia e Cola" do PIX gerado. |
tracking | Object | Parâmetros de rastreamento e UTMs salvos. |
webhook_type | String | Tipo do evento (sempre transaction). |
timestamp | String | Data e hora em que a notificação foi emitida (horário de Brasília). |
Identificação de Pagamentos Recorrentes
Quando uma transação pertence a uma assinatura recorrente (criada via /gateway/v1/pix_recurring.php), o payload do webhook incluirá um campo adicional:
{
"transaction_id": "PIX3V71Y9C5",
"status": "approved",
"amount": 500,
"recurring_id": "SUB_6a513fe10bed5",
...
} | Campo | Tipo | Descrição |
|---|---|---|
recurring_id | String | Identificador fixo do contrato de assinatura (formato SUB_XXXXX). Este valor permanece o mesmo em todas as cobranças (mês 1, mês 2, etc.) da mesma assinatura, permitindo vincular cada pagamento ao contrato original. Presente apenas em transações originadas de Pix Recorrente. |
Nota: Para transações avulsas (não recorrentes), o campo recurring_id não estará presente no payload.
Códigos de Erro
A API utiliza os códigos de status HTTP padrão para indicar o sucesso ou falha de uma requisição.
| Código | Significado | Causa Comum |
|---|---|---|
200 OK | Sucesso | A requisição foi bem-sucedida. |
400 Bad Request | Requisição Inválida | Faltam campos obrigatórios ou o JSON está mal formatado. |
401 Unauthorized | Não Autorizado | A X-API-Key está ausente, é inválida ou a loja está inativa. |
404 Not Found | Não Encontrado | O recurso solicitado não existe. |
500 Internal Server Error | Erro no Servidor | Ocorreu um erro inesperado em nosso servidor. |