Introdução à API SafeSplit
Bem-vindo à documentação da API SafeSplit. Aqui você encontrará tudo que precisa para integrar pagamentos PIX instantâneos em sua aplicação.
Nossa API segue os padrões REST e retorna respostas em JSON. Todas as requisições devem usar HTTPS.
Visão Geral
A API SafeSplit permite que você crie cobranças PIX, receba notificações de pagamento em tempo real via webhooks, e realize transferências (payouts) para qualquer chave PIX.
Pagamento Instantâneo
Confirmação em segundos, disponível 24/7
Webhooks em Tempo Real
Notificações instantâneas de eventos
Segurança
Assinatura HMAC em todas requisições
SDKs Disponíveis
PHP, Node.js, Python e mais
Ambientes
A SafeSplit oferece dois ambientes para integração:
| Ambiente | URL Base | Descrição |
|---|---|---|
| Sandbox | https://sandbox.safesplit.com.br/api/v1 |
Ambiente de testes. Use para desenvolvimento e homologação. |
| Produção | https://api.safesplit.com.br/api/v1 |
Ambiente de produção. Transações reais. |
Sempre teste sua integração no ambiente Sandbox antes de ir para produção. As credenciais são diferentes para cada ambiente.
Fluxo Básico de Integração
O processo de integração segue um fluxo simples:
Criar Conta
Registre-se na SafeSplit e obtenha suas credenciais de API (Client ID e Client Secret).
Configurar Webhook
Configure a URL de webhook no painel para receber notificações de pagamento.
Criar Cobrança
Use a API para gerar cobranças PIX e exiba o QR Code para seus clientes.
Receber Pagamento
Quando o cliente pagar, você recebe um webhook com a confirmação.
Autenticação
Todas as requisições à API SafeSplit devem ser autenticadas usando suas credenciais de API.
Credenciais de API
Após criar sua conta, você receberá duas credenciais:
| Credencial | Descrição | Exemplo |
|---|---|---|
| Client ID | Identificador público da sua conta | safesplit_cid_a1b2c3d4e5f6 |
| Client Secret | Chave secreta para autenticação | safesplit_sec_x9y8z7w6v5u4... |
Mantenha seu Client Secret seguro. Nunca o compartilhe ou exponha em código client-side (JavaScript no navegador).
Headers de Autenticação
Inclua suas credenciais em todas as requisições usando os headers:
X-Client-Id: seu_client_id
X-Client-Secret: seu_client_secret
Content-Type: application/json
Accept: application/json
Exemplo de Requisição Autenticada
curl -X GET "https://api.safesplit.com.br/api/v1/charges" \
-H "X-Client-Id: seu_client_id" \
-H "X-Client-Secret: seu_client_secret" \
-H "Content-Type: application/json" \
-H "Accept: application/json"
<?php
$curl = curl_init();
curl_setopt_array($curl, [
CURLOPT_URL => "https://api.safesplit.com.br/api/v1/charges",
CURLOPT_RETURNTRANSFER => true,
CURLOPT_HTTPHEADER => [
"X-Client-Id: seu_client_id",
"X-Client-Secret: seu_client_secret",
"Content-Type: application/json",
"Accept: application/json"
],
]);
$response = curl_exec($curl);
$data = json_decode($response, true);
curl_close($curl);
const axios = require('axios');
const response = await axios.get('https://api.safesplit.com.br/api/v1/charges', {
headers: {
'X-Client-Id': 'seu_client_id',
'X-Client-Secret': 'seu_client_secret',
'Content-Type': 'application/json',
'Accept': 'application/json'
}
});
console.log(response.data);
import requests
headers = {
'X-Client-Id': 'seu_client_id',
'X-Client-Secret': 'seu_client_secret',
'Content-Type': 'application/json',
'Accept': 'application/json'
}
response = requests.get(
'https://api.safesplit.com.br/api/v1/charges',
headers=headers
)
data = response.json()
Rotação de Credenciais
Por segurança, recomendamos rotacionar suas credenciais periodicamente. Você pode gerar novas credenciais no painel do merchant em Configurações → API.
Ao gerar novas credenciais, as antigas continuam válidas por 24 horas para evitar interrupções.
Criar Cobrança PIX
Crie uma cobrança PIX e receba o QR Code para pagamento.
/api/v1/charges
Parâmetros do Body
| Parâmetro | Tipo | Obrigatório | Descrição |
|---|---|---|---|
amount |
integer | Sim | Valor em centavos. Ex: 1000 = R$ 10,00 |
description |
string | Sim | Descrição da cobrança (máx. 255 caracteres) |
external_id |
string | Não | ID de referência do seu sistema |
expires_in |
integer | Não | Tempo de expiração em minutos (padrão: 60) |
customer |
object | Não | Dados do cliente (nome, email, document) |
metadata |
object | Não | Dados adicionais em formato chave-valor |
Exemplo de Requisição
{
"amount": 15000,
"description": "Pedido #12345 - Loja Virtual",
"external_id": "order_12345",
"expires_in": 30,
"customer": {
"name": "João da Silva",
"email": "joao@email.com",
"document": "12345678900"
},
"metadata": {
"order_id": "12345",
"product": "Camiseta Azul"
}
}
Exemplo de Resposta
{
"success": true,
"data": {
"uuid": "chg_a1b2c3d4-e5f6-7890-abcd-ef1234567890",
"amount": 15000,
"amount_formatted": "R$ 150,00",
"status": "pending",
"description": "Pedido #12345 - Loja Virtual",
"external_id": "order_12345",
"pix_key": "00020126580014br.gov.bcb.pix...",
"pix_qrcode": "data:image/png;base64,iVBORw0KGgo...",
"pix_qrcode_url": "https://api.safesplit.com.br/qr/chg_a1b2c3d4...",
"expires_at": "2026-01-15T15:30:00.000Z",
"created_at": "2026-01-15T15:00:00.000Z"
}
}
Exibindo o QR Code
O campo pix_qrcode contém o QR Code em formato Base64, pronto para ser exibido:
<img src="{{ $charge->pix_qrcode }}" alt="QR Code PIX" />
<!-- Ou usando a URL direta -->
<img src="{{ $charge->pix_qrcode_url }}" alt="QR Code PIX" />
Consultar Cobrança
Consulte os detalhes e status de uma cobrança específica.
/api/v1/charges/{uuid}
Parâmetros de URL
| Parâmetro | Tipo | Descrição |
|---|---|---|
uuid |
string | UUID da cobrança retornado na criação |
Exemplo de Resposta
{
"success": true,
"data": {
"uuid": "chg_a1b2c3d4-e5f6-7890-abcd-ef1234567890",
"amount": 15000,
"status": "paid",
"paid_at": "2026-01-15T15:05:32.000Z",
"payer": {
"name": "João da Silva",
"document": "***456789**"
}
}
}
Status Possíveis
| Status | Descrição |
|---|---|
pending |
Aguardando pagamento |
paid |
Pagamento confirmado |
expired |
Cobrança expirada |
cancelled |
Cobrança cancelada |
refunded |
Pagamento devolvido |
Listar Cobranças
Liste todas as cobranças da sua conta com filtros e paginação.
/api/v1/charges
Query Parameters
| Parâmetro | Tipo | Descrição |
|---|---|---|
status |
string | Filtrar por status (pending, paid, expired, cancelled) |
start_date |
date | Data inicial (formato: YYYY-MM-DD) |
end_date |
date | Data final (formato: YYYY-MM-DD) |
page |
integer | Página da listagem (padrão: 1) |
per_page |
integer | Itens por página (padrão: 20, máx: 100) |
Exemplo
curl -X GET "https://api.safesplit.com.br/api/v1/charges?status=paid&start_date=2026-01-01&per_page=50" \
-H "X-Client-Id: seu_client_id" \
-H "X-Client-Secret: seu_client_secret"
Cancelar Cobrança
Cancele uma cobrança pendente.
/api/v1/charges/{uuid}
Apenas cobranças com status pending podem ser canceladas.
Exemplo de Resposta
{
"success": true,
"message": "Cobrança cancelada com sucesso",
"data": {
"uuid": "chg_a1b2c3d4-e5f6-7890-abcd-ef1234567890",
"status": "cancelled",
"cancelled_at": "2026-01-15T15:10:00.000Z"
}
}
Webhooks
Receba notificações em tempo real sobre eventos na sua conta, como pagamentos confirmados.
Configuração
Configure a URL de webhook no painel do merchant em Configurações → Webhooks. Você pode configurar diferentes URLs para cada tipo de evento.
Sua URL de webhook deve usar HTTPS e responder com status 200 em até 30 segundos.
Estrutura do Webhook
Todos os webhooks são enviados via POST com o seguinte formato:
{
"event": "charge.paid",
"timestamp": "2026-01-15T15:05:32.000Z",
"data": {
"uuid": "chg_a1b2c3d4-e5f6-7890-abcd-ef1234567890",
"amount": 15000,
"status": "paid",
"external_id": "order_12345",
"paid_at": "2026-01-15T15:05:32.000Z",
"payer": {
"name": "João da Silva",
"document": "***456789**"
}
}
}
Eventos Disponíveis
| Evento | Descrição |
|---|---|
charge.created |
Nova cobrança criada |
charge.paid |
Pagamento confirmado |
charge.expired |
Cobrança expirou sem pagamento |
charge.cancelled |
Cobrança foi cancelada |
charge.refunded |
Pagamento foi devolvido |
payout.created |
Novo payout criado |
payout.completed |
Payout concluído com sucesso |
payout.failed |
Payout falhou |
Segurança - Validando Webhooks
Todos os webhooks incluem uma assinatura HMAC-SHA256 no header X-Webhook-Signature.
Sempre valide essa assinatura para garantir que o webhook veio da SafeSplit.
Headers do Webhook
Content-Type: application/json
X-Webhook-Signature: sha256=a1b2c3d4e5f6...
X-Webhook-Timestamp: 1705330532
X-Webhook-Id: whk_a1b2c3d4e5f6
Validando a Assinatura
<?php
function validateWebhook($payload, $signature, $secret) {
$expectedSignature = 'sha256=' . hash_hmac('sha256', $payload, $secret);
return hash_equals($expectedSignature, $signature);
}
// Recebendo o webhook
$payload = file_get_contents('php://input');
$signature = $_SERVER['HTTP_X_WEBHOOK_SIGNATURE'] ?? '';
$webhookSecret = 'seu_webhook_secret';
if (!validateWebhook($payload, $signature, $webhookSecret)) {
http_response_code(401);
exit('Assinatura inválida');
}
// Processar o webhook
$data = json_decode($payload, true);
$event = $data['event'];
switch ($event) {
case 'charge.paid':
// Pagamento confirmado!
$chargeId = $data['data']['uuid'];
$externalId = $data['data']['external_id'];
// Atualizar seu pedido...
break;
}
http_response_code(200);
echo json_encode(['received' => true]);
const crypto = require('crypto');
const express = require('express');
const app = express();
app.use('/webhook', express.raw({ type: 'application/json' }));
function validateWebhook(payload, signature, secret) {
const expectedSignature = 'sha256=' +
crypto.createHmac('sha256', secret)
.update(payload)
.digest('hex');
return crypto.timingSafeEqual(
Buffer.from(expectedSignature),
Buffer.from(signature)
);
}
app.post('/webhook', (req, res) => {
const signature = req.headers['x-webhook-signature'];
const webhookSecret = 'seu_webhook_secret';
if (!validateWebhook(req.body, signature, webhookSecret)) {
return res.status(401).send('Assinatura inválida');
}
const data = JSON.parse(req.body);
switch (data.event) {
case 'charge.paid':
console.log('Pagamento confirmado:', data.data.uuid);
// Processar pagamento...
break;
}
res.json({ received: true });
});
import hmac
import hashlib
from flask import Flask, request, jsonify
app = Flask(__name__)
def validate_webhook(payload, signature, secret):
expected = 'sha256=' + hmac.new(
secret.encode(),
payload,
hashlib.sha256
).hexdigest()
return hmac.compare_digest(expected, signature)
@app.route('/webhook', methods=['POST'])
def webhook():
signature = request.headers.get('X-Webhook-Signature', '')
webhook_secret = 'seu_webhook_secret'
if not validate_webhook(request.data, signature, webhook_secret):
return 'Assinatura inválida', 401
data = request.json
event = data['event']
if event == 'charge.paid':
charge_id = data['data']['uuid']
# Processar pagamento...
return jsonify({'received': True})
Retentativas
Se seu endpoint não retornar um status 2xx, tentaremos novamente:
- 1ª tentativa: imediatamente
- 2ª tentativa: após 5 minutos
- 3ª tentativa: após 30 minutos
- 4ª tentativa: após 2 horas
- 5ª tentativa: após 24 horas
Implemente idempotência no seu handler de webhook. O mesmo evento pode ser enviado mais de uma vez.
Criar Payout (Transferência)
Envie dinheiro para qualquer chave PIX de forma instantânea.
/api/v1/payouts
Você precisa ter saldo disponível na sua conta SafeSplit para realizar payouts.
Parâmetros do Body
| Parâmetro | Tipo | Obrigatório | Descrição |
|---|---|---|---|
amount |
integer | Sim | Valor em centavos |
pix_key_type |
string | Sim | Tipo da chave: cpf, cnpj, email, phone, random |
pix_key |
string | Sim | Chave PIX do destinatário |
description |
string | Não | Descrição da transferência |
external_id |
string | Não | ID de referência do seu sistema |
Tipos de Chave PIX
| Tipo | Formato | Exemplo |
|---|---|---|
cpf |
11 dígitos | 12345678900 |
cnpj |
14 dígitos | 12345678000199 |
email |
E-mail válido | joao@email.com |
phone |
+55 + DDD + número | +5511999998888 |
random |
Chave aleatória | a1b2c3d4-e5f6-7890-abcd... |
Exemplo de Requisição
{
"amount": 50000,
"pix_key_type": "cpf",
"pix_key": "12345678900",
"description": "Pagamento de comissão",
"external_id": "commission_001"
}
Exemplo de Resposta
{
"success": true,
"data": {
"uuid": "pay_x9y8z7w6-v5u4-t3s2-r1q0-p9o8n7m6l5k4",
"amount": 50000,
"amount_formatted": "R$ 500,00",
"status": "processing",
"pix_key_type": "cpf",
"pix_key": "***456789**",
"description": "Pagamento de comissão",
"external_id": "commission_001",
"created_at": "2026-01-15T15:00:00.000Z"
}
}
Consultar Payout
Consulte o status de uma transferência.
/api/v1/payouts/{uuid}
Exemplo de Resposta
{
"success": true,
"data": {
"uuid": "pay_x9y8z7w6-v5u4-t3s2-r1q0-p9o8n7m6l5k4",
"amount": 50000,
"status": "completed",
"pix_key_type": "cpf",
"pix_key": "***456789**",
"recipient": {
"name": "Maria Santos",
"bank": "Banco do Brasil"
},
"completed_at": "2026-01-15T15:00:05.000Z",
"end_to_end_id": "E12345678202601151500..."
}
}
Status Possíveis
| Status | Descrição |
|---|---|
pending |
Aguardando processamento |
processing |
Em processamento no banco |
completed |
Transferência concluída |
failed |
Falha na transferência |
Ambiente Sandbox
O Sandbox permite testar sua integração sem processar pagamentos reais. Todas as funcionalidades estão disponíveis, mas nenhum dinheiro é movimentado.
Ativando o Sandbox
Para usar o ambiente sandbox:
- Acesse o Painel do Merchant
- Vá em Sandbox no menu lateral
- Clique em "Ativar Sandbox"
- Copie as credenciais geradas (
sandbox_client_idesandbox_client_secret)
Credenciais
No modo sandbox, você receberá credenciais específicas:
| Campo | Formato | Uso |
|---|---|---|
sandbox_client_id |
sandbox_xxxxxxxxxx |
Identificação (opcional) |
sandbox_client_secret |
sk_sandbox_xxxxxxxxxx |
Token Bearer para autenticação |
Use o sandbox_client_secret no header Authorization:
# Request no ambiente sandbox
curl -X POST https://safesplit.com.br/api/v1/charges \
-H "Authorization: Bearer sk_sandbox_seu_token_aqui" \
-H "Content-Type: application/json" \
-d '{
"amount_cents": 1000,
"description": "Cobrança de teste"
}'
Comportamento no Sandbox
- Criação de cobranças
- Criação de saques
- QR Code gerado (simulado)
- Webhooks enviados
- Todas as validações
- Eventos e logs
- Pagamentos Pix (não geram transação real)
- Transferências de saque
- Confirmações bancárias
- Saldo da conta (valores fictícios)
Simulando Pagamentos
No sandbox, você pode simular o pagamento de uma cobrança de duas formas:
1. Via Painel
Acesse Sandbox no painel e clique em "Pagar" na cobrança desejada.
2. Via API
# Simular pagamento de cobrança
POST /api/v1/sandbox/charges/{uuid}/pay
# Simular expiração de cobrança
POST /api/v1/sandbox/charges/{uuid}/expire
# Simular conclusão de saque
POST /api/v1/sandbox/payouts/{uuid}/complete
# Simular falha de saque
POST /api/v1/sandbox/payouts/{uuid}/fail
Exemplo: Simular Pagamento
# Simular pagamento de uma cobrança
curl -X POST https://safesplit.com.br/api/v1/sandbox/charges/550e8400-e29b-41d4-a716-446655440000/pay \
-H "Authorization: Bearer sk_sandbox_seu_token" \
-H "Content-Type: application/json"
Resposta
{
"success": true,
"message": "Pagamento simulado com sucesso. Webhooks serão enviados normalmente.",
"simulation": {
"type": "charge_paid",
"payer": {
"payer_name": "João Silva",
"payer_document": "123.456.789-00",
"payer_bank_name": "Nubank",
"payer_bank_ispb": "18236120"
}
},
"charge": {
"uuid": "550e8400-e29b-41d4-a716-446655440000",
"status": "paid",
"amount_cents": 1000,
"paid_at": "2024-01-15T10:30:00Z"
}
}
Valores Especiais para Testes
Use valores específicos para simular diferentes cenários:
| Valor (centavos) | Valor (reais) | Comportamento |
|---|---|---|
1 |
R$ 0,01 | Erro Simula falha de pagamento ou saque recusado |
2 |
R$ 0,02 | Timeout Simula timeout ou operação pendente |
66600 |
R$ 666,00 | Parcial Simula pagamento parcial (metade do valor) |
| Qualquer outro | - | Sucesso Operação bem sucedida |
# Criar cobrança que simulará erro no pagamento
curl -X POST https://safesplit.com.br/api/v1/charges \
-H "Authorization: Bearer sk_sandbox_seu_token" \
-H "Content-Type: application/json" \
-d '{
"amount_cents": 1,
"description": "Teste de erro"
}'
Webhooks no Sandbox
Os webhooks funcionam normalmente no sandbox. Configure uma URL específica para receber os webhooks de teste:
- Acesse Sandbox no painel
- Configure o campo Webhook URL (Sandbox)
- Todos os eventos gerados no sandbox serão enviados para essa URL
Endpoints Disponíveis
| Método | Endpoint | Descrição |
|---|---|---|
| GET | /api/v1/sandbox/status |
Verifica status do sandbox e features disponíveis |
| POST | /api/v1/sandbox/credentials/regenerate |
Regenera credenciais sandbox |
| POST | /api/v1/sandbox/charges/{uuid}/pay |
Simula pagamento de cobrança |
| POST | /api/v1/sandbox/charges/{uuid}/expire |
Simula expiração de cobrança |
| POST | /api/v1/sandbox/payouts/{uuid}/complete |
Simula conclusão de saque |
| POST | /api/v1/sandbox/payouts/{uuid}/fail |
Simula falha de saque |
Boas Práticas
- Teste todos os cenários antes de ir para produção
- Configure uma URL de webhook para testes
- Use valores especiais para testar erros
- Mantenha credenciais sandbox separadas
- Valide a assinatura dos webhooks
- Usar credenciais sandbox em produção
- Expor o
sandbox_client_secret - Ignorar erros durante os testes
- Deixar o sandbox ativo em produção
- Testar com dados de clientes reais
Códigos de Erro
Lista de erros que podem ser retornados pela API e como tratá-los.
Estrutura do Erro
Quando ocorre um erro, a API retorna um objeto JSON com os detalhes:
{
"success": false,
"error": {
"code": "validation_error",
"message": "Os dados fornecidos são inválidos",
"details": {
"amount": ["O campo amount é obrigatório"],
"description": ["O campo description deve ter no máximo 255 caracteres"]
}
}
}
Códigos HTTP
| Código | Status | Descrição |
|---|---|---|
200 |
OK | Requisição bem-sucedida |
201 |
Created | Recurso criado com sucesso |
400 |
Bad Request | Requisição malformada ou parâmetros inválidos |
401 |
Unauthorized | Credenciais inválidas ou ausentes |
403 |
Forbidden | Sem permissão para acessar o recurso |
404 |
Not Found | Recurso não encontrado |
422 |
Unprocessable Entity | Erro de validação nos dados |
429 |
Too Many Requests | Limite de requisições excedido |
500 |
Internal Server Error | Erro interno do servidor |
Códigos de Erro da API
| Código | Descrição | Ação Recomendada |
|---|---|---|
invalid_credentials |
Credenciais de API inválidas | Verifique seu Client ID e Client Secret |
validation_error |
Dados inválidos na requisição | Verifique os campos indicados em "details" |
resource_not_found |
Recurso não encontrado | Verifique o UUID informado |
insufficient_balance |
Saldo insuficiente para payout | Adicione saldo à sua conta |
charge_already_paid |
Cobrança já foi paga | Não é possível modificar cobranças pagas |
charge_expired |
Cobrança expirada | Crie uma nova cobrança |
invalid_pix_key |
Chave PIX inválida | Verifique o formato da chave PIX |
pix_key_not_found |
Chave PIX não encontrada | A chave PIX não existe no DICT |
rate_limit_exceeded |
Limite de requisições excedido | Aguarde antes de fazer novas requisições |
merchant_inactive |
Conta merchant inativa | Entre em contato com o suporte |
Rate Limiting
A API possui limites de requisições para garantir estabilidade:
| Plano | Limite por Minuto | Limite por Hora |
|---|---|---|
| Starter | 60 requisições | 1.000 requisições |
| Profissional | 300 requisições | 10.000 requisições |
| Enterprise | Ilimitado* | Ilimitado* |
Os headers de resposta incluem informações sobre o limite:
X-RateLimit-Limit: 60
X-RateLimit-Remaining: 45
X-RateLimit-Reset: 1705330600
SDKs e Bibliotecas
Use nossos SDKs oficiais para integrar mais rapidamente.
PHP SDK
v2.0.0Para aplicações Laravel, Symfony, WordPress e PHP puro.
composer require safesplit/safesplit-php
Node.js SDK
v2.0.0Para aplicações Express, NestJS, Next.js e Node.js.
npm install @safesplit/sdk
Python SDK
v2.0.0Para aplicações Django, Flask, FastAPI e Python.
pip install safesplit
Ruby SDK
v1.0.0Para aplicações Ruby on Rails e Sinatra.
gem install safesplit
Exemplo de Uso - PHP SDK
<?php
use SafeSplit\SafeSplit;
use SafeSplit\Exceptions\SafeSplitException;
// Inicializar o cliente
$safesplit = new SafeSplit([
'client_id' => 'seu_client_id',
'client_secret' => 'seu_client_secret',
'environment' => 'sandbox' // ou 'production'
]);
// Criar uma cobrança
try {
$charge = $safesplit->charges->create([
'amount' => 15000, // R$ 150,00
'description' => 'Pedido #12345',
'external_id' => 'order_12345',
'customer' => [
'name' => 'João da Silva',
'email' => 'joao@email.com',
'document' => '12345678900'
]
]);
echo "QR Code: " . $charge->pix_qrcode;
echo "Código PIX: " . $charge->pix_key;
} catch (SafeSplitException $e) {
echo "Erro: " . $e->getMessage();
}
// Consultar cobrança
$charge = $safesplit->charges->find('chg_a1b2c3d4...');
echo "Status: " . $charge->status;
// Criar payout
$payout = $safesplit->payouts->create([
'amount' => 50000,
'pix_key_type' => 'cpf',
'pix_key' => '12345678900'
]);
Exemplo de Uso - Node.js SDK
const { SafeSplit } = require('@safesplit/sdk');
// Inicializar o cliente
const safesplit = new SafeSplit({
clientId: 'seu_client_id',
clientSecret: 'seu_client_secret',
environment: 'sandbox' // ou 'production'
});
// Criar uma cobrança
async function createCharge() {
try {
const charge = await safesplit.charges.create({
amount: 15000, // R$ 150,00
description: 'Pedido #12345',
externalId: 'order_12345',
customer: {
name: 'João da Silva',
email: 'joao@email.com',
document: '12345678900'
}
});
console.log('QR Code:', charge.pixQrcode);
console.log('Código PIX:', charge.pixKey);
return charge;
} catch (error) {
console.error('Erro:', error.message);
}
}
// Webhook handler (Express)
app.post('/webhook', safesplit.webhooks.verify('seu_webhook_secret'), (req, res) => {
const event = req.body;
switch (event.event) {
case 'charge.paid':
console.log('Pagamento recebido:', event.data.uuid);
break;
}
res.json({ received: true });
});
Postman Collection
Importe nossa coleção do Postman para testar a API rapidamente:
Baixar Postman CollectionPronto para começar?
Crie sua conta e comece a integrar pagamentos PIX em minutos.