# SignNow

> Send documents for e-signature with SignNow from a workflow: upload a document from a link, fill in its text fields, and invite one signer or several roles in order, or hand out a signing link instead. Follow or cancel the invites, get a download link to the signed PDF, file documents in folders, and make new documents from templates.

App · E-Signatures · 20 actions. Web page: https://docs.lodol.com/docs/integrations/signnow

## Actions

### Cancel a freeform invite

Withdraw one freeform invite so it can no longer be signed.

**Inputs**

- Invite ID (`invite_id`, text, required): From 'Send a freeform invite' or 'List freeform invites'.
- Reason (`reason`, text): Why, for the record. Up to 1,000 characters.

**Outputs**

- `cancelled` (true/false)
- `invite_id` (text)
- `reason` (text)

**Example output**

```json
{
  "cancelled": true,
  "invite_id": "c2d3e4f5a6b7c8d9e0f1a2b3c4d5e6f701234567",
  "reason": null
}
```

### Cancel field invites

Withdraw every field invite out on a document, so a new one can be sent.

**Inputs**

- Document ID (`document_id`, text, required): The document's id, or a SignNow link to it. An 'Upload a document' or 'Search documents' step returns one.
- Reason (`reason`, text, required): Why. SignNow requires one.

**Outputs**

- `cancelled` (true/false)
- `document_id` (text)
- `reason` (text)

**Example output**

```json
{
  "cancelled": true,
  "document_id": "a1b2c3d4e5f60718293a4b5c6d7e8f9012345678",
  "reason": "Terms changed"
}
```

### Create a document from a template

Make a new document from a template, with its fields and roles, ready to fill in and send. The copy has new field and role ids.

**Inputs**

- Template ID (`template_id`, text, required): The template's id, or a SignNow link to it.
- Document name (`document_name`, text): The template's name if left blank.

**Outputs**

- `id` (text)
- `name` (text)
- `template_id` (text)

**Example output**

```json
{
  "id": "a1b2c3d4e5f60718293a4b5c6d7e8f9012345678",
  "name": "Service agreement \u2014 Acme",
  "template_id": "7e8f9a0b1c2d3e4f5a6b7c8d9e0f1a2b3c4d5e6f"
}
```

### Create a folder

Make a new folder inside an existing one.

**Inputs**

- Name (`name`, text, required): What to call the folder.
- Inside (`parent_folder_id`, text, required): The folder to create it in, usually Documents.

**Outputs**

- `id` (text)
- `name` (text)
- `parent_id` (text)

**Example output**

```json
{
  "id": "f0e1d2c3b4a5968778695a4b3c2d1e0f12345678",
  "name": "Contracts",
  "parent_id": "38ab01cd23ef45ab67cd89ef01ab23cd45ef6789"
}
```

### Create a signing link

Make a shareable link that opens a document ready to sign, instead of emailing an invite. The document needs at least one role that does not already have a fixed e-mail on it.

**Inputs**

- Document ID (`document_id`, text, required): The document's id, or a SignNow link to it. An 'Upload a document' or 'Search documents' step returns one.
- Signer first name (`firstname`, text): Shown in the signing page's welcome message.
- Signer last name (`lastname`, text): Shown in the signing page's welcome message.
- Redirect URL (`redirect_uri`, text): Where the signer lands once every requested field is signed.

**Outputs**

- `document_id` (text)
- `url` (text)
- `url_no_signup` (text)
- `url_no_signup_qrcode` (text)
- `url_qrcode` (text)

**Example output**

```json
{
  "document_id": "a1b2c3d4e5f60718293a4b5c6d7e8f9012345678",
  "url": "https://app.signnow.com/webapp/document/link/abc123",
  "url_no_signup": "https://app.signnow.com/webapp/document/link/abc123?no_signup=1",
  "url_no_signup_qrcode": "https://app.signnow.com/webapp/document/link/abc123/qr?no_signup=1",
  "url_qrcode": "https://app.signnow.com/webapp/document/link/abc123/qr"
}
```

### Create a template

Save a document's layout, fields and roles as a template, so new documents can be made from it. SignNow builds the template by flattening the document.

**Inputs**

- Document ID (`document_id`, text, required): The document's id, or a SignNow link to it. An 'Upload a document' or 'Search documents' step returns one.
- Template name (`template_name`, text, required): What to call the template.

**Outputs**

- `id` (text)
- `name` (text)
- `source_document_id` (text)

**Example output**

```json
{
  "id": "7e8f9a0b1c2d3e4f5a6b7c8d9e0f1a2b3c4d5e6f",
  "name": "Service agreement",
  "source_document_id": "a1b2c3d4e5f60718293a4b5c6d7e8f9012345678"
}
```

### Delete a document

Delete a document or a template from the account.

**Inputs**

- Document ID (`document_id`, text, required): The document's id, or a SignNow link to it. An 'Upload a document' or 'Search documents' step returns one.

**Outputs**

- `deleted` (true/false)
- `document_id` (text)

**Example output**

```json
{
  "deleted": true,
  "document_id": "a1b2c3d4e5f60718293a4b5c6d7e8f9012345678"
}
```

### Delete a folder

Delete a folder. SignNow does not document what happens to documents inside it, so move or delete them first.

**Inputs**

- Folder (`folder_id`, text, required): Pick a folder, or paste its id.

**Outputs**

- `deleted` (true/false)
- `folder_id` (text)

**Example output**

```json
{
  "deleted": true,
  "folder_id": "f0e1d2c3b4a5968778695a4b3c2d1e0f12345678"
}
```

### Fill in text fields

Write text into a document's text fields before sending it: a client's name, an amount, a date. Only text fields can be filled this way.

**Inputs**

- Document ID (`document_id`, text, required): The document's id, or a SignNow link to it. An 'Upload a document' or 'Search documents' step returns one.
- Field name (`field_name`, text): The text field to fill in.
- Text (`text`, text): What to write into it.
- More fields (`more_fields`, object): Any other fields to fill: field name → text.

**Outputs**

- `count` (number)
- `document_id` (text)
- `fields` (list)

**Example output**

```json
{
  "count": 1,
  "document_id": "a1b2c3d4e5f60718293a4b5c6d7e8f9012345678",
  "fields": [
    {
      "field_name": "Client name",
      "text": "Acme Inc"
    }
  ]
}
```

### Get a document

Read a document: its roles, its fields, and every field invite out on it with its status (pending, fulfilled, canceled or skipped).

**Inputs**

- Document ID (`document_id`, text, required): The document's id, or a SignNow link to it. An 'Upload a document' or 'Search documents' step returns one.

**Outputs**

- `created` (text)
- `field_invites` (list)
- `fields` (list)
- `folder_id` (text)
- `id` (text)
- `is_template` (true/false)
- `name` (text)
- `original_filename` (text)
- `owner` (text)
- `page_count` (number)
- `roles` (list)
- `signature_count` (number)
- `text_field_names` (list)
- `updated` (text)

**Example output**

```json
{
  "created": "2026-09-18T09:00:00Z",
  "field_invites": [
    {
      "created": "2026-09-18T09:00:00Z",
      "email": "signer@example.com",
      "expires": "2026-10-18T09:00:00Z",
      "id": "c2d3e4f5a6b7c8d9e0f1a2b3c4d5e6f701234567",
      "role": "Signer 1",
      "role_id": "48ab01cd23ef45ab67cd89ef01ab23cd45ef6789",
      "status": "pending",
      "updated": "2026-09-18T09:00:00Z"
    }
  ],
  "fields": [
    {
      "id": "d8ab01cd23ef45ab67cd89ef01ab23cd45ef6789",
      "name": "Client name",
      "required": true,
      "role": "Signer 1",
      "role_id": "48ab01cd23ef45ab67cd89ef01ab23cd45ef6789",
      "type": "text"
    }
  ],
  "folder_id": "f0e1d2c3b4a5968778695a4b3c2d1e0f12345678",
  "id": "a1b2c3d4e5f60718293a4b5c6d7e8f9012345678",
  "is_template": false,
  "name": "Service agreement.pdf",
  "original_filename": "Service agreement.pdf",
  "owner": "you@example.com",
  "page_count": 2,
  "roles": [
    {
      "id": "48ab01cd23ef45ab67cd89ef01ab23cd45ef6789",
      "name": "Signer 1",
      "signing_order": 1
    }
  ],
  "signature_count": 0,
  "text_field_names": [
    "Client name"
  ],
  "updated": "2026-09-18T09:05:00Z"
}
```

### Get a download link

A link anyone can use to download the document as a PDF. It works once: after the first download, ask for a new one.

**Inputs**

- Document ID (`document_id`, text, required): The document's id, or a SignNow link to it. An 'Upload a document' or 'Search documents' step returns one.

**Outputs**

- `document_id` (text)
- `link` (text)

**Example output**

```json
{
  "document_id": "a1b2c3d4e5f60718293a4b5c6d7e8f9012345678",
  "link": "https://api.signnow.com/document/a1b2c3d4e5f60718293a4b5c6d7e8f9012345678/download"
}
```

### Get a folder

List the documents in a folder, optionally only those at one signing stage. This is how SignNow lists documents.

**Inputs**

- Folder (`folder_id`, text, required): Pick a folder, or paste its id.
- Signing status (`signing_status`, text): Only documents at this stage. One of: `signed`, `pending`, `waiting-for-me` (Waiting for me), `waiting-for-others` (Waiting for others), `unsent` (Not sent yet), `expired`.
- Sort by (`sort_by`, text): SignNow's own order if left blank. One of: `updated` (Last updated), `created`, `document-name` (Document name).
- Order (`order`, text): Only used with Sort by. One of: `desc` (Newest / Z first), `asc` (Oldest / A first).
- How many (`limit`, number): Up to 100. From 1 to 100.
- Skip (`offset`, number): How many documents to skip, for paging. At least 0.

**Outputs**

- `count` (number)
- `documents` (list)
- `folders` (list)
- `id` (text)
- `name` (text)
- `parent_id` (text)
- `total_documents` (number)

**Example output**

```json
{
  "count": 1,
  "documents": [
    {
      "created": "2026-09-18T09:00:00Z",
      "field_invite_count": 1,
      "id": "a1b2c3d4e5f60718293a4b5c6d7e8f9012345678",
      "is_template": false,
      "name": "Service agreement.pdf",
      "owner": "you@example.com",
      "page_count": 2,
      "roles": [
        "Signer 1"
      ],
      "signature_count": 0,
      "updated": "2026-09-18T09:05:00Z"
    }
  ],
  "folders": [],
  "id": "f0e1d2c3b4a5968778695a4b3c2d1e0f12345678",
  "name": "Documents",
  "parent_id": "38ab01cd23ef45ab67cd89ef01ab23cd45ef6789",
  "total_documents": 1
}
```

### Get my account

Read the SignNow account this connection acts as: its email, name and document counts. The email is the only address SignNow will send invites from.

**Inputs**: None.

**Outputs**

- `active` (true/false)
- `created` (text)
- `document_count` (number)
- `email` (text)
- `emails` (list)
- `first_name` (text)
- `id` (text)
- `last_name` (text)
- `lifetime_document_count` (number)
- `monthly_document_count` (number)
- `organization_id` (text)
- `organization_name` (text)

**Example output**

```json
{
  "active": true,
  "created": "2026-09-01T09:00:00Z",
  "document_count": 12,
  "email": "you@example.com",
  "emails": [
    "you@example.com"
  ],
  "first_name": "Ada",
  "id": "89ab01cd23ef45ab67cd89ef01ab23cd45ef6789",
  "last_name": "Lovelace",
  "lifetime_document_count": 40,
  "monthly_document_count": 3,
  "organization_id": "",
  "organization_name": ""
}
```

### List folders

Every folder in the account, nested ones included, with its path and how many documents it holds. Also returns the ids of the root, Documents and Templates folders.

**Inputs**: None.

**Outputs**

- `count` (number)
- `documents_folder_id` (text)
- `folders` (list)
- `root_folder_id` (text)
- `templates_folder_id` (text)

**Example output**

```json
{
  "count": 1,
  "documents_folder_id": "f0e1d2c3b4a5968778695a4b3c2d1e0f12345678",
  "folders": [
    {
      "document_count": 12,
      "folder_count": 1,
      "id": "f0e1d2c3b4a5968778695a4b3c2d1e0f12345678",
      "name": "Documents",
      "path": "Documents",
      "shared": false,
      "team_name": "",
      "template_count": 0
    }
  ],
  "root_folder_id": "38ab01cd23ef45ab67cd89ef01ab23cd45ef6789",
  "templates_folder_id": "25ab01cd23ef45ab67cd89ef01ab23cd45ef6789"
}
```

### List freeform invites

The freeform invites sent for one document, each pending, fulfilled or canceled.

**Inputs**

- Document ID (`document_id`, text, required): The document's id, or a SignNow link to it. An 'Upload a document' or 'Search documents' step returns one.
- How many per page (`per_page`, number): Up to 100. From 1 to 100.
- Page (`page`, number): Which page to return, starting at 1. At least 1.

**Outputs**

- `count` (number)
- `has_more` (true/false)
- `items` (list)
- `page` (number)
- `total` (number)
- `total_pages` (number)

**Example output**

```json
{
  "count": 1,
  "has_more": false,
  "items": [
    {
      "created": "2026-09-18T09:00:00Z",
      "email": "signer@example.com",
      "id": "c2d3e4f5a6b7c8d9e0f1a2b3c4d5e6f701234567",
      "status": "pending"
    }
  ],
  "page": 1,
  "total": 1,
  "total_pages": 1
}
```

### Move a document

File a document in another folder.

**Inputs**

- Document ID (`document_id`, text, required): The document's id, or a SignNow link to it. An 'Upload a document' or 'Search documents' step returns one.
- Folder (`folder_id`, text, required): Pick a folder, or paste its id.

**Outputs**

- `document_id` (text)
- `folder_id` (text)
- `moved` (true/false)

**Example output**

```json
{
  "document_id": "a1b2c3d4e5f60718293a4b5c6d7e8f9012345678",
  "folder_id": "f0e1d2c3b4a5968778695a4b3c2d1e0f12345678",
  "moved": true
}
```

### Search documents

Find documents and document groups by name, id, sender, signer or the text inside them, most recently updated first. At most 1,000 results in all. A newly uploaded document can take a moment to become searchable.

**Inputs**

- Search for (`search_key`, text, required): What to look for. Emails need at least 2 characters and document text at least 3; shorter searches find nothing rather than failing.
- Search in (`search_by`, text): Which details to match. Name if left blank. One or more of: `name` (Document name), `id` (Document ID), `inviter-email` (Sender's email), `signer-email` (Signer's email), `document-text` (Text inside the document).
- How many per page (`per_page`, number): Up to 20. From 1 to 20.
- Page (`page`, number): Which page to return, starting at 1. At least 1.

**Outputs**

- `count` (number)
- `has_more` (true/false)
- `items` (list)
- `page` (number)
- `total` (number)
- `total_pages` (number)

**Example output**

```json
{
  "count": 1,
  "has_more": false,
  "items": [
    {
      "created": "2026-09-18T09:00:00Z",
      "entity_type": "document",
      "folder_id": "f0e1d2c3b4a5968778695a4b3c2d1e0f12345678",
      "id": "a1b2c3d4e5f60718293a4b5c6d7e8f9012345678",
      "name": "Service agreement.pdf",
      "owner": "you@example.com",
      "page_count": 2,
      "roles": [
        "Signer 1"
      ],
      "updated": "2026-09-18T09:05:00Z"
    }
  ],
  "page": 1,
  "total": 1,
  "total_pages": 1
}
```

### Send a field invite

Ask each role on a document to fill in and sign its own fields, in signing order. The document needs fields and roles: upload it with 'Turn text tags into fields' ticked, or make it from a template. Returns the invites created.

**Inputs**

- Document ID (`document_id`, text, required): The document's id, or a SignNow link to it. An 'Upload a document' or 'Search documents' step returns one.
- Signer's email (`signer_email`, text, required): Who signs for the role below.
- Signer role (`signer_role`, text, required): Their role on the document, e.g. 'Signer 1'.
- Signing order (`signing_order`, number): 1 signs first. Signers with the same number sign in any order. From 1 to 100.
- More signers (`more_signers`, list): One entry per other role: email, role and order.
- From (`from_email`, text): Leave blank to send from this SignNow account. SignNow only accepts the account's own login email here.
- CC (`cc`, list): Email addresses to copy on the invite.
- Expires after (days) (`expiration_days`, number): 30 if left blank. From 3 to 180.
- First reminder after (days) (`remind_after_days`, number): Must be sooner than the expiry. From 1 to 179.
- Then remind every (days) (`remind_every_days`, number): Up to 7. From 1 to 7.
- Language (`language`, text): The language of the signing page and the invite email. Blank uses the account's language. One of: `en` (English), `es` (Spanish), `fr` (French).
- Redirect URL after signing (`redirect_uri`, text): Where to send each signer once they sign.
- Redirect URL after declining (`decline_redirect_uri`, text): Where to send a signer who declines.
- Open the redirect in (`redirect_target`, text): Only used when a redirect URL is set. One of: `blank` (A new tab), `self` (The same tab).
- Subject (paid plans) (`subject`, text): A custom email subject needs a paid SignNow API plan, an API free trial or a Site License. Leave blank otherwise.
- Message (paid plans) (`message`, text): Same plan requirement as the subject.

**Outputs**

- `count` (number)
- `document_id` (text)
- `from` (text)
- `invites` (list)

**Example output**

```json
{
  "count": 1,
  "document_id": "a1b2c3d4e5f60718293a4b5c6d7e8f9012345678",
  "from": "you@example.com",
  "invites": [
    {
      "created": "2026-09-18T09:00:00Z",
      "email": "signer@example.com",
      "expires": "2026-10-18T09:00:00Z",
      "id": "c2d3e4f5a6b7c8d9e0f1a2b3c4d5e6f701234567",
      "role": "Signer 1",
      "role_id": "48ab01cd23ef45ab67cd89ef01ab23cd45ef6789",
      "status": "pending",
      "updated": "2026-09-18T09:00:00Z"
    }
  ]
}
```

### Send a freeform invite

Ask one person to sign a document that has no fields; they place their own signature wherever it is needed. For a document with fields, use 'Send a field invite'.

**Inputs**

- Document ID (`document_id`, text, required): The document's id, or a SignNow link to it. An 'Upload a document' or 'Search documents' step returns one.
- Signer's email (`to`, text, required): Who should sign.
- From (`from_email`, text): Leave blank to send from this SignNow account. SignNow only accepts the account's own login email here.
- CC (`cc`, list): Email addresses to copy on the invite.
- Subject (`subject`, text): The invite email's subject. SignNow's own if blank.
- Message (`message`, text): The invite email's message. SignNow's own if blank.
- Language (`language`, text): The language of the signing page and the invite email. Blank uses the account's language. One of: `en` (English), `es` (Spanish), `fr` (French).
- Redirect URL (`redirect_uri`, text): Where to send the signer after they sign.
- Open the redirect in (`redirect_target`, text): Only used when a redirect URL is set. One of: `blank` (A new tab), `self` (The same tab).

**Outputs**

- `callback_url` (text)
- `document_id` (text)
- `from` (text)
- `id` (text)
- `to` (text)

**Example output**

```json
{
  "callback_url": "none",
  "document_id": "a1b2c3d4e5f60718293a4b5c6d7e8f9012345678",
  "from": "you@example.com",
  "id": "c2d3e4f5a6b7c8d9e0f1a2b3c4d5e6f701234567",
  "to": "signer@example.com"
}
```

### Upload a document from a URL

Have SignNow fetch a document from a public link (PDF, Word, an image and most office formats, up to 50 MB) into the Documents folder.

**Inputs**

- File URL (`url`, text, required): A public link straight to the file. A sharing page that needs a sign-in will not work.
- Turn text tags into fields (`check_fields`, true/false): Tick if the document contains SignNow text tags such as {{t:s;r:y;o:"Signer 1";}}. They become fillable fields and roles, which a field invite needs. Default: `false`.

**Outputs**

- `check_fields` (true/false)
- `id` (text)
- `source_url` (text)

**Example output**

```json
{
  "check_fields": false,
  "id": "a1b2c3d4e5f60718293a4b5c6d7e8f9012345678",
  "source_url": "https://example.com/contract.pdf"
}
```
