Documentação da API CremePay
API REST completa para pagamentos PIX. Crie cobranças, realize transferências, gerencie webhooks e rastreie conversões em tempo real.
Visão Geral
A API do CremePay permite integrar pagamentos PIX diretamente na sua aplicação. Utilize JSON para envio e recebimento de dados, seguindo os padrões REST.
Base URL
Health Check
Verifique o status da API a qualquer momento:
curl https://api.cremepay.com/health
{
"success": true,
"data": {
"status": "ok",
"version": "1.0.0",
"timestamp": "2026-02-11T12:00:00Z"
}
}
Rate Limits
Para garantir estabilidade, aplicamos limites por plano:
| Plano | Req/Minuto | Req/Dia |
|---|---|---|
| Básico | 60 | 10.000 |
| Profissional | 300 | 100.000 |
| Enterprise | Ilimitado | Ilimitado |
Formato de Resposta
Todas as respostas da API seguem o mesmo formato padrão:
{
"success": true,
"data": { ... }
}
{
"success": false,
"error": {
"code": 400,
"message": "Descrição do erro",
"errors": ["campo X é obrigatório"]
}
}
Autenticação
Todas as requisições devem incluir suas chaves de API nos headers. Encontre suas chaves no painel em Configurações → Chaves de API.
Método 1 — Headers X-Key
X-Public-Key: pk_live_xxxxxxxxxxxxxxxxxxxxxxxx X-Secret-Key: sk_live_xxxxxxxxxxxxxxxxxxxxxxxx Content-Type: application/json
Método 2 — Bearer Token
Authorization: Bearer sk_live_xxxxxxxxxxxxxxxxxxxxxxxx Content-Type: application/json
sk_) no frontend ou em repositórios públicos. Todas as requisições devem ser feitas pelo seu servidor backend.Ambientes
| Ambiente | Prefixo da Chave | Base URL |
|---|---|---|
| Producao | pk_live_ / sk_live_ | api.cremepay.com |
| Sandbox | pk_test_ / sk_test_ | sandbox.cremepay.com |
API Key vs Webhook Secret
| API Key | Webhook Secret | |
|---|---|---|
| Formato | pk_live_... / sk_live_... | whsec_... |
| Onde gerenciar | app.cremepay.com/api-key.php | app.cremepay.com/webhooks.php |
| Para que serve | Autenticar suas chamadas a API | Validar eventos que nos enviamos a voce |
| Quem usa | Seu backend → CremePay | CremePay → Seu backend |
| Quantas | 1 par por merchant | 1 por webhook (multiplos webhooks permitidos) |
whsec_ gerado ao criar o webhook. Ver validacao de webhooks →Códigos de Erro
A API utiliza códigos HTTP padrão para indicar sucesso ou falha.
| Código | Status | Descrição |
|---|---|---|
| 200 | OK | Requisição processada com sucesso |
| 201 | Created | Recurso criado com sucesso |
| 400 | Bad Request | Parâmetros inválidos ou ausentes |
| 401 | Unauthorized | Chaves de API inválidas ou ausentes |
| 403 | Forbidden | Sem permissão para este recurso |
| 404 | Not Found | Recurso não encontrado |
| 422 | Unprocessable | Validação falhou (verifique campo errors) |
| 429 | Too Many Requests | Rate limit excedido |
| 500 | Internal Error | Erro interno do servidor |
| 503 | Unavailable | Gateway não configurado ou em manutenção |
Criar Cobrança PIX
Gera um QR Code PIX para recebimento. O pagador escaneia o QR Code ou copia o código Copia e Cola.
/v1/pix/cashin · /pix/cashin
Cria uma cobrança PIX e retorna o QR Code (base64) e código Copia e Cola.
Parâmetros
| Parâmetro | Tipo | Obrig. | Descrição |
|---|---|---|---|
| amount | number | Sim | Valor em reais (mínimo R$ 1.00) |
| external_id | string | Não | Identificador único do seu sistema (alias: order_id) |
| description | string | Não | Descrição da cobrança |
| customer.name | string | Não | Nome do pagador (alias: payer_name) |
| customer.document | string | Não | CPF ou CNPJ (alias: payer_document) |
| customer.email | string | Não | Email (alias: payer_email) |
| customer.phone | string | Não | Telefone (alias: payer_phone) |
| webhook_url | string | Não | URL de callback (alias: postback_url) |
| link_id | string | Não | ID do link de pagamento (tracking) |
| checkout_id | string | Não | ID do checkout (tracking) |
| utm_source | string | Não | UTM Source para rastreamento |
| utm_medium | string | Não | UTM Medium |
| utm_campaign | string | Não | UTM Campaign |
Exemplo de Requisição
curl -X POST https://api.cremepay.com/v1/pix/charge \ -H "Authorization: Bearer sk_live_xxx" \ -H "Content-Type: application/json" \ -d '{ "amount": 150.00, "external_id": "pedido_12345", "description": "Pagamento Pedido #12345", "customer": { "name": "João Silva", "document": "12345678900", "email": "joao@email.com" }, "webhook_url": "https://seusite.com/webhook" }'
Resposta de Sucesso
{
"success": true,
"data": {
"transaction_id": "TX-ABC123DEF456",
"id": "TX-ABC123DEF456",
"external_id": "pedido_12345",
"status": "PENDING",
"amount": 150.00,
"amount_cents": 15000,
"pix_code": "00020126580014br.gov.bcb.pix...",
"qr_code": "00020126580014br.gov.bcb.pix...",
"qr_code_base64": "data:image/png;base64,iVBORw0K...",
"pix": {
"qr_code": "00020126...",
"qr_code_base64": "data:image/png;base64,...",
"expires_at": "2026-02-11T15:30:00Z"
},
"expires_at": "2026-02-11T15:30:00Z",
"gateway_transaction_id": "GTW-789...",
"created_at": "2026-02-11T15:00:00Z"
}
}
pix_generated é registrado automaticamente com geolocalização do pagador.Consultar Cobrança
Consulte o status e detalhes completos de uma cobrança pelo ID da transação ou external_id.
Retorna os detalhes de uma cobrança. O parâmetro {id} pode ser o transaction_id ou external_id.
Resposta
{
"success": true,
"data": {
"id": "TX-ABC123",
"status": "paid",
"amount": 150.00,
"amount_cents": 15000,
"tax": 4.49,
"net_amount": 145.51,
"order_id": "pedido_12345",
"description": "Pagamento Pedido #12345",
"customer": {
"name": "João Silva",
"document": "***456***00",
"email": "joao@email.com"
},
"paid_at": "2026-02-11T15:02:15Z",
"created_at": "2026-02-11T15:00:00Z"
}
}
Payout (Cash-Out)
Realiza uma transferência PIX para outra conta. O valor é debitado do seu saldo disponível.
/v1/pix/cashout
Envia um PIX para a chave especificada. O tipo da chave é detectado automaticamente.
Parâmetros
| Parâmetro | Tipo | Obrig. | Descrição |
|---|---|---|---|
| amount | number | Sim | Valor em reais (mínimo R$ 1.00) |
| pix_key | string | Sim | Chave PIX do destinatário |
| recipient_name | string | Não | Nome do destinatário |
| recipient_document | string | Não | CPF/CNPJ do destinatário |
| order_id | string | Não | Identificador único |
Resposta
{
"success": true,
"data": {
"id": "TX-XYZ789",
"status": "pending",
"amount": 500.00,
"amount_cents": 50000,
"recipient": {
"name": "Maria Souza",
"pix_key": "maria@email.com",
"pix_key_type": "email"
},
"gateway_transaction_id": "GTW-456...",
"created_at": "2026-02-11T16:00:00Z"
}
}
pix_key_type é detectado automaticamente (cpf, cnpj, email, phone, random). O saldo é debitado imediatamente ao criar o payout.Consultar Saldo
Retorna o saldo disponível, bloqueado e total da sua conta.
{
"success": true,
"data": {
"available": 15420.50,
"blocked": 500.00,
"total": 15920.50,
"currency": "BRL",
"updated_at": "2026-02-11T16:30:00Z"
}
}
Listar Transações
Lista todas as transações da sua conta com filtros e paginação.
Query Parameters
| Parâmetro | Tipo | Padrão | Descrição |
|---|---|---|---|
| page | integer | 1 | Página |
| limit | integer | 25 | Itens por página (máx. 100) |
| status | string | — | pending, paid, cancelled |
| type | string | — | DEPOSIT ou WITHDRAW |
| date_from | date | — | Data início (YYYY-MM-DD) |
| date_to | date | — | Data fim (YYYY-MM-DD) |
Exemplo
curl "https://api.cremepay.com/v1/transactions?status=paid&limit=10" \
-H "Authorization: Bearer sk_live_xxx"
{
"success": true,
"data": {
"items": [
{
"id": "TX-ABC123",
"type": "deposit",
"status": "paid",
"amount": 150.00,
"tax": 4.49,
"net_amount": 145.51,
"description": "Pedido #12345",
"customer": { "name": "João Silva" },
"created_at": "2026-02-11T15:00:00Z"
}
],
"pagination": {
"page": 1,
"limit": 10,
"total": 284,
"total_pages": 29
}
}
}
Webhooks
Receba notificacoes em tempo real sobre eventos de pagamento e saque. Cada webhook tem seu proprio secret (whsec_...) para validacao HMAC-SHA256.
sk_live_...) autentica chamadas a API. O Webhook Secret (whsec_...) valida eventos que nos enviamos para voce. Sao coisas diferentes. Nao misture.Configurando via Painel
Acesse app.cremepay.com/webhooks.php e crie seus webhooks. Voce pode ter multiplos webhooks, cada um com sua propria URL, eventos e secret.
Ao criar um webhook, o sistema gera um secret unico (whsec_...) e um codigo PHP pronto com o secret embutido — basta copiar e colar no seu servidor.
dead_letter e voce recebe uma notificacao no painel.Eventos Disponiveis
| Evento | Descricao | Quando |
|---|---|---|
payment.created | PIX criado, aguardando pagamento | Ao gerar cobranca via API ou checkout |
payment.paid | Pagamento PIX confirmado ✓ | Quando o pagador efetua o PIX |
payment.pending | Pagamento pendente de confirmacao | Status intermediario |
payment.cancelled | Pagamento cancelado / expirado | PIX expirou ou foi cancelado |
payment.refunded | Pagamento estornado | Estorno realizado |
withdrawal.created | Saque solicitado | Saque aprovado e em processamento |
withdrawal.completed | Saque concluido ✓ | Saque pago com sucesso |
withdrawal.failed | Saque falhou | Erro no processamento do saque |
test.webhook | Evento de teste | Ao clicar "Testar" no painel |
Headers Enviados
Cada requisicao webhook inclui os seguintes headers:
| Header | Descricao | Exemplo |
|---|---|---|
X-CREMEPAY-SIGNATURE | Assinatura HMAC-SHA256 do payload | a1b2c3d4e5... |
X-CREMEPAY-EVENT | Nome do evento | payment.paid |
X-CREMEPAY-WEBHOOK-ID | ID do webhook configurado | 42 |
X-CREMEPAY-TIMESTAMP | Timestamp Unix do envio | 1739290935 |
Content-Type | Tipo do conteudo | application/json |
User-Agent | Identificacao do remetente | CremePay-Webhook/1.0 |
Payload de Exemplo
{
"event": "payment.paid",
"timestamp": "2026-02-11T15:02:15Z",
"data": {
"transaction_id": "TX-ABC123",
"external_id": "pedido_12345",
"amount": 150.00,
"amount_cents": 15000,
"status": "PAID",
"payer_name": "Joao Silva",
"payer_document": "12345678900",
"merchant_id": 7,
"end_to_end_id": "E12345678202602111502ABCD",
"paid_at": "2026-02-11T15:02:15Z"
}
}
Validando Assinatura (HMAC-SHA256)
Todos os webhooks incluem uma assinatura HMAC-SHA256 no header X-CREMEPAY-SIGNATURE. A assinatura e calculada assim:
signature = HMAC-SHA256(payload_json, SHA256(webhook_secret))
Ou seja: a chave do HMAC e o hash SHA-256 do seu secret, nao o secret em texto puro. Isso e feito automaticamente no codigo gerado pelo painel.
// 1. Seu webhook secret (gerado ao criar o webhook no painel) $webhookSecret = 'whsec_SEU_SECRET_AQUI'; // 2. Ler payload e assinatura $payload = file_get_contents('php://input'); $receivedSignature = $_SERVER['HTTP_X_CREMEPAY_SIGNATURE'] ?? ''; // 3. Calcular assinatura esperada // Chave = SHA-256 do secret (nao o secret cru) $expectedSignature = hash_hmac( 'sha256', $payload, hash('sha256', $webhookSecret) ); // 4. Comparar (timing-safe) if (!hash_equals($expectedSignature, $receivedSignature)) { http_response_code(401); error_log('[CremePay] Assinatura HMAC invalida'); exit('Invalid signature'); } // 5. Headers adicionais $eventName = $_SERVER['HTTP_X_CREMEPAY_EVENT'] ?? 'unknown'; $webhookId = $_SERVER['HTTP_X_CREMEPAY_WEBHOOK_ID'] ?? ''; // 6. Processar $data = json_decode($payload, true); $event = $data['event'] ?? 'unknown'; switch ($event) { case 'payment.paid': // Marcar pedido como pago break; case 'payment.created': // Cobranca criada break; case 'withdrawal.completed': // Saque concluido break; } // 7. SEMPRE responder 200 (evita retentativas) http_response_code(200); echo json_encode(['received' => true]);
const crypto = require('crypto'); function verifyWebhook(payload, receivedSignature, webhookSecret) { // Chave = SHA-256 do secret const key = crypto.createHash('sha256').update(webhookSecret).digest('hex'); const expected = crypto .createHmac('sha256', key) .update(payload) .digest('hex'); return crypto.timingSafeEqual( Buffer.from(expected), Buffer.from(receivedSignature) ); } // Uso no Express: app.post('/webhook/cremepay', (req, res) => { const payload = req.body; // raw body string const sig = req.headers['x-cremepay-signature']; const event = req.headers['x-cremepay-event']; if (!verifyWebhook(payload, sig, 'whsec_SEU_SECRET')) { return res.status(401).send('Invalid signature'); } const data = JSON.parse(payload); console.log(`Evento: ${data.event}`); res.status(200).json({ received: true }); });
import hmac, hashlib def verify_webhook(payload: bytes, received_sig: str, secret: str) -> bool: key = hashlib.sha256(secret.encode()).hexdigest() expected = hmac.new(key.encode(), payload, hashlib.sha256).hexdigest() return hmac.compare_digest(expected, received_sig) # Uso no Flask: @app.route('/webhook/cremepay', methods=['POST']) def webhook(): payload = request.get_data() sig = request.headers.get('X-CREMEPAY-SIGNATURE', '') event = request.headers.get('X-CREMEPAY-EVENT', '') if not verify_webhook(payload, sig, 'whsec_SEU_SECRET'): return 'Invalid signature', 401 data = request.json print(f"Evento: {data['event']}") return jsonify({'received': True}), 200
Gerenciamento de Webhooks
Gerencie webhooks via painel (app.cremepay.com/webhooks.php) ou programaticamente via API. Cada webhook tem seu proprio secret (whsec_...).
Via Painel (recomendado)
O painel permite criar webhooks, gerar secrets, e baixar o codigo PHP pronto com o secret embutido. Fluxo:
- Acesse app.cremepay.com/webhooks.php
- Clique "Adicionar Webhook" → preencha nome, URL (HTTPS) e eventos
- O sistema gera o secret e o codigo PHP completo
- Copie o codigo e cole no seu servidor — funciona imediatamente
whsec_...) e exibido apenas uma vez ao criar ou regenerar. Armazenamos apenas o hash SHA-256. Se perder, clique "Gerar Codigo PHP" para regenerar (o anterior para de funcionar).Via API
Lista todos os webhooks configurados para o merchant autenticado.
{
"success": true,
"data": [
{
"id": 1,
"name": "Meu ERP",
"url": "https://seusite.com/webhook/cremepay",
"events": ["payment.paid", "withdrawal.completed"],
"is_active": true,
"secret_last4": "a7f2",
"success_count": 142,
"failure_count": 3,
"last_sent_at": "2026-02-14T12:30:00Z",
"created_at": "2026-02-01T10:00:00Z"
}
]
}
Cria um novo webhook. O secret (whsec_...) e retornado apenas nesta resposta.
| Parametro | Tipo | Obrig. | Descricao |
|---|---|---|---|
| url | string | Sim | URL HTTPS do endpoint |
| name | string | Nao | Nome identificador (ex: "Meu ERP") |
| events | array | Nao | Lista de eventos (padrao: todos) |
{
"success": true,
"data": {
"id": 2,
"secret": "whsec_a1b2c3d4e5f6...",
"message": "Copie o secret agora. Ele nao sera exibido novamente."
}
}
Event Tracking
Rastreie visitantes, leads e conversões no seu checkout e links de pagamento. Os dados aparecem no Analytics do seu painel.
Registra um evento de tracking. Não requer autenticação via API key — apenas o merchant_id.
Parâmetros Principais
| Parâmetro | Tipo | Obrig. | Descrição |
|---|---|---|---|
| merchant_id | integer | Sim | ID do merchant |
| session_id | string | Sim | ID da sessão do visitante (max 64 chars) |
| event | string | Não | checkout_view, form_focus, form_fill, pix_generated, payment_complete |
| page_type | string | Não | checkout, payment_link, product, funnel |
| link_id | string | Não | ID do link de pagamento |
| value | number | Não | Valor da transação |
| lead_name | string | Não | Nome do lead |
| lead_email | string | Não | Email do lead |
| lead_phone | string | Não | Telefone do lead |
| utm_source | string | Não | UTM Source |
| utm_medium | string | Não | UTM Medium |
| utm_campaign | string | Não | UTM Campaign |
Resposta
{
"success": true,
"action": "created",
"funnel_step": "checkout_generated",
"visitor_id": 1234,
"has_lead": true
}
SDKs & Plugins
Integre ainda mais rápido usando nossos SDKs oficiais e plugins.
PHP
composer require cremepay/cremepay-php
use CremePay\CremePay; $cremepay = new CremePay('pk_live_xxx', 'sk_live_xxx'); // Criar cobrança PIX $pix = $cremepay->pix->charge([ 'amount' => 100.00, 'external_id' => 'pedido_123', 'customer' => [ 'name' => 'João Silva', 'document' => '12345678900', 'email' => 'joao@email.com' ] ]); echo $pix->qr_code_base64; echo $pix->pix_code; // Consultar saldo $balance = $cremepay->balance->get(); echo "Disponível: R$ " . $balance->available; // Payout $payout = $cremepay->pix->payout([ 'amount' => 50.00, 'pix_key' => 'email@destino.com' ]);
Node.js
npm install @cremepay/cremepay-node
const CremePay = require('@cremepay/cremepay-node'); const cremepay = new CremePay('pk_live_xxx', 'sk_live_xxx'); // Criar cobrança const pix = await cremepay.pix.charge({ amount: 100.00, external_id: 'pedido_123', customer: { name: 'João Silva', document: '12345678900' } }); console.log(pix.pix_code); console.log(pix.qr_code_base64);
Python
pip install cremepay
from cremepay import CremePay client = CremePay('pk_live_xxx', 'sk_live_xxx') # Criar cobrança pix = client.pix.charge( amount=100.00, external_id='pedido_123', customer={ 'name': 'João Silva', 'document': '12345678900' } ) print(pix.pix_code) print(pix.qr_code_base64)
WooCommerce
Plugin oficial para aceitar pagamentos PIX na sua loja WordPress.
Instalação
- Faça download do plugin no seu painel em Integrações → WooCommerce
- No WordPress, vá em Plugins → Adicionar Novo → Enviar Plugin
- Ative o plugin e acesse WooCommerce → Configurações → Pagamentos
- Habilite "CremePay PIX" e insira suas chaves de API
Recursos
- QR Code na página de pedido
- Confirmação automática via webhook
- Status do pedido atualizado automaticamente
- Compatível com WooCommerce 6.x+
pk_live_ e sk_live_.