# Registrar um cliente

> Como um dirigente registra uma integração no console Desenvolvedores, qual tipo escolher, o que precisa ser registrado com exatidão.

URL: https://developers.vimine.network/pt/start/register-a-client/

Cada integração é um **cliente** registrado no console **Desenvolvedores** do app Vimine. O console
é reservado à diretoria da associação: se você não faz parte dela, peça a um dirigente que registre o cliente para
você e lhe passe as credenciais.

Sem uma associação — uma agência, quem desenvolve um plugin, quem quer experimentar a API — peça à plataforma um
**convite de desenvolvedor**: você terá um [sandbox](https://developers.vimine.network/pt/guides/sandbox/) só seu, uma associação de teste com associados
sintéticos, e registrará ali você mesmo os clientes de teste, aceitando os termos para desenvolvedores. Os clientes de
produção continuam sendo da associação para a qual você trabalha.

## Tipos de cliente

| Tipo | Para | Credenciais | Observações |
|---|---|---|---|
| **Site** (público) | páginas no navegador | só `client_id` | PKCE obrigatório; URIs de redirecionamento `https` exatas |
| **App nativo** | apps para celular ou desktop | só `client_id` | como acima; redirecionamentos de loopback (`http://127.0.0.1:{port}/…`) ou um esquema personalizado |
| **Servidor** (confidencial) | um backend da associação | `client_id` + `client_secret` | o segredo é mostrado uma vez só; nunca num navegador |

Os clientes públicos e nativos fazem **Entrar com Vimine** e chamam a API com o token do associado.
Os clientes confidenciais também podem se autenticar por conta própria (`client_credentials`) para as permissões de
"cliente", como o status das carteirinhas.

## Ambientes

| Ambiente | Onde fica | Quando fica ativo |
|---|---|---|
| **Teste** | no [sandbox](https://developers.vimine.network/pt/guides/sandbox/) da associação (criado quando necessário) | **na hora** |
| **Produção** | na associação real | depois da ativação pelo Vimine: você recebe um e-mail |

Os clientes de teste emitem tokens com `mode: "test"` e não podem tocar na associação real. As suas credenciais
confidenciais começam com `vms_test_`.

## O que registrar

1. **Nome** — o que o associado vai ver na página de consentimento ("*Nome* quer acessar o seu perfil…").
2. **Tipo** e **ambiente**.
3. **URIs de redirecionamento** — as páginas para as quais o Vimine pode mandar o navegador de volta depois do login.
   A correspondência é **exata** (esquema, host, porta, caminho): registre todas as páginas de callback que você vai usar.
4. **Origens permitidas** — as origens (`https://www.example.org`) a partir das quais as suas páginas chamam a API no
   navegador. Elas servem para o CORS e como destinos permitidos depois do logout (`post_logout_redirect_uri`).
5. **Permissões** — os escopos que a integração pode pedir. Peça só o que você precisa: o associado vê
   todos. Um cliente público ou nativo só pode ter permissões de associado; as permissões de "cliente" exigem um
   cliente confidencial. A tabela está em [Permissões, erros e limites](https://developers.vimine.network/pt/guides/scopes-and-errors/).

Na criação você recebe o `client_id` (`vmc_…`) e, para os clientes confidenciais, o `client_secret` (`vms_…`),
mostrado **uma vez só**. Para os clientes de teste, o console também mostra os associados sintéticos do sandbox e a
senha deles.

## Ciclo de vida

- **Rotacionar segredo** — o novo segredo é mostrado uma vez; **o anterior continua funcionando por 24 horas**, para
  que você possa atualizar os seus sistemas sem interrupção.
- **Suspender** — os tokens do cliente param de funcionar até você reativá-lo. A reativação cabe à diretoria.
- **Revogar** — definitivo: todas as sessões do cliente terminam na hora e os associados deixam de vê-lo entre os
  seus apps conectados.
- Os associados podem retirar o consentimento a qualquer momento em **Apps conectados**, na conta deles: as sessões
  daquele cliente para aquele associado terminam.

:::tip[Desenvolvimento local]
Um cliente de **teste** pode ter URIs de redirecionamento e origens `http://localhost:…`: é o jeito normal de desenvolver.
Em produção, só `https` (com exceção do loopback, para os apps nativos).
:::
