https://www.helprange.com/public-api/file/{file_id}/linkA new labelled link for a document. label, isAllowDownloadingAndPrint, isOnlyOneUserViewing, passcode and expirationDate must be present (passcode and expirationDate may be null). Booleans: true / false, 1 / 0 or "true" / "false". An empty label, an expirationDate in the past or unreadable, or a negative / non-whole viewsLimit answer 400 with {"result": "failure", "reason"}. A protection setting your plan does not include answers 403 with {"result": "failure", "reason", "plan_error", "features"}.
Plans: Max, Unlimited, Deal Room Pass, trial. Auth: the API key in Authorization (bare, or Bearer hr_live_…) (v1). Scope: links:write. Operation id: v1CreateLink
| Name | In | Type | Description |
|---|---|---|---|
file_id required | path | integer | Document id. (min 1) |
Content types: application/json.
| Field | Type | Description |
|---|---|---|
label required | string | Name of the link (not empty). |
isAllowDownloadingAndPrint required | boolean or integer or string | Allow download & print. true / false (also 1 / 0 or "true" / "false"). |
isOnlyOneUserViewing required | boolean or integer or string | Only one person can view at the same time. true / false (also 1 / 0 or "true" / "false"). |
passcode required | string or null | Only spaces = no passcode. |
expirationDate required | string (date) or null | Last day, YYYY-MM-DD: today or later (a past day → 400). |
viewsLimit | integer or null | 0 or null = no limit; negative → 400. (min 0) |
isForwardable | boolean or integer or string | Default true. true / false (also 1 / 0 or "true" / "false"). |
isScreenshotMask | boolean or integer or string | Screenshot protection. true / false (also 1 / 0 or "true" / "false"). |
isScreenAppOnly | boolean or integer or string | Open only in the app. true / false (also 1 / 0 or "true" / "false"). |
isWatermark | boolean or integer or string | Watermark. true / false (also 1 / 0 or "true" / "false"). |
curl -X POST https://www.helprange.com/public-api/file/124/link \
-H "Authorization: $HELPRANGE_API_KEY" \
-H 'Content-Type: application/json' \
--data-binary '{"label": "someLabel", "isAllowDownloadingAndPrint": true, "isOnlyOneUserViewing": false, "isForwardable": true, "isScreenshotMask": false, "isWatermark": false, "passcode": "abcd", "expirationDate": "2026-12-24", "viewsLimit": 10}'
const res = await fetch('https://www.helprange.com/public-api/file/124/link', {
method: 'POST',
headers: {'Authorization': process.env.HELPRANGE_API_KEY, 'Content-Type': 'application/json'},
body: JSON.stringify({
"label": "someLabel",
"isAllowDownloadingAndPrint": true,
"isOnlyOneUserViewing": false,
"isForwardable": true,
"isScreenshotMask": false,
"isWatermark": false,
"passcode": "abcd",
"expirationDate": "2026-12-24",
"viewsLimit": 10
}),
});
const data = await res.json();
if (!res.ok) throw new Error(`${res.status}: ${data.error || data.message || data.reason}`);
console.log(data);
import os
import requests
r = requests.post(
'https://www.helprange.com/public-api/file/124/link',
headers={'Authorization': os.environ['HELPRANGE_API_KEY']},
json={
"label": "someLabel",
"isAllowDownloadingAndPrint": True,
"isOnlyOneUserViewing": False,
"isForwardable": True,
"isScreenshotMask": False,
"isWatermark": False,
"passcode": "abcd",
"expirationDate": "2026-12-24",
"viewsLimit": 10,
},
timeout=60,
)
r.raise_for_status()
print(r.json())
The samples read the key from the HELPRANGE_API_KEY environment variable.
| Status | Description |
|---|---|
200 | OK |
400 | Invalid input – the message says which parameter. |
401 | Missing or invalid API key / OAuth token. Team keys: code invalid_key, key_revoked, key_expired or key_owner_removed. |
402 | Your plan does not include the REST API (or this feature). |
403 | v1: the key is invalid, or the folder / file / guest / data room is not yours (HTML page unless you send Accept: application/json). Team keys (v1 and v2): code insufficient_scope with required_scope – the key lacks the scope this endpoint needs. |
404 | Not found. |
429 | A usage limit was reached – wait Retry-After seconds. |
{
"id": 261,
"link": "/view/8956d1e7b91b47e1a67a8040b1d4894f"
}
Uses your real account. The request goes from your browser straight to www.helprange.com with your API key and acts as you – this POST changes data. The key stays in this page (in this tab's session storage only if you tick the box), is never put in a URL and is not sent to analytics. Do not paste a key on a shared computer.