v1.0

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.

API Online 99.9% Uptime < 3s Confirmação HMAC-SHA256

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

Produção
https://api.cremepay.com/v1
Sandbox (Testes)
https://sandbox.cremepay.com/v1

Health Check

Verifique o status da API a qualquer momento:

cURL
curl https://api.cremepay.com/health
Resposta — 200 OK
{
  "success": true,
  "data": {
    "status": "ok",
    "version": "1.0.0",
    "timestamp": "2026-02-11T12:00:00Z"
  }
}

Rate Limits

Para garantir estabilidade, aplicamos limites por plano:

PlanoReq/MinutoReq/Dia
Básico6010.000
Profissional300100.000
EnterpriseIlimitadoIlimitado

Formato de Resposta

Todas as respostas da API seguem o mesmo formato padrão:

Sucesso
{
  "success": true,
  "data": { ... }
}
Erro
{
  "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

Headers
X-Public-Key: pk_live_xxxxxxxxxxxxxxxxxxxxxxxx
X-Secret-Key: sk_live_xxxxxxxxxxxxxxxxxxxxxxxx
Content-Type: application/json

Método 2 — Bearer Token

Headers
Authorization: Bearer sk_live_xxxxxxxxxxxxxxxxxxxxxxxx
Content-Type: application/json
Importante: Nunca exponha sua chave secreta (sk_) no frontend ou em repositórios públicos. Todas as requisições devem ser feitas pelo seu servidor backend.

Ambientes

AmbientePrefixo da ChaveBase URL
Producaopk_live_ / sk_live_api.cremepay.com
Sandboxpk_test_ / sk_test_sandbox.cremepay.com

API Key vs Webhook Secret

API KeyWebhook Secret
Formatopk_live_... / sk_live_...whsec_...
Onde gerenciarapp.cremepay.com/api-key.phpapp.cremepay.com/webhooks.php
Para que serveAutenticar suas chamadas a APIValidar eventos que nos enviamos a voce
Quem usaSeu backend → CremePayCremePay → Seu backend
Quantas1 par por merchant1 por webhook (multiplos webhooks permitidos)
API Keys nao servem para validar webhooks. Use o 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ódigoStatusDescrição
200OKRequisição processada com sucesso
201CreatedRecurso criado com sucesso
400Bad RequestParâmetros inválidos ou ausentes
401UnauthorizedChaves de API inválidas ou ausentes
403ForbiddenSem permissão para este recurso
404Not FoundRecurso não encontrado
422UnprocessableValidação falhou (verifique campo errors)
429Too Many RequestsRate limit excedido
500Internal ErrorErro interno do servidor
503UnavailableGateway 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.

POST /v1/pix/charge Aliases: /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âmetroTipoObrig.Descrição
amountnumberSimValor em reais (mínimo R$ 1.00)
external_idstringNãoIdentificador único do seu sistema (alias: order_id)
descriptionstringNãoDescrição da cobrança
customer.namestringNãoNome do pagador (alias: payer_name)
customer.documentstringNãoCPF ou CNPJ (alias: payer_document)
customer.emailstringNãoEmail (alias: payer_email)
customer.phonestringNãoTelefone (alias: payer_phone)
webhook_urlstringNãoURL de callback (alias: postback_url)
link_idstringNãoID do link de pagamento (tracking)
checkout_idstringNãoID do checkout (tracking)
utm_sourcestringNãoUTM Source para rastreamento
utm_mediumstringNãoUTM Medium
utm_campaignstringNãoUTM Campaign

Exemplo de Requisição

cURL
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

JSON — 201 Created
{
  "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"
  }
}
A cobrança PIX expira em 30 minutos por padrão. O evento 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.

GET /v1/pix/charge/{id}

Retorna os detalhes de uma cobrança. O parâmetro {id} pode ser o transaction_id ou external_id.

Resposta

JSON — 200 OK
{
  "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.

POST /v1/pix/payout Alias: /v1/pix/cashout

Envia um PIX para a chave especificada. O tipo da chave é detectado automaticamente.

Parâmetros

ParâmetroTipoObrig.Descrição
amountnumberSimValor em reais (mínimo R$ 1.00)
pix_keystringSimChave PIX do destinatário
recipient_namestringNãoNome do destinatário
recipient_documentstringNãoCPF/CNPJ do destinatário
order_idstringNãoIdentificador único

Resposta

JSON — 201 Created
{
  "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"
  }
}
O pix_key_type é detectado automaticamente (cpf, cnpj, email, phone, random). O saldo é debitado imediatamente ao criar o payout.

Consultar Saldo

GET /v1/balance

Retorna o saldo disponível, bloqueado e total da sua conta.

JSON — 200 OK
{
  "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.

GET /v1/transactions

Query Parameters

ParâmetroTipoPadrãoDescrição
pageinteger1Página
limitinteger25Itens por página (máx. 100)
statusstringpending, paid, cancelled
typestringDEPOSIT ou WITHDRAW
date_fromdateData início (YYYY-MM-DD)
date_todateData fim (YYYY-MM-DD)

Exemplo

cURL
curl "https://api.cremepay.com/v1/transactions?status=paid&limit=10" \
  -H "Authorization: Bearer sk_live_xxx"
JSON — 200 OK
{
  "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.

Webhook Secret ≠ API Key — Sua API Key (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.

Retentativas: Webhooks que falham sao retentados ate 5 vezes com backoff exponencial — 1min, 5min, 30min, 2h, 12h. Apos esgotar as tentativas, o webhook entra em dead_letter e voce recebe uma notificacao no painel.

Eventos Disponiveis

EventoDescricaoQuando
payment.createdPIX criado, aguardando pagamentoAo gerar cobranca via API ou checkout
payment.paidPagamento PIX confirmado ✓Quando o pagador efetua o PIX
payment.pendingPagamento pendente de confirmacaoStatus intermediario
payment.cancelledPagamento cancelado / expiradoPIX expirou ou foi cancelado
payment.refundedPagamento estornadoEstorno realizado
withdrawal.createdSaque solicitadoSaque aprovado e em processamento
withdrawal.completedSaque concluido ✓Saque pago com sucesso
withdrawal.failedSaque falhouErro no processamento do saque
test.webhookEvento de testeAo clicar "Testar" no painel

Headers Enviados

Cada requisicao webhook inclui os seguintes headers:

HeaderDescricaoExemplo
X-CREMEPAY-SIGNATUREAssinatura HMAC-SHA256 do payloada1b2c3d4e5...
X-CREMEPAY-EVENTNome do eventopayment.paid
X-CREMEPAY-WEBHOOK-IDID do webhook configurado42
X-CREMEPAY-TIMESTAMPTimestamp Unix do envio1739290935
Content-TypeTipo do conteudoapplication/json
User-AgentIdentificacao do remetenteCremePay-Webhook/1.0

Payload de Exemplo

JSON — payment.paid
{
  "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:

Formula
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.

Dica: Ao criar um webhook em app.cremepay.com/webhooks.php, o sistema gera um codigo PHP completo com seu secret ja embutido. Basta copiar e colar — zero configuracao.
PHP — Validacao completa
// 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]);
Node.js — Validacao
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 });
});
Python — Validacao
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:

  1. Acesse app.cremepay.com/webhooks.php
  2. Clique "Adicionar Webhook" → preencha nome, URL (HTTPS) e eventos
  3. O sistema gera o secret e o codigo PHP completo
  4. Copie o codigo e cole no seu servidor — funciona imediatamente
Seguranca: O secret (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

GET /v1/webhooks

Lista todos os webhooks configurados para o merchant autenticado.

JSON — 200 OK
{
  "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"
    }
  ]
}
POST /v1/webhooks

Cria um novo webhook. O secret (whsec_...) e retornado apenas nesta resposta.

ParametroTipoObrig.Descricao
urlstringSimURL HTTPS do endpoint
namestringNaoNome identificador (ex: "Meu ERP")
eventsarrayNaoLista de eventos (padrao: todos)
JSON — 201 Created
{
  "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.

POST /tracking/collect.php

Registra um evento de tracking. Não requer autenticação via API key — apenas o merchant_id.

Parâmetros Principais

ParâmetroTipoObrig.Descrição
merchant_idintegerSimID do merchant
session_idstringSimID da sessão do visitante (max 64 chars)
eventstringNãocheckout_view, form_focus, form_fill, pix_generated, payment_complete
page_typestringNãocheckout, payment_link, product, funnel
link_idstringNãoID do link de pagamento
valuenumberNãoValor da transação
lead_namestringNãoNome do lead
lead_emailstringNãoEmail do lead
lead_phonestringNãoTelefone do lead
utm_sourcestringNãoUTM Source
utm_mediumstringNãoUTM Medium
utm_campaignstringNãoUTM Campaign

Resposta

JSON — 200 OK
{
  "success": true,
  "action": "created",
  "funnel_step": "checkout_generated",
  "visitor_id": 1234,
  "has_lead": true
}
O tracking registra automaticamente geolocalização por IP, tipo de device, browser e OS. Os dados alimentam o Analytics 360° no seu painel.

SDKs & Plugins

Integre ainda mais rápido usando nossos SDKs oficiais e plugins.

PHP

Composer
composer require cremepay/cremepay-php
PHP — Exemplo Completo
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
npm install @cremepay/cremepay-node
Node.js — Exemplo
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
pip install cremepay
Python — Exemplo
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

  1. Faça download do plugin no seu painel em Integrações → WooCommerce
  2. No WordPress, vá em Plugins → Adicionar Novo → Enviar Plugin
  3. Ative o plugin e acesse WooCommerce → Configurações → Pagamentos
  4. 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+
O plugin é configurado automaticamente com os webhooks corretos. Basta inserir suas chaves pk_live_ e sk_live_.