Запись попытки доступа или отказа
Записывает попытку доступа или отказ, решение о котором ваша система уже приняла. Обращения к контроллеру 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
}