---
title: "White-labeled signing"
url: "https://docs.signnow.com/docs/white-labeled-signing"
type: "page"
section: "Documentation"
slug: "white-labeled-signing"
---

# White-labeled signing

# White-labeled signing

This guide focuses on customizing the experience for the **recipient** (the signer). It covers branding the signing session, customizing completion and authentication pages, white-labeling emails, and setting up webhooks.

## Step 1. Upload a document

Upload a document to SignNow. We will upload the DOCX Purchase agreement with text tags. When a signer opens the document for signature, the text tags will convert to fillable fields.

Learn more about [text tags](/docs/text-tags).

Use the [`POST /document/fieldextract`](/docs/document/operations/upload-document-with-text-tags) request.

**Request example**

```bash
curl --request POST \
--url https://api.signnow.com/document/fieldextract \
--header 'Authorization: Bearer {{access_token}}' \
--header 'Content-Type: multipart/form-data' \
--form 'file=@"/Users/user/Downloads/Purchase agreement.docx"'
```

The successful response retrieves the document ID.

Learn about other options to [upload a document](/docs/entities#step-1-upload-document).

## Step 2. Customize the application branding

To provide a seamless experience, you will create a brand and assign specific resources to your application. This ensures the SignNow interface matches your platform's look and feel.

**Logo**: Your company logo on the signing, completion, and authentication pages.

**General resource**: The color scheme, consent text, welcome message, and help center visibility.

**Editor resource**: The specific UI elements of the signing interface (buttons, toolbars, etc.).

### 2.1 Create a brand

Use the [`POST /v2/brands`](/docs/general-branding/operations/post-brands) request to create a brand container.

**Request example**

```bash
curl --request POST \
--url https://api.signnow.com/v2/brands \
--header 'Authorization: Bearer {{access_token}}' \
--header 'Content-Type: application/json' \
--data '{
    "title": "brand_for_application"
}'
```

A successful response retrieves the brand ID.

### 2.2 Add a logo

Upload your logo using the [`POST /v2/brands/{{brand_id}}/resources/logo`](/docs/general-branding/operations/post-v2-brands-brand_id-logo) request.

**Request example**

```bash
curl --request POST \
--url https://api.signnow.com/v2/brands/{{brand_id}}/resources/logo \
--header 'Authorization: Bearer {{access_key}}' \
--header 'Content-Type: multipart/form-data' \
--form 'logo=@"/logo.jpeg"'
```

Learn more about [the logo resource](/docs/branding-logo-resource).

### 2.3 Add branding to the signing session

Customize the session using the General resource (for colors) and the Editor resource (for UI components).

### **General resource**

The General resource controls the global color scheme, as well as the welcome and consent messages shown to the signer.

Use the [`PUT /v2/brands/{{brand_id}}/resources/general`](/docs/general-branding/operations/put-v2-brands-brand_id-general) request to customize:

- Background colors (header and main background)
- Appearance of primary, secondary, default buttons, and dropdown menus
- Text and icon colors
- Consent and welcome messages

**Request example**

```bash
curl --request PUT \
--url https://api.signnow.com/v2/brands/{{brand_id}}/resources/general \
--header 'Authorization: Bearer {{access_token}}' \
--header 'Content-Type: application/json' \
--data '{
  "main-background": "#f3f4f6",
  "header": {
    "background": "#ffffff"
  },
  "buttons": {
    "primary": {
      "color": "#ffffff",
      "background": "#0f172a",
      "border": "#0f172a",
      "hover-background": "#334155",
      "hover-color": "#ffffff",
      "hover-border": "#334155",
      "active-background": "#1e293b",
      "active-color": "#ffffff",
      "active-border": "#1e293b"
    },
    "secondary": {
      "color": "#0f172a",
      "background": "#e2e8f0",
      "border": "#cbd5e1",
      "hover-background": "#cbd5e1",
      "hover-color": "#0f172a",
      "hover-border": "#94a3b8",
      "active-background": "#94a3b8",
      "active-color": "#0f172a",
      "active-border": "#64748b"
    },
    "default": {
      "color": "#475569",
      "background": "#ffffff",
      "border": "#e2e8f0",
      "hover-background": "#f8fafc",
      "hover-color": "#1e293b",
      "hover-border": "#cbd5e1",
      "active-background": "#f1f5f9",
      "active-color": "#0f172a",
      "active-border": "#94a3b8"
    },
    "dropdown": {
      "color": "#334155",
      "background": "#ffffff",
      "border": "#e2e8f0",
      "hover-background": "#f1f5f9",
      "hover-color": "#1e293b",
      "hover-border": "#cbd5e1",
      "active-background": "#e2e8f0",
      "active-color": "#0f172a",
      "active-border": "#94a3b8"
    }
  },
  "texts": {
    "color": "#334155"
  },
  "icons": {
    "color": "#64748b",
    "background": "#ffffff",
    "border": "#e2e8f0",
    "hover-background": "#f8fafc",
    "hover-color": "#475569",
    "hover-border": "#cbd5e1"
  },
  "consent-text": {
    "en": "ACME company has invited you to fill out and sign the purchase agreement."
  },
  "welcome-message": {
    "visibility": true,
    "body-text": {
      "en": "ACME company has invited you to fill out and sign the purchase agreement."
    },
    "header-text": {
      "en": "Dear customer"
     }
  }
}'
```

Learn more about the [general resource](/docs/branding-general-resource).

### **Editor resource**

The Editor resource allows you to toggle specific UI elements within the signing interface.

Use the [`PUT /v2/brands/{{brand_id}}/resources/editor`](/docs/general-branding/operations/put-v2-brands-brand_id-editor) to customize parameters such as:

- Visibility of the **More Actions** button
- Accessibility options
- Visibility of the navigation panel
- Decline invite text
- Sidebar settings
- Visibility of the completion footer
- Contact sender options
- Page dimension
- Visibility of the **Close** button (in view mode) or **Save progress and Finish Later** option (in the More Actions menu during the signing session) + custom text for the closing option during the signing session
- Visibility of the decline option in the **More Actions** menu
- Completion page for success and decline
- Authentication page
- Visibility of the **Download** button
- Visibility of the document name in the header

**Request example**

```bash
curl --request PUT \
--url https://api.signnow.com/v2/brands/{{brand_id}}/resources/editor \
--header 'Authorization: Bearer {{access_token}}' \
--header 'Content-Type: application/json' \
--data '{
    "settings": {
        "visibility": false
    },
    "accessibility": {
        "visibility": false
    },
    "navigation": {
        "visibility": false
    },
    "progress-bar": {
        "default-color": "#cbd5e1",
        "completed-color": "#0f172a"
    },
    "sidebar": {
        "visibility": false
    },
    "decline-invite-text": {
        "en": "You are about to decline to sign the purchase agreement. Note that all the changes you have made to this document will be lost."
    },
    "complete-footer": {
        "visibility": false
    },
    "support-chat": {
        "visibility": false
    },
    "complete-page": {
        "success": {
            "header-text": {
                "en": "Agreement successfully signed"
            },
            "body-text": {
                "en": "Thank you for doing business with us."
            }
        },
        "decline": {
            "header-text": {
                "en": "You have declined the Electronic Signature Disclosure agreement"
            },
            "body-text": {
                "en": "You did not consent to do business electronically with the sender. The Electronic Signature Disclosure can still be accepted before the sender cancels the invite. The invite can be found in your inbox and signNow account. You can still download the document if you would like to. Contact the sender to find out what to do next."
            }
        },
        "registration": {
            "visibility": false
        },
        "button-to-signnow": {
            "visibility": false
        },
        "button-download": {
            "visibility": false
        }
    },
    "sender-info": {
        "visibility": false
    },
    "page-dimension": {
        "percent": 150
    },
    "close-button": {
        "visibility": true,
        "title": {
            "signing": {
                "en": "Save Agreement and Finish Later"
            }
        }
    },
    "decline-button": {
        "visibility": true
    },
    "download-button": {
        "visibility": false
    },
    "auth-page": {
        "header-text": {
            "en": "Acme company invited you to sign {document_name}"
        },
        "request-pin": {
            "body-text": {
                "en": "Press the button below to have the password sent to you by voice call or sms message."
            }
        },
        "check-pin": {
            "phone": {
                "body-text": {
                    "en": "Enter the document password sent you by voice call or sms."
                }
            },
            "password": {
                "body-text": {
                    "en": "Enter the document password below to unlock the document."
                }
            }
        }
    },
    "document-name": {
        "visibility": true
    }
}'
```

Learn more about the [editor resource](/docs/branding-editor-resource).

### 2.4 Assign brand to the application

Once your brand resources are ready, assign them to your application using the [`PUT /v2/applications/{{application_id}}/brand`](/docs/general-branding/operations/put-v2-applications-application_id-brand) request.

> Once assigned, these branding resources will apply to all signature invites sent via this application.<br> Retrieve the `application_id` from the application page in the [API dashboard](https://app.signnow.com/webapp/api-dashboard/keys/).

In the request body, use the `brand_id` from **Step 2.1**.

**Request example**

```bash
curl --request PUT \
--url https://api.signnow.com/v2/applications/{{application_id}}/brand \
--header 'Authorization: Bearer {{access_token}}' \
--header 'Content-Type: application/json' \
--data '{
    "brand_id": "XXXXa1d985ea4df081ff1223f1e3620e4611YYYY"
}'
```

> You can assign branding to a specific document or document group.


## Step 3. Create an embedded signing link

Next, create an embedded signature invite.

### 3.1. Create an embedded invite

Create a document embedded invite using the [`POST /v2/documents/{{document_id}}/embedded-invites`](/docs/document-embedded-signing/operations/create-embedded-signing-invite) request.

The purchase agreement has two roles: buyer and seller. Retrieve role information using [`GET /document/{{document_id}}`](/docs/document/operations/get-document).

Customize the invite with the following parameters:

- `authentication`: Authorize the buyer via password and the seller via SMS.

- `redirect_uri`: The URL where the signer is forwarded after completing the document.

- `decline_redirect_uri`: The URL where the signer is forwarded if they decline to sign.

- `redirect_target`: Set to blank to open the redirect URLs in a new tab.

<!--
type: tab
title: Request example
-->

```bash
curl --request POST \
--url https://api.signnow.com/v2/documents/{{document_id}}/embedded-invites \
--header 'Authorization: Bearer {{access_token}}' \
--header 'Content-Type: application/json' \
--data-raw '{
  "invites": [
    {
      "email": "buyer@email.com",
      "role": "Buyer",
      "order": 1,
      "auth_method": "none",
      "redirect_uri": "https://example.com",
      "close_redirect_uri": "https://example.com",
      "decline_redirect_uri": "https://signnow.com",
      "redirect_target": "blank",
      "authentication": {
        "type": "password",
        "password": "12345"
      }
    },
    {
      "email": "seller@email.com",
      "role": "Seller",
      "order": 2,
      "auth_method": "none",
      "redirect_uri": "https://example.com",
      "close_redirect_uri": "https://example.com",
      "decline_redirect_uri": "https://example.com",
      "redirect_target": "blank",
      "authentication": {
        "type": "phone",
        "method": "sms",
        "phone": "+1234567890",
        "sms_message": "Enter the password {password} to unlock your document."
      }
    }
  ]
 }'

```

<!--
type: tab
title: Response example
-->

```json
{
    "data": [
        {
            "id": "XXXX7f9f02bc4093a2b9d686385229458a3b6307",
            "email": "buyer@email.com",
            "role_id": "d7f5b25a40ee4817be0eb76cb27f631ae7521c50",
            "order": 1,
            "status": "pending"
        },
        {
            "id": "ed5693abd6c64a9bb43debe099e4db1913ba1d44",
            "email": "seller@email.com",
            "role_id": "XXXX1d65cefe4b45957d086d56429ac5a73c1443",
            "order": 2,
            "status": "created"
        }
    ]
}
```

<!-- type: tab-end -->

The successful request retrieves the invite IDs for both roles.

### 3.2 Create a link for the embedded invite

Use the [`POST /v2/documents/{{document_id}}/embedded-invites/{{field_invite_id}}/link`](/docs/document-embedded-signing/operations/create-embedded-signing-invite) request to generate a link for the document embedded invite. You must generate a separate link for each role.

<!--
type: tab
title: Request example
-->

```bash
curl --request POST \
--url https://api.signnow.com/v2/documents/{{document_id}}/embedded-invites/{{field_invite_id}}/link \
--header 'Authorization: Bearer {{access_token}}' \
--header 'Content-Type: application/json' \
--data '{
    "auth_method": "none",
    "link_expiration": 45
}'
```

<!--
type: tab
title: Response example
-->

```json
{
    "data": {
        "link": "{{generated link}}"
    }
}
```

<!-- type: tab-end -->

## Step 4. Subscribe to webhook events

To automate workflow, subscribe to the events associated with the document using the [`POST /v2/events`](/docs/basic-auth/operations/create-event-subscription).

For example, subscribe to the `document.complete` event. Your application will receive a notification once the document has been signed.

**Request example**

```bash
curl --request POST \
--url https://api.signnow.com/v2/event-subscriptions \
--header 'Authorization: Bearer {{access_token}}' \
--header 'Content-Type: application/json' \
--data '{
    "event": "document.complete",
    "entity_id": "18fcfdc76bbb46fdabbaeaa71f074adbeaa21848",
    "attributes": {
        "callback": "https://webhook.site/61967603-7635-4569-b3d9-6321d87fbc16",
        "use_tls_12": true,
        "docid_queryparam": true,
        "headers": {
            "string_head": "test",
            "int_head": 12,
            "bool_head": false,
            "float_head": 12.24
        },
        "include_metadata": true,
        "secret_key": "c8XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX"
    }
}'
```

Your application receives webhook data as soon as the document has been completed.

**Tip:** Configure your email system to send email notifications to signers once the application receives a webhook event data.

**Here’s an example of the `document.complete` event data.**

```json
{
  "meta": {
    "timestamp": 1747235714,
    "event": "document.complete",
    "environment": "https://api.signnow.com",
    "callback_url": "https://webhook.site/61967603-7635-4569-b3d9-6321d87fbc16?Param={\\"docId\\":\\"XXXXXdc76bbb46fdabbaeaa71f074adbeaa00000\\"}",
    "access_token": "{{access_token}}",
    "initiator_id": "{{id}}",
    "metadata": []
  },
  "content": {
    "document_id": "XXXXXdc76bbb46fdabbaeaa71f074adbeaa00000",
    "document_name": "Purchase agreement",
    "user_id": "0000003f30de456e80212f2333cb14293cXXXXXX"
  }
}
```

## Step 5. Embed the links

Display the document to your users by embedding the signing link in an iframe on your webpage.

**HTML Example**

```
<!DOCTYPE html>
<html>
<body>

<h2>Sign the agreement</h2>

<iframe src="{{generated signing link}}" height="1200" width="900" title="Sign the agreement"></iframe>

</body>
</html>

```

## Step 6. White-label email notifications

To keep SignNow invisible, do **not** use the default SignNow email delivery system. Instead, trigger your own emails using your SMTP server.

- **Extract data:** Before sending the email, you can retrieve the document's field data to personalize your message.
- **Send email:** Use the signing link generated in **Step 5.2** and include it in your own custom HTML email template.

- (Optional) Customize the email template sent to signers by adding data from fillable fields.

Retrieve data from the filled-in fields using the [`GET /v2/documents/{{document_id}}/fields`](/docs/document/operations/get-v2-documents-documentUniqueId-fields) request.

<!--
type: tab
title: Request example
-->

```bash
curl --request GET \
--url https://api.signnow.com/v2/documents/{{document_id}}/fields \
--header 'Content-Type: application/json' \
--header 'Authorization: Bearer {{access_token}}' \
```

<!--
type: tab
title: Response example
-->

```json
{
    "data": [
        {
            "id": "50eccf98668448ffaea17a97728321016483f294",
            "name": "",
            "type": "text",
            "value": "David Brown"
        },
        {
            "id": "1e7a12752acb404cb1dff22f1f233b19d75d337f",
            "name": "",
            "type": "text",
            "value": "buyer@email.com"
        },
        {
            "id": "5de45c3a52e04e40a8303d7d5b157728e2b69906",
            "name": "",
            "type": "text",
            "value": "David Brown"
        },
        {
            "id": "0d20ff8a0c1b4aa983160b2cc0b0a66b16d8b23d",
            "name": "",
            "type": "text",
            "value": "Emily Stone"
        },
        {
            "id": "1f49adb3fa3d4becbcd024fc5fa56a5734fce342",
            "name": "",
            "type": "text",
            "value": "seller@email.com"
        },
        {
            "id": "a82442eb2afc42ae9151f1501765e6bd47adce5b",
            "name": "",
            "type": "text",
            "value": "Emily Stone"
        }
    ],
    "meta": {
        "pagination": {
            "total": 6,
            "count": 6,
            "per_page": 15,
            "current_page": 1,
            "total_pages": 1,
            "links": []
        }
    }
}
```

<!-- type: tab-end -->

The information recipients added are in the `value` fields.

Use your email service to send notifications to recipients.

## Step 7. Download the completed document

Once the `document.complete` event occurs, download the signed agreement.

Use the [`GET /document/{{document_id}}/download`](/docs/document/operations/download-document) request.

**Request example**

```bash
curl --request GET \
--url https://api.signnow.com/document/{{document_id}}/download \
--header 'Authorization: Bearer {{access_token}}' \
--header 'Content-Type: application/pdf' \
```

### Watch a demo of the white-labeled signing for the first recipient

![white_labeling_embedded_signing_1.gif](/reference-assets/images/Whitelabeling_guide/white_labeling_embedded_signing_1.gif)

---
## Next steps:

- Create a [white-labeled sending experience](/docs/white-labeled-sending).
- Create a [white-labeled editor experience](/docs/white-labeled-editor).


---
*Full page: https://docs.signnow.com/docs/white-labeled-signing*
