Skip to main content
One-time passcode (OTP) protection requires anonymous recipients of a public shared link (access set to open) to verify their email address with a code sent to their inbox before they can access the content. To audit who accessed OTP-protected links, which codes were sent and to whom, and how OTP settings changed, use the following events in the stream: These events follow the standard object schema and are available in both the admin_logs and admin_logs_streaming stream types. Only admins of the enterprise that owns the shared item can see them.
OTP events contain email addresses of recipients, including people outside your enterprise. The email, grantedEmail, and Access List value fields are personally identifiable information. Handle them according to your organization’s data protection policies.

OTP modes

The mode and otpMode fields use the same values as the one_time_passcode.mode field of a . In the Box web app, the allowlist mode is labeled Only people added to the link’s Access List.

OTP settings updated

The existing ITEM_SHARED_UPDATE event includes the OTP configuration before and after each change in additional_details.sharedLinkSettings, alongside the other shared link settings, such as oldVisibilityStatus and newIsPasswordProtected. The event captures turning OTP on or off, switching between open and allowlist modes, and adding or removing Access List entries. The event is triggered by changes made in the Box web app and through the shared link endpoints, such as . When a shared link update doesn’t involve OTP, the OTP fields are null. The following example shows an owner removing a domain from a link’s Access List:
The following example shows the additional_details of an owner switching from allowlist to open mode:

OTP access decision

A SHARED_LINK_ONE_TIME_PASSCODE_ACCESS event is triggered each time someone opens an OTP-protected shared link, for both signed-in Box users and anonymous recipients. The decision and reason fields describe the outcome. The event stores the access decision in a sharedLinkOneTimePasscodeAccess object inside the event’s additional_details field, with the following fields: Fields without a value are omitted from sharedLinkOneTimePasscodeAccess, rather than set to null. The following example shows an anonymous recipient who verified their email address earlier in the session:
The following example shows the created_by and additional_details of a signed-in user whose email address isn’t on the Access List:

OTP challenge

A SHARED_LINK_ONE_TIME_PASSCODE_CHALLENGE event is triggered at each step of the passcode challenge: when a recipient submits an email address to receive a code (send phase), and when they submit a code (verify phase). The event stores the challenge details in a sharedLinkOneTimePasscodeChallenge object inside the event’s additional_details field, with the following fields: The following example shows a code sent to a recipient:
The following example shows the additional_details of the same recipient submitting an incorrect code:

Preview and download events

When an anonymous recipient previews or downloads content through an OTP-protected link, the PREVIEW and DOWNLOAD events still identify the recipient as an anonymous user, with a created_by.id of 2. These events don’t include the verified email address. To find out which email addresses accessed a link, use SHARED_LINK_ONE_TIME_PASSCODE_ACCESS and SHARED_LINK_ONE_TIME_PASSCODE_CHALLENGE events.
Last modified on October 22, 2026