Ir al contenido
Fusehub
ACS

Crear persona

POST
/api/integration/v1/sites/{site_id}/acs/persons/provision

Registra una persona en la sede y la envía a los terminales en la misma llamada; sync.status en la respuesta dice si todos la recibieron. Se envía como multipart/form-data, con la foto como archivo opcional. Un empleado necesita un grupo; un visitante, un nivel de acceso o una lista de terminales, y siempre una fecha de fin.

Autenticación

IntegrationKey
headerX-Integration-Key<token>

Tu clave de integración. Se crea en la consola de Fusehub, en Herramientas de desarrollo → API Keys.

site_id*Site Id

Código de la sede.

multipart/form-data
  1. body
externalPersonId*Externalpersonid

Identificador propio de la persona, por ejemplo su número de empleado. Con él se consulta y modifica después.

userType?Usertype

normal (empleado) o visitor (visitante).

Por defecto"normal"
hasExpiration*Hasexpiration

true si el acceso vence; exige startTime y endTime. Con false no se envían fechas. Para visitantes siempre es true.

startTime?|

Inicio del acceso en hora local de la sede, por ejemplo 2026-10-06T09:00:00. Obligatorio si hasExpiration es true.

endTime?|

Fin del acceso en hora local de la sede, por ejemplo 2026-10-06T18:00:00. Obligatorio si hasExpiration es true.

accessGroupId?|

Código del grupo. Obligatorio para empleados.

accessLevelId?|

Código del nivel de acceso. Solo para visitantes, en lugar de deviceSerials.

deviceSerials?|

Solo para visitantes: números de serie de los terminales, separados por coma. Fusehub arma un nivel de acceso temporal con sus puertas.

maxOpenDoorTime?|

Cantidad máxima de entradas del visitante (0 a 1000). 0 es sin límite.

name?|

Nombre completo.

givenName?|

Nombre.

familyName?|

Apellido.

photo?|

Foto de la cara en JPEG o PNG, como archivo (no en Base64). Opcional.

Cuerpo de la respuesta

OK

application/json
  1. response
ok?Ok
Por defectotrue
person*
deviceLinks?array<>
accessLevels?array<>
directAccessLevels?array<>
groups?array<>
accessStatus?|

granted (tiene acceso), denied (no tiene niveles de acceso) o expired (su acceso venció).

sync?|

Resultado del envío a los terminales. Viene al crear, modificar o reenviar la persona.

[key: string]?any
Ejemplo de petición
curl -X POST 'https://api.fusehub.lat/api/integration/v1/sites/string/acs/persons/provision' \  -F 'externalPersonId=string' \  -F 'hasExpiration=string'
Ejemplo de respuesta
{  "ok": true,  "person": {    "id": "00000000-0000-4000-8000-000000000101",    "siteId": "00000000-0000-4000-8000-000000000044",    "externalPersonId": "invite-9001",    "name": "Invitado Demo",    "enabled": true,    "validFrom": "2026-10-06T09:00:00",    "validTo": "2026-10-06T18:00:00",    "userType": "visitor",    "maxOpenDoorTime": 3,    "accessStatus": "granted"  },  "deviceLinks": [],  "accessLevels": [    {      "id": "aa10c4d2-1e77-4b90-8c33-91f0a2b64d10",      "name": "Visitantes",      "kind": "permanent",      "doorBindings": [        {          "deviceId": "00000000-0000-4000-8000-000000000163",          "doorNos": [            1          ],          "deviceSerial": "DS-K1T343-ABC",          "serialNumber": "DS-K1T343-ABC",          "shortSerial": "ABC"        }      ]    }  ],  "directAccessLevels": [],  "groups": [],  "accessStatus": "granted",  "sync": {    "status": "synced",    "applied": 1,    "failed": 0,    "results": [      {        "deviceId": "00000000-0000-4000-8000-000000000163",        "serial": "DS-K1T343-ABC",        "deviceSerial": "DS-K1T343-ABC",        "shortSerial": "ABC",        "ok": true      }    ]  }}