Referência da API
Criar link de pagamento
Cria um QuickLink: cobrança rápida via PIX com URL pública (pay.${BRAND.domain}/p/seu-slug-de-conta/:slug). Tem amount próprio, NÃO depende de Product/Offer. Quando alguém paga, gera Transaction direta — sem Customer, sem Invoice.
Multi-uso: 1 link → N transações de pessoas diferentes.
A chave de API precisa da permissão isInvoiceAvailable.
/v2/quick-linksamount Use QuickLink pra cobrança avulsa one-time (doação, mensalidade, consulta). Pra catálogo com produto/ofertas recorrentes, use POST /v2/offers. Pra cobrar cliente específico, use POST /v2/invoices (avulsa) ou POST /v2/subscriptions (standalone).Autenticação
HTTP Basic Auth. Envie sua secret key no header:
Authorization: Basic {base64(secret:SUA_SECRET_KEY)}Parâmetros
namestringobrigatórioNome interno do link (NÃO é exibido ao cliente final). Mostrado nas suas listagens e relatórios.
Exemplo: Doação de Natal
slugstringobrigatórioParte final da URL pública (pay.${BRAND.domain}/p/seu-slug-de-conta/<slug>). 3-60 caracteres, apenas a-z, 0-9 e hífen. Único por conta.
Exemplo: doacao-natal
amountnumber (centavos)obrigatórioValor da cobrança em centavos. Mínimo R$ 1,00 (100). Máximo R$ 50.000,00 (5000000).
Exemplo: 5000
descriptionstring | nullopcionalTexto exibido ao pagador no checkout. Opcional. Max 500 chars.
Exemplo: Sua contribuição pro projeto
validFromstring (ISO 8601)opcionalData a partir da qual o link aceita pagamentos. Pode estar no passado.
Exemplo: 2026-12-01T00:00:00.000Z
validUntilstring (ISO 8601)opcionalData de expiração do link. Não pode estar no passado — o servidor rejeita com 400. Se omitido, o link nunca expira.
Exemplo: 2026-12-31T23:59:59.000Z
maxUsesnumber | nullopcionalLimite global de pagamentos aceitos. null ou ausente = ilimitado. Máximo: 1.000.000.
Exemplo: 1000
metadataobjectopcionalJSON arbitrário pra anexar dados do seu sistema. Max 8KB.
Exemplo: { "campaign": "natal-2026" }
Body da requisição
Content-Type: application/json
{
"name": "Doação de Natal",
"slug": "doacao-natal",
"description": "Sua contribuição pro projeto",
"amount": 5000,
"validFrom": "2026-12-01T00:00:00.000Z",
"validUntil": "2026-12-31T23:59:59.000Z",
"maxUses": 1000,
"metadata": { "campaign": "natal-2026" }
}Respostas
QuickLink criado. amount e totalRevenue em centavos.
{
"id": "ql_a8f3d2e1-9b4c-4e5f-8a7d-2e5f6c1d4b9a",
"createdByUserId": "u-1234",
"name": "Doação de Natal",
"slug": "doacao-natal",
"description": "Sua contribuição pro projeto",
"amount": 5000,
"status": "ACTIVE",
"validFrom": "2026-12-01T00:00:00.000Z",
"validUntil": "2026-12-31T23:59:59.000Z",
"maxUses": 1000,
"currentUses": 0,
"transactionsGenerated": 0,
"totalRevenue": 0,
"metadata": { "campaign": "natal-2026" },
"deletedAt": null,
"createdAt": "2026-05-26T14:32:01.923Z",
"updatedAt": "2026-05-26T14:32:01.923Z"
}Validação falhou: slug em uso, slug com formato inválido, amount fora de range, validUntil no passado, ou campos legacy (offerId, daysToDue, billingCycle, etc) enviados.
{
"status": 400,
"error": "Slug \"doacao-natal\" ja esta em uso"
}Exemplos
curl -X POST "https://api.ihubplay.com/v2/quick-links" \
-H "Authorization: Basic $(echo -n 'secret:SUA_SECRET_KEY' | base64)" \
-H "Content-Type: application/json" \
-d '{
"name": "Doação de Natal",
"slug": "doacao-natal",
"amount": 5000
}'const token = Buffer.from("secret:" + process.env.IHUBGAMES_SECRET_KEY).toString("base64");
const res = await fetch("https://api.ihubplay.com/v2/quick-links", {
method: "POST",
headers: { Authorization: `Basic ${token}`, "Content-Type": "application/json" },
body: JSON.stringify({
name: "Doação de Natal",
slug: "doacao-natal",
amount: 5000,
maxUses: 1000,
}),
});
const link = await res.json();
// URL pública é construída pelo seu sistema com o slug da sua conta:
// https://pay.ihubplay.com/p/SEU_USER_SLUG/<link.slug>
console.log("Slug:", link.slug);