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

# Construir um cliente

> Escolha entre cliente público ou confidencial, PKCE e boas práticas para produção.

<Tip>
  Resumo de **arquitetura** antes de codar. Passo a passo copiável: [Quick Start](/oauth-api/como-funciona/quick-start). RFC na prática: [Guia técnico](/oauth-api/como-funciona/guia-tecnico-cliente).
</Tip>

## Público vs confidencial

| Tipo             | Secret | Típico           | Token endpoint               |
| ---------------- | :----: | ---------------- | ---------------------------- |
| **Confidencial** |   Sim  | Web com backend  | `client_secret_basic` + PKCE |
| **Público**      |   Não  | SPA, mobile, CLI | `none` + PKCE                |

<Warning>
  Nunca coloque `client_secret` em JavaScript no browser ou app mobile. Use cliente **público** + PKCE.
</Warning>

## Fluxo em uma linha

Registrar → authorize (browser + PKCE) → token → `/v1` com Bearer → refresh quando expirar → revoke ao desconectar.

## Checklist de produção

* Redirect URI **exata** (barra final importa)
* `state` validado no callback (anti-CSRF)
* `code_verifier` guardado até trocar o token
* Refresh token salvo **atomicamente** (rotaciona a cada uso)
* Escopos mínimos na autorização

## Erros comuns

| Sintoma         | Causa                                            |
| --------------- | ------------------------------------------------ |
| `invalid_grant` | Code expirado, redirect diferente ou PKCE errado |
| 403 na API      | Escopo do token não cobre o endpoint             |
| Refresh parou   | Token já rotacionado — use o último salvo        |

## Próximos passos

* [Guia técnico](/oauth-api/como-funciona/guia-tecnico-cliente) — remoto, loopback, diagramas
* [Escopos](/oauth-api/como-funciona/escopos)
* [OpenAPI](/oauth-api/api-reference/openapi-oauth.json) — aba **Outros**
