Receba pagamentos, envie saques e acompanhe cada transação. Uma API simples para colocar seu negócio em movimento.
PIXJSON + HTTPSSandbox separado
URL BASEhttps://www.slacepay.com
Uma chave. Seu ambiente.
Gere sua chave em Mini App → API e use o header Authorization: Bearer SUA_API_KEY em todas as rotas. As chaves são secretas: use somente no backend.
SANDBOX
sk_test_…
Teste com carteira e transações separadas.
PRODUÇÃO
sk_live_…
Opera com sua conta e saldo de produção.
O ambiente é definido pela chave; não envie parâmetro mode. Cada chave tem 64 caracteres hexadecimais após o prefixo. Rotacionar uma chave revoga as anteriores do ambiente.
COMECE EM MINUTOS
Crie sua primeira cobrança.
Valores de transações são em reais, com até duas casas decimais. Os exemplos abaixo são ilustrativos e não executam operações nesta página.
Node.js · exemplo no seu backend
const response = await fetch('https://www.slacepay.com/v1/payments', {
method: 'POST',
headers: {
Authorization: `Bearer ${process.env.SLACEPAY_API_KEY}`,
'Content-Type': 'application/json',
'Idempotency-Key': 'pedido-1043-v1',
},
body: JSON.stringify({ amount: 100, description: 'Pedido #1043' }),
});
const result = await response.json();
// Guarde result.data.id e consulte o pagamento até a confirmação.
Antes de integrar
Consulte suas taxas e limites em GET /v1/me. O padrão por transação é de R$ 2 a R$ 1.000 para recebimento e de R$ 10 a R$ 1.000 para saque. A taxa padrão para novos usuários é de 5% + R$ 1. Em um PIX de R$ 100, essa taxa resulta em R$ 94 líquidos; um saque de R$ 100 com taxa de R$ 5 debita R$ 105.
Um pagamento. Mais de um recebedor.
O campo opcional splits distribui o líquido entre usuários cadastrados e ativos na SlacePay. Use o id UUID da conta, disponível em GET /v1/me; não use o ID do Telegram. São até 20 destinatários únicos, sem incluir o criador.
Em cada item, informe amount em reais oupercentage com até duas casas decimais. O percentual incide sobre o líquido após a taxa do criador; frações de centavo são arredondadas para baixo. Cada parcela deve ser de ao menos R$ 0,01, a soma não pode superar o líquido e a soma dos percentuais não pode superar 100%.
Exemplo com taxa de 5% + R$ 1
Um pagamento de R$ 100 tem R$ 94 líquidos. O primeiro parceiro recebe R$ 10; o segundo, 20% de R$ 94 = R$ 18,80. O criador recebe os R$ 65,20 restantes. A taxa é cobrada uma vez; não há taxa adicional sobre as parcelas.
A distribuição é congelada na criação e creditada atomicamente na confirmação, em carteiras do mesmo ambiente. netAmount informa o líquido total e creditedAmount informa a parte do titular consultando a operação. O criador vê a divisão; cada parceiro vê somente sua parcela após a confirmação, sem código PIX, dados dos outros recebedores ou configurações de webhook. Uma devolução reverte todas as parcelas uma vez; saldo já gasto pode ficar negativo.
A confirmação chega ao seu sistema.
Ao criar o pagamento, inclua callbackUrl. A SlacePay envia POST JSON para essa URL nos eventos payment.created, payment.confirmed, payment.failed e payment.refunded. A criação é avisada após o aceite do provedor; resultado incerto não é aprovação. O webhook contém a visão do criador, sem código PIX, API key ou segredo.
Use HTTPS público, domínio DNS e porta 443, sem credenciais ou fragmento na URL. Endereços privados, locais e reservados são bloqueados também após resolver o DNS; redirecionamentos não são seguidos. A URL é destinada à sua integração e não substitui a confirmação financeira recebida pela gateway.
O campo opcional webhookSecret aceita 32 a 128 caracteres ASCII sem espaços e exige callbackUrl. Gere um segredo aleatório no seu servidor. Se omitir, derive o segredo com HMAC-SHA256, usando a API key que criou o pagamento como chave e o texto literal slacepay:webhook:v1 como mensagem, em hexadecimal. A configuração é congelada por pagamento; rotacionar a API key não altera assinaturas de cobranças existentes.
Node.js · valide assinatura e tempo
import { createHmac, timingSafeEqual } from 'node:crypto';
// Sem webhookSecret explícito, derive usando a chave que criou a cobrança:
const secret = createHmac('sha256', process.env.SLACEPAY_API_KEY)
.update('slacepay:webhook:v1').digest('hex');
// Se enviou webhookSecret no pagamento, use aquele segredo em seu lugar.
function verifyWebhook(rawBody, headers, paymentSecret) {
const timestamp = headers['x-slacepay-timestamp'];
const signature = headers['x-slacepay-signature'];
if (!/^\d{10,12}$/.test(timestamp || '') ||
Math.abs(Date.now() / 1000 - Number(timestamp)) > 300 ||
!/^sha256=[a-f0-9]{64}$/.test(signature || '')) return false;
const expected = createHmac('sha256', paymentSecret)
.update(timestamp + '.').update(rawBody).digest();
const actual = Buffer.from(signature.slice(7), 'hex');
return actual.length === expected.length && timingSafeEqual(actual, expected);
}
// rawBody deve conter os bytes originais; não serialize JSON novamente.
// Só processe após validar. Persista e deduplique pelo id do evento.
// Responda 2xx após armazenar com segurança; processe o trabalho em fila.
Headers: X-SlacePay-Signature: sha256=…, X-SlacePay-Timestamp em segundos Unix e X-SlacePay-Delivery-Id, igual ao id do evento. A assinatura usa timestamp + "." + corpo JSON original. O timestamp do header é renovado em cada tentativa; o corpo, ID e sequência permanecem iguais.
Responda 2xx para confirmar recebimento. Falhas e respostas fora de 2xx geram até 10 tentativas com intervalos crescentes, limitados a seis horas por intervalo. Destinos inseguros encerram a entrega. Os eventos aguardam a entrega anterior do mesmo pagamento ser concluída ou esgotada; use sequence para acompanhar a ordem. Uma resposta perdida pode causar reenvio: deduplique pelo ID. Registros terminais são retidos por 30 dias. Mantenha consultas ao pagamento como alternativa se sua URL estiver indisponível.
Repita com segurança.
Criação de pagamento e saque exigem Idempotency-Key: 8 a 128 caracteres entre letras, números, ponto, dois-pontos, hífen e sublinhado.
Na repetição, envie a mesma chave e o mesmo corpo. Um corpo diferente com a mesma chave retorna 409. Em timeout ou HTTP 202, guarde o ID e consulte a operação; se precisar reenviar, preserve a chave. Uma nova chave pode criar uma nova transação.
Cada estado tem um significado.
status
Significado
PENDING
Aguardando confirmação.
COMPLETED
Recebimento confirmado ou saque enviado.
FAILED
Falha definitiva da operação.
REFUNDED
Operação devolvida ou estornada.
submission acompanha o envio: CREATED, SUBMITTING, ACKNOWLEDGED, UNKNOWN, REJECTED ou MANUAL_REVIEW. UNKNOWN e MANUAL_REVIEW exigem acompanhamento e não confirmam pagamento nem saque.
201 indica solicitação processada; 202 indica resultado pendente/incerto. Consulte status para confirmar a movimentação. As consultas retornam o estado conhecido pela SlacePay. Acompanhe por consulta ou receba eventos na callbackUrl informada ao criar o pagamento.
HTTP
Como tratar
400
Confira o JSON, campos e formatos aceitos.
401 / 403
Confira a chave e a disponibilidade da conta.
404
O recurso não foi encontrado na sua conta e ambiente.
409
Conflito de idempotência: confira a chave e o corpo da solicitação.
422
Confira limites, saldo e taxas ou uma recusa financeira em data.status.
429
Aguarde Retry-After. Limite de 120 requisições/minuto por chave; há também limite por IP.
5xx
Serviço indisponível. Em escrita financeira, preserve a chave de idempotência.
Erros normalmente retornam { error: { code, message }, requestId }. Uma recusa financeira também pode retornar data.status = FAILED. Guarde o requestId para solicitar suporte.
REFERÊNCIA DA API
Do primeiro PIX ao último detalhe.
Todas as rotas abaixo exigem sua API key e acessam somente sua conta e o ambiente da chave.
6 rotas disponíveis
GET/v1/meConta
Consultar sua conta
Consulte cadastro, taxas e limites vigentes. Os valores fixedCents, minCents, maxCents e dailyCents estão em centavos; bps representa centésimos de percentual (500 = 5%).
Exemplo de requisição
cURL · substitua SUA_API_KEY
curl --request GET 'https://www.slacepay.com/v1/me' \
--header 'Authorization: Bearer SUA_API_KEY'
Envie amount e description. Opcionalmente inclua splits, callbackUrl e webhookSecret conforme os guias. A resposta inclui o código copia e cola e, quando disponível, o QR Code em base64. A criação não significa que o pagamento foi aprovado.
Idempotency-Key obrigatório
Corpo JSON
Campo
Tipo
Regra
amount
number
Valor em reais, com até duas casas decimais; sujeito aos limites da conta.
description
string
1 a 255 caracteres
splits
array
Opcional. Destinatários SlacePay: userId UUID e amount em reais OU percentage sobre o líquido. Consulte o guia de split.
callbackUrl
string
Opcional. URL HTTPS pública para eventos do pagamento, porta 443, sem credenciais ou fragmento.
webhookSecret
string
Opcional. Segredo HMAC exclusivo do pagamento; exige callbackUrl. Se omitido, derive com a API key conforme o guia de webhooks.
Consulte uma cobrança da sua conta pelo ID SlacePay. Destinatários de split podem consultar sua própria parcela após a confirmação. Acompanhe status até a confirmação; PENDING e submission UNKNOWN não significam aprovação.
Exemplo de requisição
cURL · substitua SUA_API_KEY
curl --request GET 'https://www.slacepay.com/v1/payments/7f29c80a-e041-4c25-9109-86184211b107' \
--header 'Authorization: Bearer SUA_API_KEY'
O mínimo padrão de saque é R$ 10. O saldo deve cobrir amount + fee. Tipos: CPF com 11 dígitos, CNPJ com 14, EMAIL, TELEFONE no formato +5511999999999 e CHAVE_ALEATORIA em UUID. Principal e taxa são reservados antes do envio. Não solicite um novo saque para substituir uma resposta incerta.
Idempotency-Key obrigatório
Corpo JSON
Campo
Tipo
Regra
amount
number
Valor em reais, com até duas casas decimais; sujeito aos limites da conta.
Consulte um saque da sua conta pelo ID SlacePay. COMPLETED confirma o envio; FAILED indica falha. Em falha definitiva, principal e taxa são devolvidos ao saldo uma vez.
Exemplo de requisição
cURL · substitua SUA_API_KEY
curl --request GET 'https://www.slacepay.com/v1/withdrawals/7f29c80a-e041-4c25-9109-86184211b107' \
--header 'Authorization: Bearer SUA_API_KEY'