Projetos e tenants#
A hierarquia é Conta → Projeto → Tenant. Cada tenant (seu cliente final) roda num schema de banco dedicado.
GETProjetos#
GET /v1/projects — { projects: [ { id, name, org_name, project_uuid, role, is_current } ] }.
POST /v1/projects cria ({ name } → 201); POST /v1/projects/{id}/switch
troca o projeto ativo (re-emite a sessão).
GETTenants#
GET /v1/tenants — array puro de tenantResponse:
{ "id": 12, "company_id": 30, "external_id": "clinica-bella", "name": "Clínica Bella",
"uuid": "…", "status": "ready", "is_default": false, "provisioned": true,
"created_at": "2026-06-27T…Z" }
provisioned = o schema dedicado do tenant existe.
POSTCriar tenant#
POST /v1/tenants (owner/admin) — corpo { external_id, name? }. O external_id
é obrigatório e estável (regex ^[A-Za-z0-9_.:@+\-]{1,120}$); provisiona o schema
dedicado. Resposta 201: tenantResponse. Erros:
TENANT_EXTERNAL_ID_REQUIRED, TENANT_EXTERNAL_ID_INVALID,
TENANT_EXTERNAL_ID_EXISTS (409). PATCH atualiza o nome; DELETE remove (204,
o tenant padrão é protegido → TENANT_DEFAULT_LOCKED; o schema nunca é dropado).