organization_id, e toda consulta filtra por ele.
Um usuário chega a uma organização por um vínculo (membership), que carrega
exatamente um papel. Um usuário pode ter vínculos em várias organizações; o seletor
do painel é essa lista.
O código público
Toda organização tem umpublic_code no formato org_<32 hex>. É ele que aparece
na URL do painel e viaja no header X-Organization-Id.
O UUID interno nunca sai da API nas superfícies que o painel usa. Use
public_code
em URLs e headers.Criando uma
O cadastro cria a primeira organização. Um usuário autenticado pode abrir outras, tornando-se owner de cada uma:- ela sempre tem os três papéis de sistema (
owner,admin,member); - ela sempre tem um owner;
- ela sempre tem um ambiente live e um test, cada um com sua chave publicável.
Trocando
Trocar é navegação, não um estado que você precise gerenciar. O vínculo é verificado toda vez, e trocar para uma organização da qual você não faz parte responde404 — nunca um vazamento de que ela existe.
Convidando pessoas
Um convite é criado contra um papel e enviado por e-mail como link de uso único, válido por 7 dias. Um convite pendente por endereço, garantido por um índice único parcial — então um duplo clique não produz dois.existing_account), para ela saber se pede nome e senha. Uma conta existente
entra direto — o convite foi para aquele endereço, e possuir o link já prova o
suficiente.
O convite existe mesmo quando o e-mail se perde. Revogue e convide de novo.
Sair e remover
Duas ações diferentes, deliberadamente:
Sair é um usuário administrando o próprio acesso, então não passa por
members:write. Remover a si mesmo pelo primeiro endpoint responde 403 com uma
mensagem apontando para o segundo.
A remoção vale já na próxima requisição da pessoa: o JOIN do vínculo da sessão
deixa de casar.
A guarda do último owner
Uma organização precisa manter pelo menos um owner. Rebaixar, remover ou sair como último owner responde:409
Deletando
Só owner (organization:delete), e o nome exato precisa ser digitado de volta:
400 confirmation_mismatch.