https://www.helprange.com/api/v2/data-rooms/{data_room_id}/questionsAdds a question (e.g. from a buyer's list), like importing a question list in the panel: nobody is e-mailed. Answer and approve it in the panel. 409 when the room is frozen. Q&A and request lists need the Max or Unlimited plan, the Deal Room Pass or the trial (else 402).
Plans: Max, Unlimited, Deal Room Pass, trial. Auth: Authorization: Bearer hr_live_… (team key), X-API-Key, Authorization: Api-Key <key> or an OAuth Bearer token. Scope: rooms:write. Operation id: addDataRoomQuestion
| Name | In | Type | Description |
|---|---|---|---|
data_room_id required | path | integer | Data room id (from List data rooms). (min 1) |
Content types: application/json, application/x-www-form-urlencoded.
| Field | Type | Description |
|---|---|---|
text required | string | The question. (max length 4000) |
category | "legal" | "financial" | "tax" | "hr" | "commercial" | "it" | "other" | Default other. |
document_id | integer | A document of the room the question is about … |
index | string | … or its index number, e.g. "2.1". |
page | integer | Page number. (min 1) |
all_guests | boolean | true: published to the room's FAQ once answered. |
curl -X POST https://www.helprange.com/api/v2/data-rooms/10/questions \
-H "X-API-Key: $HELPRANGE_API_KEY" \
-H 'Content-Type: application/json' \
--data-binary '{"text": "Any pending litigation?", "category": "legal", "index": "2.1", "page": 4}'
const res = await fetch('https://www.helprange.com/api/v2/data-rooms/10/questions', {
method: 'POST',
headers: {'X-API-Key': process.env.HELPRANGE_API_KEY, 'Content-Type': 'application/json'},
body: JSON.stringify({
"text": "Any pending litigation?",
"category": "legal",
"index": "2.1",
"page": 4
}),
});
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/api/v2/data-rooms/10/questions',
headers={'X-API-Key': os.environ['HELPRANGE_API_KEY']},
json={
"text": "Any pending litigation?",
"category": "legal",
"index": "2.1",
"page": 4,
},
timeout=60,
)
r.raise_for_status()
print(r.json())
The samples read the key from the HELPRANGE_API_KEY environment variable.
| Status | Description |
|---|---|
201 | Created |
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 | The team API key lacks the scope this endpoint needs. |
404 | Not found – or not yours (the API never says which). |
405 | Wrong HTTP method for this endpoint. |
409 | The data room is frozen, or the signed PDF is not ready yet. |
429 | A usage limit was reached – wait Retry-After seconds. |
{
"id": 42,
"number": "Q8",
"status": "new",
"status_label": "New",
"category": "legal",
"text": "Any pending litigation?",
"source": "import",
"asked_by": null,
"document_id": 252,
"document": "articles.pdf",
"index": "2.1",
"page": 4,
"visibility": "private",
"request_item_id": null,
"assignee": null,
"answer": null,
"answer_approved": false,
"decline_reason": null,
"asked_at": "2026-11-10T07:30:00+00:00",
"answered_at": null,
"approved_at": null
}
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 and may e-mail people. 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.