Enregistrer une tentative d'accès ou un refus

Enregistre une tentative d'accès ou un refus déjà décidé par votre système. Le contrôleur de porte/portail n'est pas contacté et la porte ne se déverrouille pas.

Utilisez cet endpoint lorsque votre système refuse l'entrée, ou lorsqu'une tentative doit apparaître dans les Journaux d'accès de Door & Gate Access sans déverrouillage. Performance Hub n'évalue pas le statut d'adhésion, les heures d'accès ni les autres règles d'accès.

Un événement refusé apparaît dans les Journaux d'accès de Door & Gate Access avec le résultat Denied, le nom de votre entreprise partenaire, la porte, l'identifiant du membre lorsque vous en envoyez un, et le code de motif sous une forme lisible. Par exemple, membership_expired s'affiche sous la forme « Membership Expired ». reason_display_text et user_email sont stockés avec l'événement.

Paramètres

  • door_id string obligatoire

    ID du contrôleur de porte/portail renvoyé par l'endpoint de liste.

  • facility_id string l'un ou l'autreIndiquez le type d'identifiant d'installation configuré pour votre intégration : utilisez facility_id pour les intégrations à liaison directe, ou linking_identifier pour les intégrations à identifiant de liaison. N'envoyez pas les deux ; l'API utilise le type d'identifiant configuré pour votre compte partenaire et ignore l'autre. En savoir plus

    ID d'installation Performance Hub. Obligatoire pour les intégrations à liaison directe.

  • linking_identifier string l'un ou l'autreIndiquez le type d'identifiant d'installation configuré pour votre intégration : utilisez facility_id pour les intégrations à liaison directe, ou linking_identifier pour les intégrations à identifiant de liaison. N'envoyez pas les deux ; l'API utilise le type d'identifiant configuré pour votre compte partenaire et ignore l'autre. En savoir plus

    Identifiant d'installation du partenaire. Obligatoire pour les intégrations à identifiant de liaison.

  • outcome string obligatoire

    denied ou attempted.

  • reason string facultatif

    Code de motif en snake_case minuscule, 64 caractères maximum. Obligatoire lorsque outcome vaut denied. Exemple : membership_expired.

  • reason_display_text string facultatif

    Motif lisible, 256 caractères maximum. Exemple : Membership expired on 2026-04-01.

  • member_id string facultatif

    ID du membre chez le partenaire. Omettez-le lorsque l'identifiant d'accès ne correspond à aucun membre, par exemple une carte inconnue.

  • user_email string facultatif

    Adresse e-mail de la personne qui a tenté d'accéder.

  • timestamp string facultatif

    Moment de la tentative, au format ISO 8601 avec fuseau horaire. Exemple : 2026-05-18T10:15:30Z. Par défaut, l'heure de réception de la requête. Ne doit pas être située plus de 5 minutes dans le futur ni dater de plus de 30 jours.

  • idempotency_key string facultatif

    Clé de protection contre la relecture, 128 caractères maximum. Réutiliser la même clé pour le même partenaire, la même installation et la même porte renvoie le résultat d'origine.

Valeur renvoyée

Renvoie 201 lorsque l'événement est enregistré. Rejouer la même idempotency_key renvoie 200 avec idempotent défini sur true et ne crée pas de nouvel événement.

Une clé dry-run renvoie 200 avec dry_run défini sur true. Rien n'est enregistré.

Échecs courants :

  • 400 - le corps est invalide, un refus n'a pas de reason, l'horodatage est hors plage, ou facility_id / linking_identifier ne correspond à aucune installation liée.
  • 403 - la clé est en lecture seule.
  • 403 integration_not_enabled - votre intégration n'est pas activée pour l'installation. message en indique la raison.
  • 404 - le contrôleur de porte/portail est introuvable pour l'installation liée.

Requête

curl -X POST https://partner-api.performancehub.co/partner/v1/access-control/doors/00000000000000000000000000000007/access-events \
  -u sk_live_YOUR_PARTNER_SECRET_KEY: \
  -H "Content-Type: application/json" \
  -d '{
    "facility_id": "550e8400-e29b-41d4-a716-446655440000",
    "outcome": "denied",
    "reason": "membership_expired",
    "reason_display_text": "Membership expired on 2026-04-01",
    "member_id": "mem_12345",
    "user_email": "member@example.com",
    "timestamp": "2026-05-18T10:15:30Z",
    "idempotency_key": "evt_abc12345"
  }'

Réponse

{
  "status": "recorded",
  "event_id": "00000000-0000-0000-0000-000000000045",
  "outcome": "denied",
  "door_id": "00000000000000000000000000000007",
  "facility_id": "550e8400-e29b-41d4-a716-446655440000",
  "timestamp": "2026-05-18T10:15:30.000Z"
}

Relecture idempotente

{
  "status": "recorded",
  "event_id": "00000000-0000-0000-0000-000000000045",
  "outcome": "denied",
  "door_id": "00000000000000000000000000000007",
  "facility_id": "550e8400-e29b-41d4-a716-446655440000",
  "timestamp": "2026-05-18T10:15:30.000Z",
  "idempotent": true
}