Referência da API
Criar transação (MXN)
Cria uma transação de entrada em MXN (pesos mexicanos). Dois métodos, escolhidos pelo paymentMethod: SPEI (padrão) devolve uma clabe de 18 dígitos para o pagador transferir pelo app do banco, e confirma em segundos; OXXO devolve uma reference com código de barras para pagar em dinheiro na loja, e pode levar horas ou dias. É o mesmo endpoint do PIX — POST /transactions/v2/purchase — mudando currency para "MXN". Nos dois, a instrução vem na própria resposta, e o webhook cashin.paid confirma o pagamento. Conceitos em México (MXN).
/transactions/v2/purchasecurrency A moeda é definida na criação da conta e travada após a primeira transação — o currency do request precisa casar com a moeda da conta. Uma conta MXN opera sempre em pesos (saldo, taxas, faturas e transações todos em MXN); uma conta BRL não recebe SPEI e vice-versa.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: Juan Pérez
emailstringobrigatórioE-mail válido do pagador. Usado para comprovantes e notificações ao cliente.
Exemplo: juan@ejemplo.com
amountnumberobrigatórioValor da transação em centavos de peso. MX$ 10,00 = 1000. Mesma unidade do BRL — não é mil pesos.
Exemplo: 1000
descriptionstringobrigatórioDescrição curta da transação que aparece no comprovante do pagador.
Exemplo: Suscripción 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
currency'MXN'obrigatórioCódigo da moeda. Para SPEI/México use "MXN". O amount continua em CENTAVOS (de pesos — 1000 = MX$ 10,00). Omitir currency cai no padrão BRL (PIX) — veja Criar transação (PIX).
Exemplo: MXN
paymentMethod'SPEI' | 'OXXO'opcionalOpcional para currency: MXN — default SPEI. SPEI: o comprador transfere pelo app do banco para a clabe que volta na resposta; confirma em segundos. OXXO: o comprador leva a reference (com código de barras) a uma loja e paga em dinheiro; pode levar horas ou dias, e o email do pagador passa a ser obrigatório.
Exemplo: SPEI
cpfstringopcionalNão obrigatório em MXN — é um documento brasileiro (CPF/CNPJ) e o SPEI não usa documento do pagador. Envie só name/email (+ phone opcional). No BRL o cpf continua obrigatório.
phonestringopcionalTelefone do pagador, 8 a 12 dígitos numéricos. Opcional para currency: MXN.
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
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
Body da requisição
Content-Type: application/json
{
"name": "Juan Pérez",
"email": "juan@ejemplo.com",
"amount": 1000,
"currency": "MXN",
"description": "Suscripción Pro",
"responsibleDocument": "12345678901",
"responsibleExternalId": "user-1234",
"externalId": "pedido-5678",
"postbackUrl": "https://seu-dominio.com/webhook",
"paymentMethod": "SPEI"
}Respostas
Transação MXN criada. A resposta traz method: "SPEI" e uma clabe (CLABE de depósito, 18 dígitos) no lugar do pixCode — o pagador transfere via SPEI para essa CLABE. status fica PENDING até o SPEI cair (confirmado pelo webhook cashin.paid). amount em centavos de pesos (1000 = MX$ 10,00).
{
"id": "17864385245624641191295936",
"currency": "MXN",
"method": "SPEI",
"installments": null,
"externalId": "pedido-5678",
"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
# OXXO — dinheiro no balcão. Muda só o paymentMethod.
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": "Luis Legs",
"email": "luis@ejemplo.com",
"amount": 10000,
"currency": "MXN",
"paymentMethod": "OXXO",
"description": "Suscripción Pro",
"responsibleDocument": "12345678901",
"responsibleExternalId": "user-1234"
}'
# Volta "reference" e, em paymentInstruction, o "barcode" (PNG).
# Mostre os DOIS — muita loja lê o código de barras em vez de digitar.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": "Juan Pérez",
"email": "juan@ejemplo.com",
"amount": 1000,
"currency": "MXN",
"description": "Suscripción Pro",
"responsibleDocument": "12345678901",
"responsibleExternalId": "user-1234",
"externalId": "pedido-5678",
"postbackUrl": "https://seu-dominio.com/webhook"
}'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: "Juan Pérez",
email: "juan@ejemplo.com",
amount: 1000,
currency: "MXN",
description: "Suscripción Pro",
responsibleDocument: "12345678901",
responsibleExternalId: "user-1234",
externalId: "pedido-5678",
postbackUrl: "https://seu-dominio.com/webhook",
}),
});
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("CLABE SPEI:", tx.clabe);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": "Juan Pérez",
"email": "juan@ejemplo.com",
"amount": 1000,
"currency": "MXN",
"description": "Suscripción Pro",
"responsibleDocument": "12345678901",
"responsibleExternalId": "user-1234",
"externalId": "pedido-5678",
"postbackUrl": "https://seu-dominio.com/webhook",
},
)
print("trace:", res.headers.get("x-trace-id"))
res.raise_for_status()
tx = res.json()
print("CLABE SPEI:", tx["clabe"])