SlacePayDevelopersBaixar OpenAPI ↗
SLACEPAY API · V1

Seu próximo PIX.
Integrado.

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.

JSON · substitua os IDs e o segredo
{
  "amount": 100,
  "description": "Pedido com parceiros",
  "splits": [
    {
      "userId": "5237c9d0-25dd-4453-86e0-41345b5b58dc",
      "amount": 10
    },
    {
      "userId": "65b6506e-c9ee-466c-87ef-6e6920254cab",
      "percentage": 20
    }
  ],
  "callbackUrl": "https://seusite.com/pagamentos/slacepay",
  "webhookSecret": "SUBSTITUA_POR_SEGREDO_ALEATORIO_32_OU_MAIS"
}

Em cada item, informe amount em reais ou percentage 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.

JSON · exemplo resumido
{
  "id": "8e4a4257-13b6-4b18-99ec-1940f210ea3f",
  "event": "payment.confirmed",
  "sequence": 2,
  "timestamp": "2026-10-23T15:00:00.000Z",
  "data": {
    "id": "7f29c80a-e041-4c25-9109-86184211b107",
    "mode": "test",
    "type": "CASH_IN",
    "status": "COMPLETED",
    "amount": 100,
    "fee": 6,
    "netAmount": 94,
    "creditedAmount": 65.2,
    "webhookEnabled": true
  }
}

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.

statusSignificado
PENDINGAguardando confirmação.
COMPLETEDRecebimento confirmado ou saque enviado.
FAILEDFalha definitiva da operação.
REFUNDEDOperaçã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.

HTTPComo tratar
400Confira o JSON, campos e formatos aceitos.
401 / 403Confira a chave e a disponibilidade da conta.
404O recurso não foi encontrado na sua conta e ambiente.
409Conflito de idempotência: confira a chave e o corpo da solicitação.
422Confira limites, saldo e taxas ou uma recusa financeira em data.status.
429Aguarde Retry-After. Limite de 120 requisições/minuto por chave; há também limite por IP.
5xxServiç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'
Exemplo de resposta
JSON · exemplo ilustrativo
{
  "data": {
    "id": "7f29c80a-e041-4c25-9109-86184211b107",
    "telegramId": "123456789",
    "status": "active",
    "mode": "test",
    "fees": {
      "cashIn": {
        "bps": 500,
        "fixedCents": 100
      },
      "cashOut": {
        "bps": 0,
        "fixedCents": 500
      }
    },
    "limits": {
      "cashIn": {
        "minCents": 200,
        "maxCents": 100000,
        "dailyCents": 10000000
      },
      "cashOut": {
        "minCents": 1000,
        "maxCents": 100000,
        "dailyCents": 5000000
      }
    },
    "livePayerConfigured": false
  }
}
GET/v1/balanceConta

Consultar saldo

Saldo disponível e reservado da sua conta no ambiente da chave utilizada. Todos os valores desta resposta estão em reais (BRL).

Exemplo de requisição
cURL · substitua SUA_API_KEY
curl --request GET 'https://www.slacepay.com/v1/balance' \
  --header 'Authorization: Bearer SUA_API_KEY'
Exemplo de resposta
JSON · exemplo ilustrativo
{
  "data": {
    "mode": "test",
    "currency": "BRL",
    "available": 94,
    "reserved": 0
  }
}
POST/v1/paymentsPIX

Criar pagamento PIX

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

CampoTipoRegra
amountnumberValor em reais, com até duas casas decimais; sujeito aos limites da conta.
descriptionstring1 a 255 caracteres
splitsarrayOpcional. Destinatários SlacePay: userId UUID e amount em reais OU percentage sobre o líquido. Consulte o guia de split.
callbackUrlstringOpcional. URL HTTPS pública para eventos do pagamento, porta 443, sem credenciais ou fragmento.
webhookSecretstringOpcional. Segredo HMAC exclusivo do pagamento; exige callbackUrl. Se omitido, derive com a API key conforme o guia de webhooks.
Exemplo de requisição
cURL · substitua SUA_API_KEY
curl --request POST 'https://www.slacepay.com/v1/payments' \
  --header 'Authorization: Bearer SUA_API_KEY' \
  --header 'Content-Type: application/json' \
  --header 'Idempotency-Key: pedido-1043-v1' \
  --data '{"amount":100,"description":"Pedido #1043"}'
Exemplo de resposta
JSON · exemplo ilustrativo
{
  "data": {
    "id": "7f29c80a-e041-4c25-9109-86184211b107",
    "mode": "test",
    "type": "CASH_IN",
    "status": "PENDING",
    "submission": "ACKNOWLEDGED",
    "amount": 100,
    "fee": 6,
    "netAmount": 94,
    "creditedAmount": 94,
    "webhookEnabled": false,
    "description": "Pedido #1043",
    "createdAt": "2026-10-22T15:00:00.000Z",
    "updatedAt": "2026-10-22T15:00:00.000Z",
    "copyPaste": "CODIGO_PIX_FORNECIDO_NA_RESPOSTA"
  }
}
GET/v1/payments/{id}PIX

Consultar pagamento

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'
Exemplo de resposta
JSON · exemplo ilustrativo
{
  "data": {
    "id": "7f29c80a-e041-4c25-9109-86184211b107",
    "mode": "test",
    "type": "CASH_IN",
    "status": "COMPLETED",
    "submission": "ACKNOWLEDGED",
    "amount": 100,
    "fee": 6,
    "netAmount": 94,
    "creditedAmount": 94,
    "webhookEnabled": false,
    "description": "Pedido #1043",
    "createdAt": "2026-10-22T15:00:00.000Z",
    "updatedAt": "2026-10-22T15:00:00.000Z",
    "copyPaste": "CODIGO_PIX_FORNECIDO_NA_RESPOSTA"
  }
}
POST/v1/withdrawalsSaques

Solicitar saque PIX

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

CampoTipoRegra
amountnumberValor em reais, com até duas casas decimais; sujeito aos limites da conta.
descriptionstring1 a 255 caracteres
pixKeystring3 a 140 caracteres
pixKeyTypestringCPF · CNPJ · EMAIL · TELEFONE · CHAVE_ALEATORIA
Exemplo de requisição
cURL · substitua SUA_API_KEY
curl --request POST 'https://www.slacepay.com/v1/withdrawals' \
  --header 'Authorization: Bearer SUA_API_KEY' \
  --header 'Content-Type: application/json' \
  --header 'Idempotency-Key: pedido-1043-v1' \
  --data '{"amount":100,"description":"Saque solicitado","pixKey":"[email protected]","pixKeyType":"EMAIL"}'
Exemplo de resposta
JSON · exemplo ilustrativo
{
  "data": {
    "id": "7f29c80a-e041-4c25-9109-86184211b107",
    "mode": "test",
    "type": "CASH_OUT",
    "status": "PENDING",
    "submission": "ACKNOWLEDGED",
    "amount": 100,
    "fee": 5,
    "description": "Saque solicitado",
    "createdAt": "2026-10-22T15:00:00.000Z",
    "updatedAt": "2026-10-22T15:00:00.000Z",
    "totalDebit": 105
  }
}
GET/v1/withdrawals/{id}Saques

Consultar saque

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'
Exemplo de resposta
JSON · exemplo ilustrativo
{
  "data": {
    "id": "7f29c80a-e041-4c25-9109-86184211b107",
    "mode": "test",
    "type": "CASH_OUT",
    "status": "COMPLETED",
    "submission": "ACKNOWLEDGED",
    "amount": 100,
    "fee": 5,
    "description": "Saque solicitado",
    "createdAt": "2026-10-22T15:00:00.000Z",
    "updatedAt": "2026-10-22T15:00:00.000Z",
    "totalDebit": 105
  }
}