Introdução
API REST para receber pagamentos via Pix
A API SkinPay permite gerar cobranças Pix, consultar status e receber notificações automáticas via webhook. Ideal para e-commerces, marketplaces e SaaS que precisam de liquidação instantânea.
Autenticação
Header x-api-key
Toda requisição precisa do header x-api-key com sua chave secreta. Gere chaves no painel em API Keys. Nunca exponha sk_live_* no frontend.
curl https://skinpay.pro/api/public/v1/charges \ -H "x-api-key: sk_live_seu_token_aqui"
Criar cobrança
POST /v1/charges
Gera um QR Code Pix e código copia-e-cola. Retorna em ~400ms.
Body (JSON)
| Campo | Tipo | Descrição |
|---|---|---|
| amount * | integer | Valor em centavos. Mínimo 50. |
| description | string | Descrição visível para o pagador. Máx 200. |
| external_id | string | Seu ID interno (ex: pedido). |
| expires_in | integer | Segundos até expirar. Padrão 3600. |
| payer.name | string | Nome do pagador. |
| payer.document | string | CPF/CNPJ (apenas dígitos). |
| payer.email | string | E-mail do pagador. |
Exemplo
curl -X POST https://skinpay.pro/api/public/v1/charges \
-H "x-api-key: sk_live_seu_token" \
-H "Content-Type: application/json" \
-H "Idempotency-Key: pedido_42" \
-d '{
"amount": 9990,
"description": "Pedido #42",
"external_id": "pedido_42",
"payer": {
"name": "Maria Silva",
"document": "11144477735",
"email": "maria@example.com"
},
"expires_in": 3600
}'Resposta 201
{
"data": {
"id": "f5c1b8d4-...",
"status": "pending",
"amount_cents": 9990,
"fee_cents": 348,
"net_cents": 9642,
"pix_qr_code": "data:image/png;base64,iVBORw0KGgo...",
"pix_copy_paste": "00020126580014br.gov.bcb.pix...",
"expires_at": "2026-04-20T05:43:00Z",
"external_id": "pedido_42",
"created_at": "2026-04-20T04:43:00Z"
}
}Consultar cobrança
GET /v1/charges/:id
curl https://skinpay.pro/api/public/v1/charges/f5c1b8d4-... \ -H "x-api-key: sk_live_seu_token"
Status possíveis: pending, paid, expired, cancelled, refunded, failed.
Listar cobranças
GET /v1/charges
Retorna as 50 cobranças mais recentes da sua conta.
curl https://skinpay.pro/api/public/v1/charges \ -H "x-api-key: sk_live_seu_token"
Saque automático
POST /v1/withdrawals
Dispara um saque Pix instantâneo direto pela API — ideal para automatizar bots, painéis internos, split de afiliados ou sistemas próprios. Envie para qualquer chave PIX (qualquer banco, qualquer titular) informando pix_key e pix_key_type no body, ou omita esses campos para cair na chave cadastrada no painel. A operação é atômica: o valor é debitado do saldo, enviado ao processador e, em caso de falha, o saldo é devolvido automaticamente.
Recebeu um pagamento e precisa repassar parte para um afiliado, revendedor ou parceiro? Basta chamar este endpoint uma vez para cada destinatário, informando a chave PIX de cada um. O dinheiro vai direto da sua conta SkinPay para a conta do destinatário — você nunca precisa passar por uma conta intermediária.
Body (JSON)
| Campo | Tipo | Descrição |
|---|---|---|
| amount * | integer | Valor bruto em centavos (inclui a taxa). Mínimo 1500. |
| pix_key | string | Chave PIX do destinatário. Se omitida, usa a chave cadastrada no painel. |
| pix_key_type | string | Tipo da chave: cpf, cnpj, email, phone ou evp (aleatória). Obrigatório quando pix_key é enviada. |
Headers
| Campo | Tipo | Descrição |
|---|---|---|
| x-api-key * | string | Sua chave secreta sk_live_... |
| Idempotency-Key | string | Recomendado. Reenvios com mesma chave devolvem o mesmo saque, sem duplicar. |
Exemplo — split de afiliado
curl -X POST https://skinpay.pro/api/public/v1/withdrawals \
-H "x-api-key: sk_live_seu_token" \
-H "Content-Type: application/json" \
-H "Idempotency-Key: afiliado_123_venda_45" \
-d '{
"amount": 5000,
"pix_key": "afiliado@email.com",
"pix_key_type": "email"
}'Tipos de chave aceitos
| Campo | Tipo | Descrição |
|---|---|---|
| cpf | 11 dígitos | Só números. Ex.: 12345678900 |
| cnpj | 14 dígitos | Só números. Ex.: 12345678000199 |
| string | E-mail cadastrado como chave PIX. | |
| phone | string | Celular no formato 5511999999999 (com DDI 55). |
| evp | uuid | Chave aleatória (random) gerada pelo banco. |
Resposta 201
{
"data": {
"id": "b1c2d3...",
"status": "processing",
"gross_cents": 5000,
"net_cents": 4750,
"fee_cents": 250,
"pix_key": "afiliado@email.com",
"pix_key_type": "email",
"gateway_id": "tx_...",
"gateway_status": "PROCESSING",
"requested_at": "2026-07-14T12:00:00Z"
}
}Falha do processador
Se o processador recusar, respondemos HTTP 502 com { "refunded": true, "message": "..." } — o saldo já foi devolvido automaticamente e você pode simplesmente reenviar.
Consultar status
curl https://skinpay.pro/api/public/v1/withdrawals/b1c2d3... \ -H "x-api-key: sk_live_seu_token"
Status: requested (em processamento), paid, rejected (com refund automático).
Webhooks
Notificação em tempo real
Cadastre uma URL no painel Webhooks. Quando o status mudar, enviamos POST com assinatura HMAC-SHA256.
POST https://sua-loja.com/webhook
Headers:
X-SkinPay-Signature: t=1729400000,v1=<hmac_sha256>
Content-Type: application/json
Body:
{
"event": "charge.paid",
"data": {
"id": "uuid",
"status": "paid",
"amount_cents": 9990,
"external_id": "pedido_42",
"paid_at": "2026-04-20T04:50:00Z"
}
}Verificando assinatura (Node.js)
import crypto from "crypto";
app.post("/webhook", express.raw({ type: "application/json" }), (req, res) => {
const sig = req.headers["x-skinpay-signature"];
const [tsPart, v1Part] = sig.split(",");
const ts = tsPart.split("=")[1];
const v1 = v1Part.split("=")[1];
const expected = crypto
.createHmac("sha256", process.env.WEBHOOK_SECRET)
.update(`${ts}.${req.body}`)
.digest("hex");
if (expected !== v1) return res.status(401).end();
const event = JSON.parse(req.body);
if (event.event === "charge.paid") {
// libera o pedido
}
res.status(200).end();
});Retry automático: 30s → 5min → 30min → 2h → 6h → 12h.
Integrar com IA
Cole em ChatGPT, Claude, Cursor, Lovable ou Copilot
Construímos um manifesto público em /llms.txt que assistentes de IA leem automaticamente, e um prompt pronto abaixo que entrega à IA todo o contexto da API (endpoints, autenticação, webhook, regras de segurança). Basta colar, descrever sua stack e seu objetivo — a IA gera o backend, o webhook e o checkout para você.
1. Prompt pronto (copie e cole na sua IA)
Você é um engenheiro integrando a API SkinPay (pagamentos Pix no Brasil) no meu projeto.
CONTEXTO DA API
- Base URL: https://skinpay.pro/api/public/v1
- Autenticação: header "x-api-key: sk_live_xxx" (a chave fica APENAS no backend, nunca no frontend).
- Valores monetários sempre em centavos (integer). Mínimo cobrança 50.
- Manifesto para IA: https://skinpay.pro/llms.txt
- Documentação humana: https://skinpay.pro/docs
- Suporte oficial (Telegram): https://t.me/Skinpayatendimento
ENDPOINTS
1) POST /v1/charges -> cria cobrança Pix
Body JSON: { "amount": 9990, "description": "Pedido #42", "external_id": "pedido_42",
"payer": { "name": "...", "document": "...", "email": "..." },
"expires_in": 3600 }
Resposta 201: { "data": { "id", "status", "pix_qr_code" (data:image/png;base64,...),
"pix_copy_paste", "expires_at", "amount_cents", "net_cents" } }
2) GET /v1/charges/:id -> consulta status (pending|paid|expired|cancelled|refunded|failed)
3) GET /v1/charges -> lista as 50 mais recentes
4) POST /v1/withdrawals -> saque Pix automático (mín R$ 15,00 / máx R$ 1.000,00 por saque)
Body: { "amount": 5000, // centavos, obrigatório
"pix_key": "cliente@email.com", // opcional — envia para QUALQUER chave
"pix_key_type": "email" } // cpf | cnpj | email | phone | evp
Header: Idempotency-Key: <seu id> (recomendado para evitar saques duplicados)
Se pix_key/pix_key_type forem omitidos, usa a chave cadastrada no painel do lojista.
Ideal para split de afiliados: dispare um saque para cada chave PIX. Taxa: R$ 2,50 por saque.
5) GET /v1/withdrawals/:id -> consulta status do saque (requested|paid|rejected)
WEBHOOK
- POST na URL cadastrada com header "X-SkinPay-Signature: t=<unix>,v1=<hmac>"
- Verificação: HMAC_SHA256(WEBHOOK_SECRET, `${t}.${rawBody}`) === v1
- Sempre responder 200 rápido; reprocessamento por external_id é idempotente.
- Eventos: charge.paid, charge.expired, charge.refunded
REGRAS QUE VOCÊ DEVE SEGUIR
- Crie um endpoint backend POST /api/checkout que chame /v1/charges e devolva apenas { id, pix_qr_code, pix_copy_paste, expires_at } para o frontend.
- Crie um endpoint POST /api/webhooks/skinpay que valide a assinatura ANTES de ler o body como JSON (use o raw body).
- Marque o pedido como pago somente quando o evento for charge.paid e o status no banco ainda for pendente.
- Use Idempotency-Key (ex.: o id do pedido) ao criar cobranças para evitar duplicidade.
- Nunca exponha sk_live_* no frontend. Use variáveis de ambiente SKINPAY_API_KEY e SKINPAY_WEBHOOK_SECRET.
MINHA STACK: <descreva aqui: ex. Next.js + Prisma + Postgres>
MEU OBJETIVO: <descreva aqui: ex. cobrar R$ 99,90 no checkout e liberar o pedido quando o Pix for pago>
Implemente os arquivos necessários, com tratamento de erros (401, 402, 422, 502) e logs claros.2. Manifesto para crawlers de IA
Disponível em https://skinpay.pro/llms.txt seguindo o padrão llmstxt.org. Ferramentas como ChatGPT, Perplexity, Claude e Cursor leem esse arquivo para entender a API sem precisar parsear o site.
3. Dica para usar no Cursor / Lovable
No Cursor adicione @Docs e cole a URL https://skinpay.pro/docs. No Lovable, basta dizer: "integre a API SkinPay seguindo https://skinpay.pro/llms.txt".
Erros
Códigos HTTP padrão
| Campo | Tipo | Descrição |
|---|---|---|
| 400 | Bad Request | JSON inválido ou parâmetro fora do permitido. |
| 401 | Unauthorized | Chave API ausente, inválida ou revogada. |
| 403 | Forbidden | KYC pendente ou conta suspensa. |
| 404 | Not Found | Cobrança não encontrada. |
| 502 | Bad Gateway | Falha temporária no provedor Pix. Tente novamente. |