API Doc
Documentação completa para integrar sua plataforma com Pangeia PAY.
Versão da documentação: 1.0.4
1) Fluxo de integração
- Registre uma cobrança em
POST /registrar.
- Redirecione o cliente para
/pagar/<unique_id> ou use /pixqrcode/<unique_id>.
- Acompanhe o resultado por polling em
GET /status/<unique_id> e/ou receba IPN no seu backend.
Base URL produção: https://pay.pangeialabs.com
2) Endpoints principais
| Método |
Endpoint |
Auth |
Uso |
POST | /registrar | API key | Cria cobrança PIX/BTC/OUTRA. |
GET | /pixqrcode/<unique_id> | Pública | Retorna payload e QRCode (PIX/cripto). |
GET | /status/<unique_id> | Pública | Status da cobrança + campos cripto. |
POST | /auth | API key + secret | Valida credenciais de integração. |
POST | IPN (callback para seu endpoint) | IPN Secret no payload | Pangeia PAY envia atualizações de status para sua ipn_url. |
Documentação full: OpenAPI YAML.
3) Exemplo cURL - criar cobrança
O request não envia payment_method; a API usa os métodos ativos na conta (pix_enabled, bitcoin_enabled, outracoin_enabled).
curl -X POST "https://pay.pangeialabs.com/registrar" \
-H "Content-Type: application/json" \
-d '{
"buyer_name": "Joao da Silva",
"buyer_taxid": "12345678901",
"order_amount": 149.90,
"order_id": "PED-10001",
"api_key": "SUA_API_KEY",
"redirect_url": "https://seusite.com/retorno"
}'
4) Exemplo JavaScript (Node/fetch)
const BASE_URL = "https://pay.pangeialabs.com";
async function criarCobranca() {
const res = await fetch(`${BASE_URL}/registrar`, {
method: "POST",
headers: { "Content-Type": "application/json" },
body: JSON.stringify({
buyer_name: "Joao da Silva",
buyer_taxid: "12345678901",
order_amount: 149.90,
order_id: "PED-10001",
api_key: process.env.PANGEIA_API_KEY
})
});
if (!res.ok) {
const err = await res.json();
throw new Error(err.error || `HTTP ${res.status}`);
}
const charge = await res.json();
console.log("unique_id:", charge.unique_id);
console.log("checkout_url:", charge.url);
return charge;
}
async function esperarPagamento(uniqueId, timeoutMs = 10 * 60 * 1000) {
const startedAt = Date.now();
while ((Date.now() - startedAt) < timeoutMs) {
const res = await fetch(`${BASE_URL}/status/${uniqueId}`);
const st = await res.json();
if (st.status === "paid") return st;
if (st.status === "canceled" || st.status === "expired") throw new Error(`Status final: ${st.status}`);
await new Promise(r => setTimeout(r, 3000));
}
throw new Error("Timeout aguardando pagamento");
}
5) Exemplo Python (requests)
import time
import requests
BASE_URL = "https://pay.pangeialabs.com"
def criar_cobranca(api_key: str):
payload = {
"buyer_name": "Joao da Silva",
"buyer_taxid": "12345678901",
"order_amount": 149.90,
"order_id": "PED-10001",
"api_key": api_key,
}
r = requests.post(f"{BASE_URL}/registrar", json=payload, timeout=20)
r.raise_for_status()
return r.json()
def esperar_status_pago(unique_id: str, max_wait_sec: int = 600):
t0 = time.time()
while time.time() - t0 < max_wait_sec:
r = requests.get(f"{BASE_URL}/status/{unique_id}", timeout=15)
r.raise_for_status()
data = r.json()
if data.get("status") == "paid":
return data
if data.get("status") in ("canceled", "expired"):
raise RuntimeError(f"Status final: {data.get('status')}")
time.sleep(3)
raise TimeoutError("Tempo limite aguardando pagamento")
# uso:
# charge = criar_cobranca("SUA_API_KEY")
# print(charge["url"])
# pago = esperar_status_pago(charge["unique_id"])
6) Exemplo cURL - validar credenciais
curl -X POST "https://pay.pangeialabs.com/auth" \
-H "Content-Type: application/json" \
-d '{
"api_key": "SUA_API_KEY",
"api_secret": "SEU_API_SECRET"
}'
7) Payload de IPN (callback)
{
"order_id": "PIXIA-1772489488-3468fc7e",
"order_status": "paid",
"order_amount": 10.0,
"unique_amount": 10.0,
"ipn_secret": "SEU_IPN_SECRET_DA_CONTA",
"paid_on": "2026-03-02T22:23:51.160000",
"paid_with": "pix",
"redirect_url": "https://seusite.com/retorno",
"description": "Pedido XYZ"
}
Valide a autenticidade comparando o ipn_secret recebido com o secret salvo na sua integração.
Status possíveis em order_status: pending, confirming, paid, canceled, processing, shipped, delivered.
Importante: seu endpoint deve aceitar qualquer transição de status a qualquer momento (sem máquina de estados restritiva), incluindo paid -> canceled e canceled -> paid.
| Cenário |
Comportamento esperado na integração |
Qualquer order_status | Aceitar e processar normalmente. |
Mudança invertida (ex.: paid -> canceled) | Tratar como atualização válida de estado. |
| Reenvio/duplicidade | Aplicar processamento idempotente no seu backend. |
8) Arquivos oficiais
/apidoc/openapi.yaml
/apidoc/examples