---
title: Send a document for e-signature (POST /api/v2/signature-requests) | HelpRange API
description: POST /api/v2/signature-requests: Sends a document from a folder you can open for e-signature (plans with e-signature).
url: https://www.helprange.com/developers/api/create-signature-request
---

POST

# Send a document for e-signature

`https://www.helprange.com/api/v2/signature-requests`

Sends a document from a folder you can open for e-signature (plans with e-signature). A signature page with a block per signer is added at the end; every recipient gets an e-mail with a signing link (counted in the team's API e-mail budget). Form posts can pass repeated signer_email fields instead of signers.

**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:** `documents:write`. **Operation id:** `createSignatureRequest`

## Request body

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

| Field | Type | Description |
|---|---|---|
| `document_id` required | integer | A document in a folder you can open. |
| `signers` required | array of object | Recipients in signing order. (min items 1, max items 20) |
| `title` | string | Default: the file name. |
| `message` | string | Shown in the e-mail. |
| `sequential` | boolean | true: sign one after another. |
| `expires_on` | string (date) | YYYY-MM-DD (default: 30 days). |

## Example request

```
curl -X POST https://www.helprange.com/api/v2/signature-requests \
  -H "X-API-Key: $HELPRANGE_API_KEY" \
  -H 'Content-Type: application/json' \
  --data-binary '{"document_id": 250, "title": "Mutual NDA", "signers": [{"name": "Anna Client", "email": "anna@client.com"}, {"name": "Legal", "email": "legal@client.com", "action": "review"}], "sequential": true}'
```

```
const res = await fetch('https://www.helprange.com/api/v2/signature-requests', {
  method: 'POST',
  headers: {'X-API-Key': process.env.HELPRANGE_API_KEY, 'Content-Type': 'application/json'},
  body: JSON.stringify({
    "document_id": 250,
    "title": "Mutual NDA",
    "signers": [
      {
        "name": "Anna Client",
        "email": "anna@client.com"
      },
      {
        "name": "Legal",
        "email": "legal@client.com",
        "action": "review"
      }
    ],
    "sequential": true
  }),
});
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/signature-requests',
    headers={'X-API-Key': os.environ['HELPRANGE_API_KEY']},
    json={
        "document_id": 250,
        "title": "Mutual NDA",
        "signers": [
            {
                "name": "Anna Client",
                "email": "anna@client.com",
            },
            {
                "name": "Legal",
                "email": "legal@client.com",
                "action": "review",
            },
        ],
        "sequential": True,
    },
    timeout=60,
)
r.raise_for_status()
print(r.json())
```

The samples read the key from the `HELPRANGE_API_KEY` environment variable.

## Responses

| Status | Description |
|---|---|
| `201` | Created and sent |
| `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. |
| `429` | A usage limit was reached – wait Retry-After seconds. |

Example response · 201

```
{
  "id": "9f1c2e7a4b",
  "title": "Mutual NDA",
  "status": "sent",
  "status_label": "Sent",
  "sender": "Ann Admin",
  "document_id": 250,
  "data_room": null,
  "created_at": "2026-11-10T08:00:00+00:00",
  "sent_at": "2026-11-10T08:00:02+00:00",
  "expires_at": "2026-12-10T22:59:59+00:00",
  "completed_at": null,
  "ended_at": null,
  "signed": 0,
  "recipients_count": 2,
  "url": "https://www.helprange.com/user/signature-doc?signatureId=9f1c2e7a4b",
  "sent": true
}
```

## 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** 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.
 API key

  Remember in this tab   JSON body { "document_id": 250, "title": "Mutual NDA", "signers": [ { "name": "Anna Client", "email": "anna@client.com" }, { "name": "Legal", "email": "legal@client.com", "action": "review" } ], "sequential": true }

```

```
