Referência da API
Criar transação (BRL)
Cria uma transação de entrada via PIX. Retorna um BR Code copia-e-cola (pixCode) que seu cliente paga por qualquer app de banco; o webhook cashin.paid confirma. Para cartão, use os endpoints Cartão (token) e Cartão (PAN) — mesmo endpoint, paymentMethod: CREDIT_CARD. Multi-moeda: o campo opcional currency (padrão BRL) aceita MXN, ARS, COP e BOB. Fora do Brasil o paymentMethod é opcional — cada moeda tem um padrão — e o cpf não é exigido. A lista completa de trilhos, dados obrigatórios e limites está em Métodos de pagamento por moeda.
/transactions/v2/purchaserestrictPayerDocument Defina como true para travar a transação ao CPF/CNPJ informado em cpf. Se outra pessoa tentar pagar, o banco rejeita o PIX. Essa é a defesa mais forte contra fraude de roteamento de pagamento, onde um atacante paga por um terceiro e depois contesta a cobrança.Autenticação
HTTP Basic Auth. Envie sua secret key no header:
Authorization: Basic {base64(secret:SUA_SECRET_KEY)}Parâmetros
namestringobrigatórioNome completo do pagador (máximo 255 caracteres).
Exemplo: João Silva
emailstringobrigatórioE-mail válido do pagador. Usado para comprovantes e notificações ao cliente.
Exemplo: joaosilva@exemplo.com
cpfstringobrigatórioCPF (11 dígitos) ou CNPJ (14 dígitos) do pagador, apenas números. Sem máscara. Obrigatório para BRL; opcional para currency: MXN (documento brasileiro — no México o pagador não tem CPF, e o SPEI não usa documento do pagador).
Exemplo: 12345678901
phonestringobrigatórioTelefone do pagador, 8 a 12 dígitos numéricos. Obrigatório para BRL; opcional para currency: MXN.
Exemplo: 9876543210
amountnumberobrigatórioValor da transação em centavos. R$ 10,00 = 1000. R$ 0,01 = 1. Não há mínimo, mas valores muito baixos podem ser rejeitados pela instituição recebedora.
Exemplo: 1000
descriptionstringobrigatórioDescrição curta da transação que aparece no comprovante e no extrato bancário do pagador.
Exemplo: Assinatura Pro
responsibleDocumentstringobrigatórioCPF ou CNPJ da parte legal do seu negócio responsável por essa cobrança.
Exemplo: 12345678901
responsibleExternalIdstringobrigatórioID interno do responsável no seu sistema (ex: ID do vendedor, ID da conta).
Exemplo: user-1234
paymentMethod'PIX' | 'SPEI' | 'OXXO' | 'BANK_TRANSFER' | 'PSE' | 'NEQUI' | 'BREB' | 'QR'opcionalPara currency: BRL é obrigatório — use PIX (retorna um BR Code copia-e-cola). Nas demais moedas é OPCIONAL: cada uma tem um método padrão, e você só envia o campo para escolher outro. MXN: SPEI (padrão) ou OXXO. ARS: BANK_TRANSFER. COP: BANK_TRANSFER (padrão), PSE, NEQUI ou BREB. BOB: QR. Para cartão, use os endpoints Cartão (token) ou Cartão (PAN).
Exemplo: PIX
currency'BRL' | 'MXN' | 'ARS'opcionalCódigo da moeda. Padrão BRL (PIX/cartão). Também aceita MXN (SPEI ou OXXO), ARS (transferência), COP (transferência, PSE, Nequi ou Bre-B) e BOB (QR). Em BRL e MXN a instrução de pagamento vem na própria resposta; em ARS, COP e BOB ela chega alguns segundos depois, por polling em GET /transactions/:id. Em todas, amount continua em CENTAVOS da moeda.
Exemplo: BRL
externalIdstringopcionalSua referência para essa transação. Retornada em GET /transactions/:id?searchBy=externalId e em todo webhook vinculado a essa transação. Use como sua chave de join.
Exemplo: pedido-5678
referrerUrlstringopcionalURL da página de origem dessa transação.
Exemplo: https://exemplo.com/checkout
checkoutUrlstringopcionalURL da sua página de checkout hospedada, se aplicável.
Exemplo: https://exemplo.com/pagar/pedido-5678
postbackUrlstringopcionalURL de webhook para eventos dessa transação. Se omitido, usa a URL de webhook global configurada no dashboard.
Exemplo: https://seu-dominio.com/webhook
restrictPayerDocumentbooleanopcionalQuando true, apenas o titular do cpf informado pode pagar essa transação. Pagamentos de qualquer outro CPF/CNPJ são rejeitados pela instituição recebedora.
Exemplo: true
Body da requisição
Content-Type: application/json
{
"name": "João Silva",
"email": "joaosilva@exemplo.com",
"cpf": "12345678901",
"phone": "9876543210",
"amount": 1000,
"description": "Assinatura Pro",
"responsibleDocument": "12345678901",
"responsibleExternalId": "user-1234",
"externalId": "pedido-5678",
"postbackUrl": "https://seu-dominio.com/webhook",
"paymentMethod": "PIX",
"currency": "BRL"
}Respostas
Transação criada. pixCode é o BR Code copia-e-cola para exibir ao seu cliente; status fica PENDING até o pagamento (confirmado pelo webhook cashin.paid).
{
"id": "17913320791467683016950003",
"currency": "BRL",
"method": "PIX",
"installments": null,
"externalId": "pedido-5678",
"status": "PENDING",
"amount": 1000,
"postbackUrl": "https://seu-dominio.com/webhook",
"referrerUrl": null,
"pixCode": "00020126580014br.gov.bcb.pix...6304B0D2",
"expiresAt": "2026-10-07T15:32:01.923Z",
"createdAt": "2026-10-07T00:14:40.893Z",
"costFee": 2
}Transação MXN (SPEI). A resposta traz method: "SPEI" e uma clabe (CLABE de depósito) no lugar do pixCode — o pagador transfere via SPEI para essa CLABE. amount em centavos de pesos (1000 = MX$ 10,00).
{
"id": "17864385245624641191295936",
"currency": "MXN",
"method": "SPEI",
"installments": null,
"externalId": null,
"status": "PENDING",
"amount": 1000,
"postbackUrl": "https://seu-dominio.com/webhook",
"referrerUrl": null,
"clabe": "684180330080887521",
"expiresAt": null,
"createdAt": "2026-08-11T08:55:24.748Z",
"costFee": 100
}Erro de validação. O campo message descreve qual(is) campo(s) falharam.
{
"statusCode": 400,
"message": "The 'email' field must be a valid email address.",
"error": "Bad Request"
}API key inválida ou ausente.
{ "statusCode": 401, "message": "Unauthorized" }API key sem a permissão createTransaction.
{
"statusCode": 403,
"message": "You do not have permission to access this resource"
}Exemplos
curl -X POST "https://api.ihubplay.com/transactions/v2/purchase" \
-H "Authorization: Basic $(echo -n 'secret:SUA_SECRET_KEY' | base64)" \
-H "Content-Type: application/json" \
-d '{
"name": "João Silva",
"email": "joaosilva@exemplo.com",
"cpf": "12345678901",
"phone": "9876543210",
"amount": 1000,
"description": "Assinatura Pro",
"responsibleDocument": "12345678901",
"responsibleExternalId": "user-1234",
"externalId": "pedido-5678",
"postbackUrl": "https://seu-dominio.com/webhook",
"paymentMethod": "PIX",
"currency": "BRL"
}'const token = Buffer.from("secret:" + process.env.IHUBGAMES_SECRET_KEY).toString("base64");
const res = await fetch("https://api.ihubplay.com/transactions/v2/purchase", {
method: "POST",
headers: {
Authorization: `Basic ${token}`,
"Content-Type": "application/json",
},
body: JSON.stringify({
name: "João Silva",
email: "joaosilva@exemplo.com",
cpf: "12345678901",
phone: "9876543210",
amount: 1000,
description: "Assinatura Pro",
responsibleDocument: "12345678901",
responsibleExternalId: "user-1234",
externalId: "pedido-5678",
postbackUrl: "https://seu-dominio.com/webhook",
paymentMethod: "PIX",
currency: "BRL",
}),
});
const traceId = res.headers.get("x-trace-id");
console.log("trace:", traceId);
if (!res.ok) {
const err = await res.json();
throw new Error(`${err.message} (trace: ${traceId})`);
}
const tx = await res.json();
console.log("Código PIX:", tx.pixCode);import base64, json, os, requests
token = base64.b64encode(
f"secret:{os.environ['IHUBGAMES_SECRET_KEY']}".encode()
).decode()
res = requests.post(
"https://api.ihubplay.com/transactions/v2/purchase",
headers={
"Authorization": f"Basic {token}",
"Content-Type": "application/json",
},
json={
"name": "João Silva",
"email": "joaosilva@exemplo.com",
"cpf": "12345678901",
"phone": "9876543210",
"amount": 1000,
"description": "Assinatura Pro",
"responsibleDocument": "12345678901",
"responsibleExternalId": "user-1234",
"externalId": "pedido-5678",
"postbackUrl": "https://seu-dominio.com/webhook",
"paymentMethod": "PIX",
"currency": "BRL",
},
)
print("trace:", res.headers.get("x-trace-id"))
res.raise_for_status()
tx = res.json()
print("Código PIX:", tx["pixCode"])