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.

Latência média
~400ms
Liquidação
Instantânea
Assinatura
HMAC-SHA256

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

POST/v1/charges

Gera um QR Code Pix e código copia-e-cola. Retorna em ~400ms.

Body (JSON)

CampoTipoDescrição
amount *integerValor em centavos. Mínimo 50.
description stringDescrição visível para o pagador. Máx 200.
external_id stringSeu ID interno (ex: pedido).
expires_in integerSegundos até expirar. Padrão 3600.
payer.name stringNome do pagador.
payer.document stringCPF/CNPJ (apenas dígitos).
payer.email stringE-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

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

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

Manifesto IA
/llms.txt
Compatível
GPT • Claude • Lovable
Setup
1 prompt

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

CampoTipoDescrição
400 Bad RequestJSON inválido ou parâmetro fora do permitido.
401 UnauthorizedChave API ausente, inválida ou revogada.
403 ForbiddenKYC pendente ou conta suspensa.
404 Not FoundCobrança não encontrada.
502 Bad GatewayFalha temporária no provedor Pix. Tente novamente.