Unlock a Door/Gate Controller

Sends an unlock command to the Door/Gate Controller and waits for the physical relay to confirm it has unlocked.

Your system must decide whether the person is authorised before calling this endpoint. Performance Hub only verifies the partner key, facility access, door ownership, and device state.

Parameters

  • door_id string required

    Door/Gate Controller ID returned by the list endpoint.

  • facility_id string either/orProvide the facility identifier type configured for your integration: use facility_id for direct-link integrations, or linking_identifier for linking-identifier integrations. Do not send both; the API uses the identifier type configured for your partner account and ignores the other one. Learn more

    Performance Hub facility ID. Required for direct-link integrations.

  • linking_identifier string either/orProvide the facility identifier type configured for your integration: use facility_id for direct-link integrations, or linking_identifier for linking-identifier integrations. Do not send both; the API uses the identifier type configured for your partner account and ignores the other one. Learn more

    Partner facility identifier. Required for linking-identifier integrations.

  • member_id string required

    Partner member ID. This is used for audit logging and later data linking.

  • first_name string required

    First name of the person opening the door.

  • last_name string required

    Last name of the person opening the door.

  • full_name string optional

    Optional. If omitted, Performance Hub combines first_name and last_name.

  • check_in_id string optional

    Optional check-in ID from your system for correlation.

  • idempotency_key string optional

    Optional replay-protection key. Reusing the same key for the same partner, facility, and door returns the existing result when available.

Returns

Returns 200 only when the device confirms the relay physically unlocked. The door uses the hold time configured in Performance Hub Device Management; partners cannot override relay timing per request. Most confirmations should complete in 3-5 seconds. Treat the documented timeout as an explicit failed unlock and retry only according to your own safety rules.

Common failures:

  • 403 integration_not_enabled - your integration is not enabled for the facility.
  • 409 maintenance_mode_active - facility staff have enabled maintenance mode for the door.
  • 503 device_offline - the Door/Gate Controller is offline or stale.
  • 504 unlock_confirmation_timeout - the command was sent but no matching confirmation was received before timeout.

Request

curl -X POST https://partner-api.performancehub.co/partner/v1/access-control/doors/00000000000000000000000000000007/unlock \
  -u sk_live_YOUR_PARTNER_SECRET_KEY: \
  -H "Content-Type: application/json" \
  -d '{
    "facility_id": "550e8400-e29b-41d4-a716-446655440000",
    "member_id": "mem_12345",
    "first_name": "Jane",
    "last_name": "S.",
    "full_name": "Jane S.",
    "source": "door_reader",
    "idempotency_key": "unlock_20260501_0001"
  }'

Response

{
  "status": "unlocked",
  "door_id": "00000000000000000000000000000007",
  "facility_id": "550e8400-e29b-41d4-a716-446655440000",
  "event_id": "00000000-0000-0000-0000-000000000045",
  "command_id": "00000000-0000-0000-0000-000000000049",
  "hold_time_seconds": 10,
  "confirmed_at": "2026-05-01T04:30:00.000Z"
}

Failure response

{
  "status": "failed",
  "reason": "device_offline",
  "door_id": "00000000000000000000000000000007",
  "facility_id": "550e8400-e29b-41d4-a716-446655440000",
  "event_id": "00000000-0000-0000-0000-000000000045"
}