> ## Documentation Index
> Fetch the complete documentation index at: https://userepass.com/docs/llms.txt
> Use this file to discover all available pages before exploring further.

# SDK TypeScript

> Cliente oficial @repass/sdk: altamente tipado, sem dependências de runtime, para Node, browser e edge.

O **`@repass/sdk`** é o cliente TypeScript oficial da API do Repass. Ele encapsula autenticação, retentativas, idempotência, paginação e erros tipados: você manipula a API com autocomplete total.

<Note>
  O SDK cobre toda a superfície de organização (a mesma da [Referência da API](/docs/convencoes/ids-e-recursos)) usando uma [API key](/docs/autenticacao) `rstr_`. Endpoints públicos de borda (redirect de tracking e ingestão de webhooks de gateway) ficam fora do SDK por usarem outro modelo de autenticação.
</Note>

## Por que usar

<CardGroup cols={2}>
  <Card title="Altamente tipado" icon="code">
    Tipos para todo request e response, derivados das mesmas convenções da API. Erros viram classes que você consegue estreitar no `catch`.
  </Card>

  <Card title="Zero dependências de runtime" icon="feather">
    Usa apenas `fetch`/`AbortController` globais. Instala leve e roda em Node 18+, browsers e edge runtimes.
  </Card>

  <Card title="Resiliente por padrão" icon="arrows-rotate">
    Retentativas com backoff em 429/5xx/falhas de rede, timeout por requisição e idempotência automática em POSTs re-tentados.
  </Card>

  <Card title="Paginação ergonômica" icon="layer-group">
    `list()` é aguardável e iterável: pegue uma página ou percorra todas com `for await`.
  </Card>
</CardGroup>

## Instalação

<CodeGroup>
  ```bash npm theme={null}
  npm install @repass/sdk
  ```

  ```bash pnpm theme={null}
  pnpm add @repass/sdk
  ```

  ```bash yarn theme={null}
  yarn add @repass/sdk
  ```
</CodeGroup>

Requer **Node.js 18+** (ou qualquer runtime com `fetch` global). É distribuído em ESM e CJS, com type declarations incluídas.

## Em 30 segundos

```ts theme={null}
import { Repass } from "@repass/sdk";

// A chave da organização (rstr_…). Sem argumento, lê de process.env.REPASS_API_KEY.
const repass = new Repass(process.env.REPASS_API_KEY!);

// Criar um recurso
const program = await repass.programs.create({ name: "Programa de Indicações" });

// Buscar um recurso
const affiliate = await repass.affiliates.retrieve("aff_01J9Z3M2P0RD8K4VC1XN6YHTBE");

// Percorrer uma listagem (paginação automática)
for await (const commission of repass.commissions.list({ status: "approved" })) {
  console.log(commission.id, commission.amountCents);
}
```

<Warning>
  A `rstr_` é uma credencial de servidor com os poderes do membro dono da key. **Nunca** a exponha em código de frontend ou em repositórios públicos. Use o SDK no backend / em ambientes de servidor.
</Warning>

## Próximos passos

<CardGroup cols={2}>
  <Card title="Início rápido" icon="bolt" href="/docs/sdk/inicio-rapido">
    Do zero a uma comissão calculada, em TypeScript.
  </Card>

  <Card title="Configuração" icon="gear" href="/docs/sdk/configuracao">
    Chave, base URL, timeout, retries, `fetch` customizado e opções por requisição.
  </Card>

  <Card title="Recursos e métodos" icon="table-list" href="/docs/sdk/recursos">
    O mapa completo de `repass.<recurso>.<método>`.
  </Card>

  <Card title="Tratamento de erros" icon="triangle-exclamation" href="/docs/sdk/erros">
    A hierarquia `RepassError` e como reagir a cada caso.
  </Card>
</CardGroup>
