Integrar com o SDK TypeScript

Do zero a um link de pagamento e acompanhamento de transações usando o @sinnu/sdk.

Neste tutorial você vai instalar o @sinnu/sdk, criar um link que aceita Pix e cartão, montar a URL do checkout e listar transações de forma tipada no backend.

Pré-requisitos

Passo 1: instale o SDK

bash
pnpm add @sinnu/sdk

Passo 2: configure a API key

Exporte a chave secreta como variável de ambiente:

bash
export SINNU_API_KEY="<SUA_CHAVE_DE_API>"

Passo 3: inicialize o client

sinnu.ts
import { Sinnu } from "@sinnu/sdk";

export const sinnu = new Sinnu({
  apiKey: process.env.SINNU_API_KEY!,
});

Passo 4: crie um link de pagamento

Cobre R$ 99,00 aceitando Pix e cartão até 12x:

criar-link.ts
import { sinnu } from "./sinnu";

const link = await sinnu.links.create({
  title: "Mentoria 1:1",
  description: "Sessão individual",
  priceMode: "fixed",
  amountCents: 9900,
  methods: ["pix", "credit_card"],
  maxInstallments: 12,
  interestMode: "pass_to_customer",
  threeDsMode: "always",
});

console.log("Checkout:", sinnu.checkout.url(link.slug));

Passo 5: acompanhe as transações

Liste as transações aprovadas. Para grandes volumes, use listAll, que pagina sozinho.

transacoes.ts
import { sinnu } from "./sinnu";

for await (const tx of sinnu.transactions.listAll({ status: "approved" })) {
  console.log(tx.id, tx.method, tx.amount);
}

Passo 6: trate erros

Capture falhas com as classes de erro tipadas para reagir a cada situação.

erros.ts
import { SinnuAuthError, SinnuValidationError, SinnuError } from "@sinnu/sdk";
import { sinnu } from "./sinnu";

try {
  await sinnu.links.create({
    title: "Teste",
    priceMode: "fixed",
    amountCents: 9900,
    methods: ["pix"],
  });
} catch (err) {
  if (err instanceof SinnuAuthError) {
    console.error("API key inválida: verifique SINNU_API_KEY");
  } else if (err instanceof SinnuValidationError) {
    console.error("Payload inválido:", err.body?.message);
  } else if (err instanceof SinnuError) {
    console.error(err.statusCode, err.message);
  }
}