llms.txt para IAs

Só as instruções. Copie, cole na sua IA e peça para integrar o PIX — em minutos.

Como usar

  1. Copiar ou Baixar o arquivo abaixo.
  2. Cole no chat da IA com algo como: “Integre a SlimPay no meu checkout com este llms.txt.”

Detalhes e outros recursos ficam na documentação. URL direta: /llms.txt.

Arquivo

Abrir /llms.txt
slimpay-llms.txt · 2.794 caracteres
# SlimPay — integrar Pagamentos via API PIX

> Docs humanas: https://slimpay.com.br/docs

## O que fazer

1. Criar cobrança no servidor
2. Mostrar o PIX (QR + copia e cola) pro cliente
3. Receber o webhook `charge.paid` e liberar o pedido

Pronto. Não precisa de mais nada para receber PIX.

## Regras (não quebre)

- Valores em **centavos inteiros**: R$ 149,90 → `14990`
- Header `Authorization: Bearer sp_SUA_CHAVE` (chave só no servidor)
- Em todo POST: header `Idempotency-Key` (use o id do pedido)
- Não faça polling de status — use webhook
- Não invente campos (`fee`, `provider`, `expires_in`, etc.)

## 1. Criar cobrança

`POST https://app.slimpay.com.br/api/v1/charges`

```bash
curl https://app.slimpay.com.br/api/v1/charges \
  -H "Authorization: Bearer sp_SUA_CHAVE" \
  -H "Idempotency-Key: pedido-1042" \
  -H "Content-Type: application/json" \
  -d '{
    "amount": 14990,
    "description": "Pedido #1042",
    "reference_id": "1042",
    "customer": { "name": "Maria Silva", "tax_id": "12345678909" }
  }'
```

Resposta (use estes campos):

- `id` — `chg_...`
- `brcode` — PIX copia e cola
- `qrcode_url` — URL pública da imagem do QR (`<img src="...">`)
- `expires_at` — validade

## 2. Mostrar o PIX

- QR: `<img src="{qrcode_url}" />`
- Copia e cola: texto do `brcode`
- Mostre os dois

## 3. Webhook (pagamento confirmado)

No painel SlimPay → Webhooks: cadastre sua URL HTTPS e guarde o segredo `whsec_...`.

A SlimPay envia `POST` com:

```json
{
  "id": "evt_...",
  "type": "charge.paid",
  "data": {
    "id": "chg_...",
    "status": "paid",
    "amount": 14990,
    "reference_id": "1042"
  }
}
```

Header: `SlimPay-Signature: t=<unix>,v1=<hmac_hex>`

Verifique assim (corpo **bruto**, sem re-serializar JSON):

```ts
import crypto from "node:crypto";

function verify(rawBody: string, header: string, secret: string) {
  const map = new Map(header.split(",").map((p) => {
    const i = p.indexOf("=");
    return [p.slice(0, i), p.slice(i + 1)];
  }));
  const t = map.get("t");
  const v1 = map.get("v1");
  if (!t || !v1) return false;
  if (Math.abs(Date.now() / 1000 - Number(t)) > 300) return false;
  const expected = crypto.createHmac("sha256", secret).update(`${t}.${rawBody}`).digest("hex");
  const a = Buffer.from(expected, "hex");
  const b = Buffer.from(v1, "hex");
  return a.length === b.length && crypto.timingSafeEqual(a, b);
}
```

No handler: se `type === "charge.paid"` e assinatura ok → liberar o pedido.  
Ignore `event.id` repetido. Responda `200` rápido.

## Env

```
SLIMPAY_API_KEY=sp_...
SLIMPAY_WEBHOOK_SECRET=whsec_...
```

## Extra (só se pedir)

- Consultar: `GET https://app.slimpay.com.br/api/v1/charges/{id}`
- Cancelar (ainda não paga): `DELETE https://app.slimpay.com.br/api/v1/charges/{id}`
- Docs: https://slimpay.com.br/docs