Saltar al contenido principal
Esta página fue traducida automáticamente. Si encuentra errores o tiene sugerencias, contáctenos.

Descripción general

El control de acceso de Rhombus le permite administrar la entrada física en todas sus instalaciones desde una sola API. Las puertas con control de acceso están respaldadas por controladores de puerta y lectores de Rhombus, y cada desbloqueo, credencial y concesión está vinculado a la misma plataforma que registra las imágenes de sus cámaras, de modo que cada evento de entrada tiene contexto visual. A través de la API, puede:
  • Listar puertas con control de acceso e inspeccionar su configuración y estado en vivo
  • Desbloquear de forma remota una puerta para una entrada momentánea
  • Emitir credenciales (como tarjetas Wiegand) y asignarlas a usuarios
  • Crear grupos y concesiones de acceso que vinculan usuarios, puertas y horarios
  • Activar planes de confinamiento para asegurar una ubicación durante una emergencia
¿Busca entrada táctil para visitantes? La guía Control de acceso con código QR (actualmente en beta) cubre la generación de códigos QR de duración limitada que una cámara de Rhombus lee para desbloquear una puerta. Esta guía cubre la superficie de control de acceso más amplia y de disponibilidad general.

Requisitos previos

Antes de comenzar, asegúrese de tener:
  • Una clave de API de Rhombus con permisos de control de acceso (generada en la Consola de Rhombus en Configuración > API)
  • Al menos una puerta con control de acceso configurada con un controlador de puerta y un lector de Rhombus
  • Los UUID de los usuarios, puertas y ubicaciones con los que planea trabajar (puede descubrir los UUID de las puertas con el endpoint de listado de puertas a continuación)
Todas las solicitudes son POST, apuntan a la URL base https://api2.rhombussystems.com y requieren estos encabezados:
x-auth-scheme: api-token
x-auth-apikey: YOUR_API_KEY
Content-Type: application/json

Listar puertas con control de acceso

Recupere las puertas con control de acceso de su organización. La respuesta está paginada: envíe un cuerpo vacío para la primera página y luego envíe el lastEvaluatedKey devuelto en las solicitudes posteriores hasta que vuelva vacío.
import requests

headers = {
    "x-auth-scheme": "api-token",
    "x-auth-apikey": "YOUR_API_KEY",
    "Content-Type": "application/json"
}

response = requests.post(
    "https://api2.rhombussystems.com/api/component/findAccessControlledDoors",
    headers=headers,
    json={
        "maxPageSize": 100
    }
)

data = response.json()
for door in data.get("accessControlledDoors", []):
    print(f"{door['name']} ({door['uuid']}) - estado predeterminado: {door.get('defaultState')}")

# Pagine si quedan más puertas
next_key = data.get("lastEvaluatedKey")

Parámetros de solicitud

maxPageSize
integer
Número máximo de puertas a devolver en una sola página.
lastEvaluatedKey
string
Cursor de paginación devuelto por una llamada anterior. Omítalo en la primera solicitud; proporciónelo para obtener la siguiente página.

Respuesta

accessControlledDoors
array
La lista de puertas con control de acceso. Campos clave por puerta:
lastEvaluatedKey
string
Cursor de paginación. Cuando está presente, envíelo de nuevo en la siguiente solicitud para recuperar más puertas.
Si solo necesita el estado ligero de la puerta en lugar de la configuración completa, use /api/component/findMinimalStateAccessControlledDoors, que devuelve cada puerta más una réplica de estado compacta.

Desbloquear una puerta de forma remota

Active un desbloqueo momentáneo en una puerta con control de acceso. La puerta se vuelve a bloquear automáticamente después de su tiempo de desbloqueo configurado. El desbloqueo remoto solo funciona cuando remoteUnlockEnabled es true para la puerta de destino.
import requests

headers = {
    "x-auth-scheme": "api-token",
    "x-auth-apikey": "YOUR_API_KEY",
    "Content-Type": "application/json"
}

response = requests.post(
    "https://api2.rhombussystems.com/api/accesscontrol/unlockAccessControlledDoor",
    headers=headers,
    json={
        "accessControlledDoorUuid": "YOUR_DOOR_UUID"
    }
)

result = response.json()
print(result.get("type"))  # SUCCESS o ERROR
accessControlledDoorUuid
string
requerido
El UUID de la puerta a desbloquear, del endpoint de listado de puertas.
type
string
Resultado de la solicitud, ya sea SUCCESS o ERROR.
Cada desbloqueo remoto se registra como un evento de acceso con imágenes de las cámaras asociadas a la puerta, lo que le brinda un registro de auditoría completo.

Emitir y asignar una credencial

Las credenciales son las tarjetas o llaveros físicos que acepta un lector. Este ejemplo crea una credencial Wiegand y la asigna a un usuario. Rhombus admite varios formatos de credenciales: el endpoint createWiegandCredential toma un wiegandFormat y los campos relevantes para ese formato.

Crear una credencial Wiegand

import requests
import time

headers = {
    "x-auth-scheme": "api-token",
    "x-auth-apikey": "YOUR_API_KEY",
    "Content-Type": "application/json"
}

now_sec = int(time.time())
one_year_sec = 365 * 24 * 60 * 60

response = requests.post(
    "https://api2.rhombussystems.com/api/accesscontrol/createWiegandCredential",
    headers=headers,
    json={
        "wiegandFormat": "H10301",
        "facilityCode": 42,
        "cardNumber": 10537,
        "userUuid": "YOUR_USER_UUID",
        "startDateEpochSecInclusive": now_sec,
        "endDateEpochSecExclusive": now_sec + one_year_sec
    }
)

credential = response.json().get("credential", {})
print(f"Credencial creada {credential.get('uuid')} - estado {credential.get('workflowStatus')}")
wiegandFormat
string
requerido
El formato de tarjeta Wiegand. Uno de H10301, D10202, H10304, HID_CORP1000_STD_35, HID_CORP1000_STD_48, WIEGAND_64BIT_RAW o CUSTOM. Los campos que complete dependen del formato: para el formato estándar de 26 bits H10301, proporcione facilityCode y cardNumber.
facilityCode
integer
Código de instalación (sitio) codificado en la tarjeta. Usado por formatos como H10301.
cardNumber
integer
Número de tarjeta codificado en la tarjeta.
siteCode
integer
Código de sitio, usado por formatos que lo codifican por separado del código de instalación.
companyId
integer
ID de empresa, usado por los formatos HID Corporate 1000.
value
string
Valor de credencial sin procesar. Usado por los formatos WIEGAND_64BIT_RAW y CUSTOM.
userUuid
string
El usuario al que pertenece la credencial. Cuando se establece, la credencial se crea ya asignada a ese usuario.
startDateEpochSecInclusive
integer
Inicio de la ventana de validez de la credencial, en segundos epoch (inclusivo).
endDateEpochSecExclusive
integer
Fin de la ventana de validez de la credencial, en segundos epoch (exclusivo).
Las fechas de validez de la credencial se expresan en segundos epoch, no en milisegundos. La mayoría de los demás endpoints de Rhombus usan milisegundos epoch, así que convierta con cuidado.
La respuesta devuelve el objeto credential creado, incluyendo su uuid, lowercaseHexValue y workflowStatus (ACTIVE, UNASSIGNED, SUSPENDED o REVOKED).

Asignar una credencial existente a un usuario

Si una credencial ya existe (por ejemplo, se creó sin asignar), asígnela a un usuario por su valor hexadecimal.
import requests

headers = {
    "x-auth-scheme": "api-token",
    "x-auth-apikey": "YOUR_API_KEY",
    "Content-Type": "application/json"
}

response = requests.post(
    "https://api2.rhombussystems.com/api/accesscontrol/assignAccessControlCredential",
    headers=headers,
    json={
        "credentialHexValue": "002a2929",
        "userUuid": "YOUR_USER_UUID"
    }
)
print(response.json())
credentialHexValue
string
requerido
El valor hexadecimal de la credencial a asignar.
userUuid
string
requerido
El usuario al que asignar la credencial.
Administre el ciclo de vida de una credencial con /api/accesscontrol/suspendAccessControlCredential, /api/accesscontrol/unsuspendAccessControlCredential y /api/accesscontrol/revokeAccessControlCredential. Para revisar las credenciales de un usuario, llame a /api/accesscontrol/findAccessControlCredentialByUser con su userUuid.

Otorgar acceso con grupos y horarios

Rhombus modela “quién puede abrir qué puertas y cuándo” como una concesión de acceso. Una concesión vincula un conjunto de usuarios (directamente o a través de grupos de acceso) con un conjunto de puertas, opcionalmente restringido por un horario. El flujo típico es: crear un grupo, agregar usuarios y luego crear una concesión que vincule el grupo con puertas y un horario.

Crear un grupo de acceso y agregar usuarios

import requests

headers = {
    "x-auth-scheme": "api-token",
    "x-auth-apikey": "YOUR_API_KEY",
    "Content-Type": "application/json"
}

# Crear el grupo
create = requests.post(
    "https://api2.rhombussystems.com/api/accesscontrol/createAccessControlGroup",
    headers=headers,
    json={
        "name": "Personal de almacén",
        "description": "Empleados con acceso permitido al almacén"
    }
)
group_uuid = create.json()["group"]["uuid"]

# Agregar usuarios a él
requests.post(
    "https://api2.rhombussystems.com/api/accesscontrol/addUsersToAccessControlGroup",
    headers=headers,
    json={
        "groupUuid": group_uuid,
        "userUuids": ["USER_UUID_1", "USER_UUID_2"]
    }
)
name
string
requerido
Nombre del grupo de acceso.
description
string
Descripción opcional del grupo.
userUuids
array
Lista opcional de UUID de usuarios con los que inicializar el grupo al momento de la creación. También puede agregar miembros más tarde con addUsersToAccessControlGroup.

(Opcional) Crear un horario semanal

Para restringir una concesión a horas específicas, primero cree un horario y haga referencia a su UUID en la concesión. Los horarios semanales usan la estrategia WEEKLY_REPEATING_MINUTES.
import requests

headers = {
    "x-auth-scheme": "api-token",
    "x-auth-apikey": "YOUR_API_KEY",
    "Content-Type": "application/json"
}

response = requests.post(
    "https://api2.rhombussystems.com/api/schedule/createWeeklySchedule",
    headers=headers,
    json={
        "schedule": {
            "name": "Horario laboral",
            "strategy": "WEEKLY_REPEATING_MINUTES"
        }
    }
)
schedule_uuid = response.json().get("scheduleUuid")
print(schedule_uuid)
La respuesta devuelve un scheduleUuid. Use /api/schedule/getSchedules y /api/schedule/getScheduleDataV2 para revisar los horarios, y administre los intervalos de tiempo semanales detallados en la Consola de Rhombus.

Crear la concesión de acceso

Vincule el grupo, las puertas y (opcionalmente) un horario. Use el modo DEFAULT para una concesión de acceso estándar.
import requests

headers = {
    "x-auth-scheme": "api-token",
    "x-auth-apikey": "YOUR_API_KEY",
    "Content-Type": "application/json"
}

response = requests.post(
    "https://api2.rhombussystems.com/api/accesscontrol/createAccessGrant",
    headers=headers,
    json={
        "accessGrant": {
            "name": "Personal de almacén - Horario laboral",
            "locationUuid": "YOUR_LOCATION_UUID",
            "mode": "DEFAULT",
            "groupUuids": ["GROUP_UUID"],
            "accessControlledDoorUuids": ["DOOR_UUID_1", "DOOR_UUID_2"],
            "scheduleUuid": "SCHEDULE_UUID"
        }
    }
)

data = response.json()
if data.get("error"):
    print("Error:", data.get("errorMsg"))
else:
    print("Concesión creada:", data["accessGrant"]["uuid"])
accessGrant.name
string
Nombre legible para la concesión.
accessGrant.locationUuid
string
La ubicación a la que se aplica la concesión.
accessGrant.mode
string
Modo de concesión, uno de DEFAULT o GUEST_PASS_INDIVIDUAL. Use DEFAULT para el acceso estándar de empleados.
accessGrant.groupUuids
array
Grupos de acceso cuyos miembros reciben acceso. Combine con userUuids para otorgar acceso a usuarios individuales directamente.
accessGrant.userUuids
array
Usuarios individuales a los que otorgar acceso, además de cualquier grupo.
accessGrant.accessControlledDoorUuids
array
Las puertas que abre esta concesión. También puede apuntar a puertas por etiqueta con doorLabelIds.
accessGrant.scheduleUuid
string
Horario opcional que restringe cuándo está activa la concesión. Omítalo para acceso 24/7.
accessGrant
object
La concesión creada, incluyendo su uuid generado.
error
boolean
true si la concesión no se pudo crear. Consulte errorMsg para más detalles y warningMsg para notas no fatales.

Activar un plan de confinamiento

Los planes de confinamiento le permiten cambiar instantáneamente el estado de acceso de muchas puertas en una ubicación durante una emergencia. Primero liste los planes configurados para su organización y luego active uno o más para una ubicación.

Buscar planes de confinamiento disponibles

import requests

headers = {
    "x-auth-scheme": "api-token",
    "x-auth-apikey": "YOUR_API_KEY",
    "Content-Type": "application/json"
}

response = requests.post(
    "https://api2.rhombussystems.com/api/accesscontrol/lockdownPlan/findLockdownPlans",
    headers=headers,
    json={}
)
for plan in response.json().get("lockdownPlans", []):
    print(f"{plan.get('name')}: {plan.get('uuid')}")

Activar el confinamiento para una ubicación

import requests
import time

headers = {
    "x-auth-scheme": "api-token",
    "x-auth-apikey": "YOUR_API_KEY",
    "Content-Type": "application/json"
}

response = requests.post(
    "https://api2.rhombussystems.com/api/accesscontrol/lockdownPlan/activateLockdownForLocation",
    headers=headers,
    json={
        "locationUuid": "YOUR_LOCATION_UUID",
        "lockdownPlanUuids": ["LOCKDOWN_PLAN_UUID"],
        "stateUpdatedAtMillis": int(time.time() * 1000)
    }
)

data = response.json()
print("Resultado:", data.get("result"))
print("Estado de la ubicación:", data.get("state", {}).get("state"))
locationUuid
string
requerido
La ubicación a poner en confinamiento.
lockdownPlanUuids
array
requerido
Los planes de confinamiento a activar. Use los UUID de findLockdownPlans.
stateUpdatedAtMillis
integer
requerido
La marca de tiempo actual del estado de confinamiento en milisegundos epoch, usada para concurrencia optimista. Envíe la hora actual al iniciar un confinamiento.
result
string
Resultado de la activación, uno de SUCCESS, INVALID_LOCKDOWN_PLANS u OPTIMISTIC_CONCURRENCY.
state
object
El estado de confinamiento resultante de la ubicación, incluyendo state (STANDARD_SECURITY o LOCKED_DOWN) y la lista de activeLockdownPlans.
Activar un confinamiento cambia el acceso físico en la ubicación de inmediato. Pruebe su integración con /api/accesscontrol/lockdownPlan/enableLockdownTestModeForLocation antes de usarla en producción, y finalice un confinamiento con /api/accesscontrol/lockdownPlan/deactivateLockdownForLocation.

Casos de uso

Entrada remota para visitantes

Permita que el software de recepción desbloquee una puerta bajo demanda cuando se verifica a un visitante, con imágenes de cámara adjuntas a cada desbloqueo.

Incorporación automatizada

Aprovisione la credencial y la membresía de grupo de un nuevo empleado desde su sistema de RR. HH. para que su acceso esté listo desde el primer día.

Ventanas de tiempo para contratistas

Emita credenciales con fechas explícitas de inicio y fin, y restrinja el acceso al horario laboral con un horario.

Confinamiento de emergencia

Conecte un botón de pánico o un sistema de seguridad para activar un plan de confinamiento en toda una ubicación con una sola llamada a la API.

Solución de problemas

Confirme que la puerta tenga remoteUnlockEnabled establecido en true en la respuesta del listado de puertas, que el accessControlledDoorUuid sea correcto y que su clave de API tenga permisos de control de acceso. Las puertas que están fuera de línea no se pueden desbloquear de forma remota.
Crear y asignar una credencial no es suficiente por sí solo: el usuario también debe estar cubierto por una concesión de acceso que incluya la puerta de destino. Verifique que una concesión DEFAULT vincule al usuario (directamente o a través de un grupo) con la puerta, y que cualquier horario adjunto esté actualmente activo. Confirme también que el workflowStatus de la credencial sea ACTIVE y que la hora actual esté dentro de su ventana de inicio/fin.
startDateEpochSecInclusive y endDateEpochSecExclusive usan segundos epoch, no milisegundos. Si una credencial expira de inmediato o nunca se activa, compruebe que no haya pasado un valor en milisegundos.
El estado de confinamiento de la ubicación cambió entre su lectura y su escritura. Vuelva a obtener el estado actual (por ejemplo, con getOrCreateLocationLockdownState) y luego reintente la activación con un stateUpdatedAtMillis actualizado.
Inspeccione errorMsg en la respuesta. Las causas comunes son hacer referencia a una puerta que no tiene una licencia de control de acceso disponible (consulte unassignedACDLicensesDoorUuids y expiredACDLicensesDoorUuids en la respuesta) o un locationUuid no válido.

Próximos pasos

Control de acceso con código QR

Agregue entrada táctil con código QR autenticada por cámara para visitantes y eventos (beta).

Notificaciones por webhook

Reciba eventos de acceso en tiempo real para que su aplicación pueda reaccionar en el momento en que se usa una puerta.

Referencia de la API

Explore los esquemas completos de solicitud y respuesta para cada endpoint de control de acceso.
Última modificación el 8 de julio de 2026