POST

Remove documents from an offer

https://www.helprange.com/api/v2/offers/{offer_id}/files/remove

Takes documents out of the offer – the files stay in their folders. Answers with the offer.

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: links:write. Operation id: removeOfferFiles

Parameters

NameInTypeDescription
offer_id requiredpathintegerOffer id (from List offers). (min 1)

Request body

Content types: application/json, application/x-www-form-urlencoded.

FieldTypeDescription
file_ids requiredarray of integerDocument ids.

Example request

curl -X POST https://www.helprange.com/api/v2/offers/31/files/remove \
  -H "X-API-Key: $HELPRANGE_API_KEY" \
  -H 'Content-Type: application/json' \
  --data-binary '{"file_ids": [252]}'

The samples read the key from the HELPRANGE_API_KEY environment variable.

Responses

StatusDescription
200OK
400Invalid input – the message says which parameter.
401Missing or invalid API key / OAuth token. Team keys: code invalid_key, key_revoked, key_expired or key_owner_removed.
402Your plan does not include the REST API (or this feature).
403The team API key lacks the scope this endpoint needs.
404Not found – or not yours (the API never says which).
405Wrong HTTP method for this endpoint.
429A usage limit was reached – wait Retry-After seconds.
Example response · 200
{
  "id": 31,
  "title": "Fit-out Q1",
  "status": "active",
  "expired": false,
  "client": {
    "first_name": "Anna",
    "last_name": "Nowak",
    "company": "Acme",
    "email": "anna@acme.com"
  },
  "kind": "files",
  "url": "https://www.helprange.com/o/Xk2pQ9/",
  "document_views": 4,
  "page_visits": 2,
  "last_viewed_at": "2026-11-11T09:12:00+00:00",
  "sent_at": null,
  "created_at": "2026-11-11T08:00:00+00:00",
  "updated_at": "2026-11-11T08:00:00+00:00",
  "stored_status": "active",
  "public_url": "https://www.helprange.com/o/Xk2pQ9/",
  "panel_url": "https://www.helprange.com/user/offers/31/",
  "message": "Hi Anna, here is our proposal.",
  "price_summary": "from 2,400 EUR",
  "buttons": {
    "accept": {
      "shown": true,
      "label": ""
    },
    "contact": {
      "shown": true,
      "label": ""
    },
    "decline": {
      "shown": true,
      "label": ""
    }
  },
  "protection": {
    "require_email_verification": true,
    "access": "domain",
    "allowed_emails": "anna@acme.com @acme.com",
    "allow_download": false,
    "watermark": false,
    "passcode": true,
    "screenshot_protection": false,
    "one_viewer_at_a_time": false,
    "expires_on": "2026-12-31"
  },
  "open_directly": false,
  "layout": "classic",
  "theme": "light",
  "base_folder": null,
  "own_folder": {
    "id": 77,
    "name": "Offer - Fit-out Q1"
  },
  "files": [
    {
      "id": 250,
      "name": "proposal.pdf",
      "folder_id": 77,
      "source": "own_folder",
      "view_url": "https://www.helprange.com/view/5b0c.../proposal.pdf",
      "views": 3
    }
  ],
  "people": 1,
  "engagement": 82,
  "responses_count": 1,
  "responses": [
    {
      "kind": "declined the offer",
      "type": "decline",
      "offer_id": 31,
      "email": "anna@acme.com",
      "email_verified": true,
      "offer": "Fit-out Q1",
      "comment": "Too expensive",
      "document_id": null,
      "engagement": 64,
      "country": "PL",
      "at": "2026-11-11T10:00:00+00:00"
    }
  ],
  "sent_to": null,
  "created_by": "ann@acme.com",
  "legacy_url": null,
  "send_by_email": "HelpRange does not e-mail offers through the API or MCP. Send the offer link (url) yourself, or use \"Send by e-mail\" on the offer page in HelpRange."
}

Try it

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.