Запись попытки доступа или отказа

Записывает попытку доступа или отказ, решение о котором ваша система уже приняла. Обращения к контроллеру Door/Gate Controller не происходит, и дверь не разблокируется.

Используйте этот вызов, когда ваша система отказывает во входе или когда попытка должна отобразиться в журналах доступа Door & Gate Access без разблокировки. Performance Hub не проверяет статус членства, часы доступа или другие правила доступа.

Событие отказа отображается в журналах доступа Door & Gate Access с результатом Denied, именем вашего партнера, дверью, идентификатором участника (если вы его передали) и кодом причины в удобочитаемом виде. Например, membership_expired отображается как "Membership Expired". Значения reason_display_text и user_email сохраняются вместе с событием.

Параметры

  • door_id string обязательный

    Идентификатор контроллера Door/Gate Controller, возвращаемый конечной точкой получения списка.

  • facility_id string одно из двухУкажите тип идентификатора объекта, настроенный для вашей интеграции: facility_id для интеграций с прямой связью или linking_identifier для интеграций со связующим идентификатором. Не отправляйте оба; API использует тип идентификатора, настроенный для вашей партнерской учетной записи, и игнорирует другой. Подробнее

    Идентификатор объекта в Performance Hub. Обязателен для интеграций с прямой связью.

  • linking_identifier string одно из двухУкажите тип идентификатора объекта, настроенный для вашей интеграции: facility_id для интеграций с прямой связью или linking_identifier для интеграций со связующим идентификатором. Не отправляйте оба; API использует тип идентификатора, настроенный для вашей партнерской учетной записи, и игнорирует другой. Подробнее

    Идентификатор объекта на стороне партнера. Обязателен для интеграций со связующим идентификатором.

  • outcome string обязательный

    denied или attempted.

  • reason string необязательный

    Код причины в нижнем регистре в формате snake_case, до 64 символов. Обязателен, если outcome имеет значение denied. Пример: membership_expired.

  • reason_display_text string необязательный

    Удобочитаемая причина, до 256 символов. Пример: Membership expired on 2026-04-01.

  • member_id string необязательный

    Идентификатор участника на стороне партнера. Не указывайте его, если учетные данные не соответствуют ни одному участнику, например при использовании неизвестной карты.

  • user_email string необязательный

    Адрес электронной почты человека, пытавшегося получить доступ.

  • timestamp string необязательный

    Время попытки в формате ISO 8601 с часовым поясом. Пример: 2026-05-18T10:15:30Z. По умолчанию используется время получения запроса. Значение не должно опережать текущее время более чем на 5 минут или быть старше 30 дней.

  • idempotency_key string необязательный

    Ключ защиты от повторов, до 128 символов. При повторном использовании того же ключа для того же партнера, объекта и двери возвращается исходный результат.

Возвращаемое значение

Возвращает 201, если событие записано. Повторная отправка с тем же idempotency_key возвращает 200 со значением idempotent, равным true, и не создает новое событие.

Ключ dry-run возвращает 200 со значением dry_run, равным true. Ничего не записывается.

Типичные ошибки:

  • 400 — тело запроса недопустимо, для отказа не указан reason, время вне допустимого диапазона или facility_id / linking_identifier не соответствует связанному объекту.
  • 403 — ключ предназначен только для чтения.
  • 403 integration_not_enabled — ваша интеграция не включена для объекта. Причина указана в message.
  • 404 — контроллер Door/Gate Controller не найден для связанного объекта.

Запрос

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"
  }'

Ответ

{
  "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"
}

Идемпотентный повтор

{
  "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
}