Skip to content

Agencias ​

Una Agencia (oficina) es una inmobiliaria registrada en la plataforma. Cada agencia tiene un owner (el agency_admin que la creó) y puede contener múltiples agentes.

Organización: oficinas y admins ​

Un usuario agency_admin puede operar como organización multi-oficina:

  • Owner / creador: quien crea la agencia con POST /api/agencies. Puede crear varias agencias y conserva el control total de todas ellas.
  • Co-admins asignados: el owner puede asignar uno o más usuarios como admins de una agencia (POST /api/agencies/:id/admins). Un co-admin tiene las mismas funciones que el owner pero solo sobre esa oficina (gestionar sus agentes, editar la agencia). No puede ver otras oficinas del owner, crear nuevas agencias ni asignar otros admins.
  • Agentes: se crean y se asignan a una oficina mediante agencyId (ver Agentes).
CapacidadOwnerCo-admin asignado
Crear agencias✅❌
Gestionar su oficina (agentes, datos)✅✅
Ver/gestionar otras oficinas✅ (las suyas)❌
Asignar / quitar co-admins✅❌

Flujo de registro ​

1. POST /api/auth/register        →  Crear cuenta agency_admin (owner)
2. POST /api/agencies             →  Crear la agencia/oficina (1 o más)
3. POST /api/agents               →  Crear agentes y asignarlos (agencyId)
4. POST /api/agencies/:id/admins  →  Asignar co-admins por oficina (opcional)
5. POST /api/agencies/:id/logo    →  Subir logo (opcional)

Listar agencias ​

http
GET /api/agencies

Query params opcionales:

ParámetroTipoDescripción
pagenumberPágina (default: 1)
limitnumberResultados por página (default: 10)
searchstringBuscar por nombre
citystringFiltrar por ciudad

Respuesta 200:

json
{
  "status": "success",
  "data": {
    "data": [
      {
        "id": "uuid-agencia",
        "name": "Inmobiliaria Centro MX",
        "logo": "https://cdn.havi.app/uploads/logo.png",
        "email": "contacto@inmobiliariacentro.mx",
        "phone": "+52 55 1234 5678",
        "city": "Ciudad de México",
        "state": "CDMX",
        "isActive": true,
        "admin": {
          "id": "uuid-admin",
          "firstName": "Carlos",
          "lastName": "Mendoza"
        },
        "agents": [ ... ]
      }
    ],
    "meta": {
      "total": 45,
      "perPage": 10,
      "currentPage": 1,
      "lastPage": 5
    }
  }
}

Obtener agencia por ID ​

http
GET /api/agencies/:id

Respuesta 200:

json
{
  "status": "success",
  "data": {
    "id": "uuid-agencia",
    "name": "Inmobiliaria Centro MX",
    "logo": "https://cdn.havi.app/uploads/logo.png",
    "description": "Especialistas en bienes raíces.",
    "email": "contacto@inmobiliariacentro.mx",
    "phone": "+52 55 1234 5678",
    "website": "https://inmobiliariacentro.mx",
    "address": "Av. Insurgentes Sur 123",
    "city": "Ciudad de México",
    "state": "CDMX",
    "zipCode": "06600",
    "socialMedia": {
      "facebook": "https://facebook.com/inmobiliariacentro",
      "instagram": "https://instagram.com/inmobiliariacentro"
    },
    "isActive": true,
    "admin": { ... },
    "agents": [ ... ],
    "createdAt": "2026-05-13T10:00:00.000Z"
  }
}

Crear agencia ​

Requiere autenticación

Authorization: Bearer {token} — el usuario debe tener rol agency_admin o admin.

http
POST /api/agencies
Authorization: Bearer {token}
Content-Type: application/json

Body:

json
{
  "name": "Inmobiliaria Centro MX",
  "email": "contacto@inmobiliariacentro.mx",
  "phone": "+52 55 1234 5678",
  "website": "https://inmobiliariacentro.mx",
  "address": "Av. Insurgentes Sur 123",
  "city": "Ciudad de México",
  "state": "CDMX",
  "zipCode": "06600",
  "description": "Especialistas en bienes raíces comerciales y residenciales.",
  "socialMedia": {
    "facebook": "https://facebook.com/inmobiliariacentro",
    "instagram": "https://instagram.com/inmobiliariacentro",
    "linkedin": "https://linkedin.com/company/inmobiliariacentro"
  }
}

Campos requeridos: name

Respuesta 201:

json
{
  "status": "success",
  "message": "Agency created successfully",
  "data": {
    "id": "uuid-agencia",
    "name": "Inmobiliaria Centro MX",
    "adminUserId": "uuid-admin",
    "isActive": true,
    "createdAt": "2026-05-13T10:00:00.000Z"
  }
}

Actualizar agencia ​

Requiere autenticación

Solo el administrador de la agencia puede actualizar.

http
PUT /api/agencies/:id
Authorization: Bearer {token}
Content-Type: application/json

Body (todos los campos son opcionales):

json
{
  "name": "Inmobiliaria Centro MX — Actualizado",
  "phone": "+52 55 9999 0000",
  "description": "Nueva descripción de la agencia."
}

http
POST /api/agencies/:id/logo
Authorization: Bearer {token}
Content-Type: multipart/form-data

Form data:

  • logo — Archivo de imagen (.jpg, .jpeg, .png, .webp, máx. 5 MB)

Respuesta 200:

json
{
  "status": "success",
  "message": "Logo uploaded successfully",
  "data": {
    "id": "uuid-agencia",
    "logo": "https://api.havi.app/uploads/cuid-logo.png"
  }
}

Eliminar agencia ​

DANGER

Solo el administrador de la agencia puede eliminarla.

http
DELETE /api/agencies/:id
Authorization: Bearer {token}

Respuesta 200:

json
{
  "status": "success",
  "message": "Agency deleted successfully"
}

Co-admins de una agencia ​

Permiten gestionar los admins adicionales de una oficina. Solo el owner (o un admin global) puede asignar/quitar admins.

Listar admins ​

http
GET /api/agencies/:id/admins
Authorization: Bearer {token}

Respuesta 200:

json
{
  "status": "success",
  "data": {
    "owner": { "id": "uuid-owner", "firstName": "Carlos", "lastName": "Mendoza", "email": "carlos@..." },
    "assignedAdmins": [
      { "id": "uuid-admin2", "firstName": "Ana", "lastName": "López", "email": "ana@..." }
    ]
  }
}

Asignar co-admin ​

El usuario se identifica por email o userId (al menos uno). Debe existir previamente. Si su rol no es agency_admin/admin, se promueve a agency_admin automáticamente (necesario para que pueda usar los endpoints de gestión).

http
POST /api/agencies/:id/admins
Authorization: Bearer {token}
Content-Type: application/json

Body:

json
{ "email": "ana@inmobiliariacentro.mx" }

Respuesta 200:

json
{
  "status": "success",
  "message": "Admin asignado correctamente",
  "data": { "agencyId": "uuid-agencia", "userId": "uuid-admin2", "email": "ana@...", "role": "agency_admin" }
}

Errores: 403 si no eres el owner · 404 si el usuario no existe · 400 si el usuario ya es el owner.

Quitar co-admin ​

http
DELETE /api/agencies/:id/admins/:userId
Authorization: Bearer {token}

No se puede quitar al owner de la agencia (400).


Mis agencias ​

Obtiene las agencias que el usuario autenticado puede gestionar: las propias (como owner) y aquellas donde fue asignado como co-admin.

http
GET /api/my-agencies
Authorization: Bearer {token}

Agentes de una agencia (público) ​

http
GET /api/agencies/by-admin/:userId/agents

Devuelve la agencia y sus agentes activos a partir del ID del usuario administrador. Útil para páginas públicas de perfil.

HAVI API · Documentación Oficial