Pass a share link's gates and open a viewing session
Clears the link's access controls and answers with the viewing session — a `viewId`, whether download is permitted, and the documents behind the link —…
POST /v1/dataroom/view/{linkId}/authenticate
| Address | https://api.hanzo.ai/v1/dataroom/view/{linkId}/authenticate |
| Method | POST |
| Operation | post_dataroom_view_by_linkid_authenticate |
| Auth | Authorization: Bearer $HANZO_API_KEY |
Clears the link's access controls and answers with the viewing session — a viewId, whether download is permitted, and the documents behind the link — which every later viewer call is authorised by.
No principal: the visitor is whoever holds the link id, and the org is resolved from it. The gates run in a fixed order and each is a flat refusal, never a hint. An archived or unknown link is 404 and an expired one 403. A missing address on an email-protected link is 401. An address on the deny list is 403, checked BEFORE the allow list so deny always wins. An address the allow list does not admit is 403 — an EMPTY allow list admits everyone, so a link with no list enforces the email gate alone. A wrong or absent password is 401, decided against the stored bcrypt hash.
The address is taken as stated and recorded UNVERIFIED: it names a viewer for analytics and repeat visits from it reuse one viewer record, but it proves nothing about who is on the other end. A link gated only by email is openable by anyone the link reaches.
Request
1 field.
| Field | In | Type | Required | Description |
|---|---|---|---|---|
linkId | path | string | yes |
Response
The document declares no response body for this operation. It answers 200 on success and the platform error shape on failure — see Errors.
Examples
hanzo dataroom view authenticate <linkId>import { Configuration, DataroomApi } from 'hanzoai';
const api = new DataroomApi(new Configuration({ accessToken: process.env.HANZO_API_KEY }));
const { data } = await api.postDataroomViewByLinkidAuthenticate({ linkId: 'linkId' });from hanzoai.cloud import ApiClient, Configuration
from hanzoai.cloud.api import DataroomApi
client = ApiClient(Configuration(access_token=os.environ["HANZO_API_KEY"]))
result = DataroomApi(client).post_dataroom_view_by_linkid_authenticate(link_id='linkId')cfg := cloud.NewConfiguration()
cfg.AddDefaultHeader("Authorization", "Bearer "+os.Getenv("HANZO_API_KEY"))
client := cloud.NewAPIClient(cfg)
resp, _, err := client.DataroomAPI.PostDataroomViewByLinkidAuthenticate(context.Background()).Execute()
if err != nil {
return err
}use hanzo_cloud::apis::{configuration::Configuration, dataroom_api};
let mut cfg = Configuration::new();
cfg.bearer_access_token = std::env::var("HANZO_API_KEY").ok();
let result = dataroom_api::post_dataroom_view_by_linkid_authenticate(&cfg, Default::default()).await?;import ai.hanzo.cloud.ApiClient;
import ai.hanzo.cloud.api.DataroomApi;
ApiClient client = new ApiClient();
client.setRequestInterceptor(b -> b.header("Authorization", "Bearer " + System.getenv("HANZO_API_KEY")));
var result = new DataroomApi(client).postDataroomViewByLinkidAuthenticate();curl -X POST https://api.hanzo.ai/v1/dataroom/view/<linkId>/authenticate \
-H "Authorization: Bearer $HANZO_API_KEY"The door reaches dataroom through the dataroom tool, which names its 17 operations with its own verbs — this one among them, under a name only the door declares. describe explains any of them:
curl -X POST https://api.hanzo.ai/v1/mcp \
-H "Content-Type: application/json" \
-d '{
"jsonrpc": "2.0",
"id": 1,
"method": "tools/call",
"params": {
"name": "describe",
"arguments": {
"op": "get_dataroom_analytic_dataroom"
}
}
}'How is this guide?