Profile Server API
Endpoints

Organization Addresses

CRUD de endereços vinculados a organizações, com histórico de vigência.

Endereços de uma organização com controle temporal (validFrom / validTo). Base path: /api/organization-addresses · autenticação de usuário.

MétodoRotaScopeResourceAção (role)Sucesso
POST/api/organization-addressescreateresource:organization-addressescreate201
GET/api/organization-addressesreadresource:organization-addressesread200
GET/api/organization-addresses/:idreadresource:organization-addresses_idread200
PUT/api/organization-addresses/:idupdateresource:organization-addresses_idupdate200
DELETE/api/organization-addresses/:iddeleteresource:organization-addresses_iddelete204

Controle de acesso por persona. Personas global e tenant-admin liberam tudo em organization-addresses. coordinator e technician podem ler, criar e editar — mesmo escopo que já têm em organizations, já que o endereço é sub-recurso da organização; viewer só lê. delete fica fora do padrão para as três, só via role de exceção organization-addresses:delete. Token sem role suficiente → 403 NOT_ALLOWED.

Para coordinator e technician a listagem é filtrada automaticamente pelas organizations alcançadas pelos tenants do usuário.


Criar endereço

POST /api/organization-addresses — define um novo endereço vigente para a organização.

Ao criar, o endereço atual (com validTo = null) é encerrado: seu validTo passa a ser o validFrom do novo endereço. A organização tem organizationAddressId atualizado para o novo registro.

Corpo

CampoTipoObrigatórioRegras
organizationIduuidsimOrganização existente (404 se não existir)
zipCodestringsimexatamente 8 caracteres (CEP)
streetstringsimmín. 1 caractere
numberstringsimmín. 1 caractere
complementstringnãopode ser null
districtstringnãomáx. 50 caracteres; pode ser null
cityCodeintegersimCódigo IBGE; cidade existente (404 se não existir)
stateCodeintegersimCódigo do estado; estado existente (404 se não existir)
countrystringnãopadrão Brasil; máx. 50 caracteres
latitudenumbernãopode ser null
longitudenumbernãopode ser null
curl -X POST http://localhost:3000/api/organization-addresses \
  -H "Authorization: Bearer $ACCESS_TOKEN" \
  -H "Content-Type: application/json" \
  -d '{
    "organizationId": "o1b2c3d4-e5f6-4789-a123-456789abcdef",
    "zipCode": "01310100",
    "street": "Avenida Paulista",
    "number": "1000",
    "district": "Bela Vista",
    "cityCode": 3550308,
    "stateCode": 35,
    "latitude": -23.561414,
    "longitude": -46.655881
  }'

201 Created

{
  "id": "a1b2c3d4-e5f6-4789-a123-456789abcdef",
  "organizationId": "o1b2c3d4-e5f6-4789-a123-456789abcdef",
  "zipCode": "01310100",
  "street": "Avenida Paulista",
  "number": "1000",
  "complement": null,
  "district": "Bela Vista",
  "cityCode": 3550308,
  "stateCode": 35,
  "country": "Brasil",
  "latitude": -23.561414,
  "longitude": -46.655881,
  "validFrom": "2026-07-13T12:00:00.000Z",
  "validTo": null
}

Erros

StatuscodeQuando
404ORGANIZATION_NOT_FOUND · STATE_NOT_FOUND · CITY_NOT_FOUNDorganizationId, stateCode ou cityCode inexistentes
403NOT_ALLOWED_ORGANIZATIONorganizationId fora do escopo de cooperativas do usuário (IUser.allowedOrganizationIds)
400CITY_STATE_MISMATCHA cidade informada não pertence ao estado

Listar endereços

GET /api/organization-addresses — lista paginada (page, limit).

Filtros opcionais: organizationId (uuid), cityCode, stateCode, currentOnly (true | false — apenas endereços vigentes com validTo = null).


Obter endereço por id

GET /api/organization-addresses/:id

Erros

StatuscodeQuando
404ORGANIZATION_ADDRESS_NOT_FOUNDEndereço não existe

Editar endereço

PUT /api/organization-addresses/:id — atualização parcial apenas do endereço vigente (validTo = null). Para trocar de endereço mantendo histórico, crie um novo via POST.

CampoTipoRegras
zipCodestringexatamente 8 caracteres
streetstringmín. 1 caractere
numberstringmín. 1 caractere
complementstringou null
districtstringmáx. 50 caracteres; ou null
cityCodeintegercidade existente; deve pertencer ao stateCode informado
stateCodeintegerestado existente
countrystringmáx. 50 caracteres; ou null
latitudenumberou null
longitudenumberou null

Retorna 200.

Erros

StatuscodeQuando
404ORGANIZATION_ADDRESS_NOT_FOUND · STATE_NOT_FOUND · CITY_NOT_FOUNDEndereço, estado ou cidade inexistentes
400ORGANIZATION_ADDRESS_NOT_CURRENTO endereço não é o vigente da organização
400CITY_STATE_MISMATCHA cidade informada não pertence ao estado

Remover endereço

DELETE /api/organization-addresses/:id — retorna 204 No Content. Se o endereço removido for o vigente, organizationAddressId da organização é limpo (null).

Erros

StatuscodeQuando
404ORGANIZATION_ADDRESS_NOT_FOUNDEndereço não existe