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"
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 50.
- Manifesto para IA: https://skinpay.pro/llms.txt
- Documentação humana: https://skinpay.pro/docs
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
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. |