---
name: "esign_send"
area: "esign"
title: "Send for signature"
price: "$0.50"
method: "POST"
url: "https://api.conecto.chat/v1/tools/esign_send"
mcp_server: "https://api.conecto.chat/mcp/esign"
auth: "Authorization: Bearer <conecto_sk_ key>"
docs_url: "https://conecto.chat/tools/esign/esign_send"
---

# Send for signature (`esign_send`)

Sends a PDF from the file store to up to 10 people to sign; each gets their own link by email.

Send a PDF from the file store to up to 10 people to sign. Each gets an email with their own link, signs in the browser by drawing or typing, and everyone gets the signed PDF with a signing certificate. Without fields, a signature page with a signature and date line per signer is added at the end. With fields, place them yourself: page, x, y, width and height in percent of the page from its top-left corner (a signature field of about 30 x 5 fits a line). Every signer needs a signature field. Signers are emailed at once (parallel) or one after another (sequential). Emailing people outside the business needs an account that has topped up once. You hear how it goes as events (account_events, or a channel from notify_subscribe): esign.signed after each signature that leaves others to sign, naming who is left, esign.completed when everyone has signed, and esign.declined if someone declines.

Price: $0.50 a call. A call that fails costs nothing.

## Use it when

A contract, agreement or form needs signatures.

## Say this to your agent

> Send the trade agreement to Jana Weber to sign, with a short note.

## Inputs

| Name | Type | Required | Description | Allowed values | Default |
|---|---|---|---|---|---|
| `file_id` | string | yes | A PDF in the file store. Exactly 36 characters. |  |  |
| `title` | string | yes | What signers see, e.g. "Service agreement". 1 to 200 characters. |  |  |
| `signers` | array of objects | yes | 1 to 10 items. |  |  |
| `signers[].name` | string | yes, in each item of `signers` | Up to 120 characters. |  |  |
| `signers[].email` | string | yes, in each item of `signers` | Up to 254 characters. |  |  |
| `fields` | array of objects | no | Up to 300 items. |  |  |
| `fields[].signer` | integer | yes, in each item of `fields` | The signer's number in the signers list, from 1. At least 1. |  |  |
| `fields[].kind` | string | yes, in each item of `fields` |  | `"signature"`, `"initials"`, `"name"`, `"date"`, `"text"`, `"checkbox"` |  |
| `fields[].page` | integer | yes, in each item of `fields` | At least 1. |  |  |
| `fields[].x` | number | yes, in each item of `fields` | Left edge, in percent of the page width from the left. |  |  |
| `fields[].y` | number | yes, in each item of `fields` | Top edge, in percent of the page height from the top. |  |  |
| `fields[].width` | number | yes, in each item of `fields` | In percent of the page width. |  |  |
| `fields[].height` | number | yes, in each item of `fields` | In percent of the page height. |  |  |
| `fields[].required` | boolean | no | Default true (false for checkboxes). |  |  |
| `fields[].label` | string | no | Shown to the signer, e.g. "Company name". Up to 120 characters. |  |  |
| `message` | string | no | A note to the signers, shown in the email and on the signing page. Up to 2,000 characters. |  |  |
| `order` | string | no |  | `"parallel"`, `"sequential"` | `"parallel"` |
| `expires_in_days` | integer | no | 1 to 90. |  | `30` |

## Example

Written for Hansen & Voss, a restaurant-equipment wholesaler in Hamburg with 60 staff.

MCP: call `esign_send` on the MCP server `https://api.conecto.chat/mcp/esign` with these arguments:

```json
{
  "file_id": "9a1c3e5a-7d9f-4b1d-8f3a-6c8e0a2c4d7b",
  "title": "Trade account agreement",
  "signers": [
    {
      "name": "Jana Weber",
      "email": "jana@weber-kuechenplanung.example"
    }
  ],
  "message": "Hi Jana, here is the trade agreement we discussed. Thank you!"
}
```

REST:

```bash
curl https://api.conecto.chat/v1/tools/esign_send \
  -H "Authorization: Bearer $CONECTO_KEY" \
  -H "Content-Type: application/json" \
  -d '{"file_id": "9a1c3e5a-7d9f-4b1d-8f3a-6c8e0a2c4d7b", "title": "Trade account agreement", "signers": [{"name": "Jana Weber", "email": "jana@weber-kuechenplanung.example"}], "message": "Hi Jana, here is the trade agreement we discussed. Thank you!"}'
```

## Response

```json
{
  "call_id": "5f0c8a2e-3b7d-4c1e-9a64-2d8e1f7b0c93",
  "tool": "esign_send",
  "status": "succeeded",
  "replayed": false,
  "cost_usd": "$0.50",
  "balance_usd": "$19.75",
  "result": {
    "request_id": "f69fb13e-fe13-4c13-8796-90a48c48b466",
    "title": "Trade account agreement",
    "status": "sent",
    "order": "parallel",
    "sent_at": "2026-10-14T08:00:00+00:00",
    "expires_at": "2026-11-13T08:00:00+00:00",
    "completed_at": null,
    "document_file_id": "af2b15c0-6dd9-4c17-bf47-6058e6081a1b",
    "signers": [
      {
        "position": 1,
        "name": "Jana Weber",
        "email": "jana@weber-kuechenplanung.example",
        "status": "pending",
        "viewed_at": null,
        "signed_at": null,
        "decline_reason": null,
        "signing_url": "https://cncto.co/sign/MQ:1xHMcm:FjyO0nW3owav1LijKir_KQzzzV2zqeQUgZfA9dOgGlk"
      }
    ]
  }
}
```

`result`: The request: its request_id, title, status, order, when it was sent and expires, the document's file_id, and each signer with their status and signing link.

## Errors

| Code | Status | When | Fix |
|---|---|---|---|
| `not_found` | 404 | No file in the store has that file_id. | Find it with files_list. |
| `not_pdf` | 400 | The file is not a PDF. | Make one with documents_convert_to_pdf first. |
| `too_many_pages` | 400 | The PDF has more pages than a request takes. | Split it with fewer pages. |
| `invalid_input` | 400 | A field is not on the page, too small, or of an unknown kind, or a signer has no signature field. | Place fields in percent of the page, and give each signer a signature field. |
| `payment_required_for_outbound` | 402 | The balance is still free credit, which cannot send documents to people outside the business. | Top up once (POST /v1/topups). |
| `storage_full` | 409 | The file store has no room for the request's files. | Delete files with files_delete, or add room with files_add_storage. |

The refusals every tool can give (401 key, 402 balance, 429 limits) are on the errors page: https://conecto.chat/docs/errors.md

## Related

- [esign_save_template](https://conecto.chat/tools/esign/esign_save_template.md): Saves a PDF once with its signature fields placed per signer role, to send again and again. $0.001 a call.
- [esign_send_template](https://conecto.chat/tools/esign/esign_send_template.md): Sends a saved template to new signers, one per role: one request, or up to 50 at once. $0.50 per request sent.
- [esign_list_templates](https://conecto.chat/tools/esign/esign_list_templates.md): The saved templates, with their roles and fields. Free up to 1,000,000 reads a month.
- [esign_delete_template](https://conecto.chat/tools/esign/esign_delete_template.md): Deletes a saved template; requests already sent from it stay as they are. Free.
- [esign_get](https://conecto.chat/tools/esign/esign_get.md): Where a signature request stands: each signer's status, and the signed PDF once everyone signed. Free up to 1,000,000 reads a month.
- [esign_list](https://conecto.chat/tools/esign/esign_list.md): Signature requests, newest first, optionally of one status. Free up to 1,000,000 reads a month.
- [esign_signing_link](https://conecto.chat/tools/esign/esign_signing_link.md): One signer's signing link, to hand over yourself. Free up to 1,000,000 reads a month.
- [esign_remind](https://conecto.chat/tools/esign/esign_remind.md): Emails everyone who still has to sign a reminder with their link, at most once a day. $0.02 a call.
- [esign_cancel](https://conecto.chat/tools/esign/esign_cancel.md): Stops a request before everyone has signed; signers are told and their links stop working. Free.
