Profile Server API
Endpoints

Organization Tenants

Vínculo M:N entre cooperativa (organization) e tenant — base do escopo de leitura por tenant.

Define quais tenants alcançam cada cooperativa. É o que faz a trava de acesso funcionar: um usuário só enxerga as cooperativas (e os documentos delas) dos tenants dos quais faz parte. Enquanto uma cooperativa não tiver vínculo com nenhum tenant do usuário, ela permanece invisível para ele.

As rotas são app-to-app (/service/*): o tenant é sempre o do chamador (resolvido do token de serviço pelo ServiceAuthMiddleware) — nunca vem no corpo. Ou seja, um serviço só consegue vincular/desvincular cooperativas ao próprio tenant.

MétodoRotaAuthSucessoIdempotente
POST/service/organizations/:organizationId/tenantsserviço201sim
DELETE/service/organizations/:organizationId/tenantsserviço204sim
GET/api/tenants/:tenantId/organizationsusuário200

Vincular cooperativa ao tenant

POST /service/organizations/:organizationId/tenants

Cria o vínculo entre a cooperativa e o tenant autenticado. Idempotente: se o vínculo já existir, retorna 201 do mesmo jeito, sem duplicar.

ParamTipoRegras
organizationIduuidCooperativa existente (404 OrganizationNotFoundError se não existir)
curl -X POST \
  http://localhost:3000/service/organizations/$ORGANIZATION_ID/tenants \
  -H "Authorization: Bearer $SERVICE_ACCESS_TOKEN"

201 Created

{
  "organizationId": "o1b2c3d4-e5f6-4789-a123-456789abcdef",
  "tenantId": "t1b2c3d4-e5f6-4789-a123-456789abcdef"
}

404 Not Found — cooperativa não encontrada.


Desvincular cooperativa do tenant

DELETE /service/organizations/:organizationId/tenants

Remove o vínculo entre a cooperativa e o tenant autenticado. Idempotente: se não houver vínculo, ainda retorna 204.

ParamTipoRegras
organizationIduuidCooperativa existente (404 OrganizationNotFoundError se não existir)
curl -X DELETE \
  http://localhost:3000/service/organizations/$ORGANIZATION_ID/tenants \
  -H "Authorization: Bearer $SERVICE_ACCESS_TOKEN"

204 No Content — vínculo removido (ou já inexistente).

404 Not Found — cooperativa não encontrada.


Listar cooperativas de um tenant (admin)

GET /api/tenants/:tenantId/organizations — contexto usuário (/api), exige scope read no resource resource:tenants_id. Retorna as cooperativas alcançadas pelo tenant. 404 se o tenant não existir.

curl http://localhost:3000/api/tenants/$TENANT_ID/organizations \
  -H "Authorization: Bearer $ACCESS_TOKEN"

200 OK

{
  "data": [
    {
      "id": "o1b2c3d4-e5f6-4789-a123-456789abcdef",
      "name": "Cooperativa Recicla Já",
      "alias": null,
      "federalTaxId": "12345678000190",
      "active": true,
      "listed": true
    }
  ]
}

404 Not Found — tenant não encontrado.