---
title: "Adding, Updating, and Removing Signers"
slug: "adding-updating-and-removing-signers"
description: "Learn how to add, update, and remove signers in OneSpan Sign securely, ensuring smooth document signing transactions with our comprehensive code samples."
updated: 2026-04-20T15:01:12Z
published: 2026-05-05T13:24:24Z
canonical: "docs.onespan.com/adding-updating-and-removing-signers"
---

> ## Documentation Index
> Fetch the complete documentation index at: https://docs.onespan.com/llms.txt
> Use this file to discover all available pages before exploring further.

# Adding, Updating, and Removing Signers

## Java SDK

To download the full code sample see our [Code Share](https://community.onespan.com/documentation/onespan-sign/codeshare/signer-management-example-java-sdk/) site.

One of the most fundamental and basic operations in OneSpan Sign is that of inviting signers to sign documents. This topic describes how to add, update, and remove signers from a transaction.

To ensure the security of your transactions, do not utilize dummy email addresses for your recipients.

### Adding Signers to a Transaction

To add a signer to an existing transaction, you must first create the Signer object. The following code will create a Signer object:

Note that this code sample also includes [SMS notifications](/v1/docs/sms-notifications) as the primary notification method. The following notification methods are available:

- [EMAIL, SMS] - both email and sms notifications are sent to the signer (phone number is mandatory)
- [EMAIL] - only email notifications are sent to the signer (phone number is optional)
- {SMS] - only SMS notifications are sent to the signer (phone number is mandatory). Notes: Recipient email is still **mandatory** for transaction creation

```java
Signer signer = SignerBuilder.newSignerWithEmail("signer@example.com")
    .withFirstName("John")
    .withLastName("Smith")
    .withCustomId("Signer1")
    .build();
.withNotificationMethods(NotificationMethodsBuilder.newNotificationMethods()
        .withPrimaryMethods(NotificationMethod.EMAIL, NotificationMethod.SMS)
        .withPhoneNumber("+15141234567")))  // in E.164 international format
.withSigner(newSignerWithEmail("your.email@example.com")
		.withFirstName("YourFirstName")
		.withLastName("YourLastName"))
```

For information on updating the authentication methods used for transactions, see [Authenticating Signers](/v1/docs/authenticating-signers#java-sdk).

Once the Signer object has been created, find the PackageId returned to you during the transaction creation and use the OneSpan Sign client to add your signer. The following code will do this:

```java
String signerId = eslClient.getPackageService().addSigner(packageId, signer);
```

### Updating an Existing Signer

Similarly, to update an existing signer, you must create a Signer object that contains the updates you want to make to your signer. The following code will do this:

```java
Signer updatedSigner = SignerBuilder.newSignerWithEmail("mary.doe@example.com")
    .withFirstName("Mary")
    .withLastName("Doe")
    .withCustomId("Signer1")
    .build();
```

Once you have updated the signer, find the PackageId (the transaction) that you wish to change this signer in, and use the OneSpan Sign client to update the signer.

```java
eslClient.getPackageService().updateSigner(packageId, updatedSigner);
```

### Removing Signers From a Transaction

To remove a signer from a transaction, simply call the removeSigner function with the packageId and signerId string.

```java
 eslClient.getPackageService().removeSigner(packageId, signerId);
```

### Results

After running your code, if you login to OneSpan Sign and navigate to your package, you will see your signer in your transaction.

## .NET SDK

To download the full code sample see our [Code Share](https://community.onespan.com/documentation/onespan-sign/codeshare/signer-management-example-net-sdk/) site.

One of the most fundamental and basic operations in OneSpan Sign is that of inviting signers to sign documents. This topic describes how to add, update, and remove signers from a transaction.

To ensure the security of your transactions, do not utilize dummy email addresses for your recipients.

### Adding Signers to a Transaction

To add a signer to an existing transaction, you must first create the Signer object. The following code will create a Signer object:

Note that this code sample also includes [SMS notifications](/v1/docs/sms-notifications) as the primary notification method. The following notification methods are available:

- [EMAIL, SMS] - both email and sms notifications are sent to the signer (phone number is mandatory)
- [EMAIL] - only email notifications are sent to the signer (phone number is optional)
- {SMS] - only SMS notifications are sent to the signer (phone number is mandatory). Notes: Recipient email is still **mandatory** for transaction creation

```csharp
var signer = SignerBuilder.NewSignerWithEmail("signer@example.com")
    .WithFirstName("John")
    .WithLastName("Smith")
    .WithCustomId("Signer1")
    .Build();

var role = RoleBuilder.NewRole("Signer1")
    .WithSigner(signer)
    .WithNotificationMethods(
        NotificationMethodsBuilder.NewNotificationMethods()
            .WithPrimaryMethods(NotificationMethod.EMAIL, NotificationMethod.SMS)
            .WithPhoneNumber("+15141234567") // E.164 format
    )
    .Build();
```

Once you have updated the signer, find the PackageId (the transaction) that you wish to change this signer in, and use the OneSpan Sign client to update the signer.

```csharp
String signerId = eslClient.PackageService.AddSigner(packageId, signer);
```

For information on updating the authentication methods used for transactions, see [Authenticating Signers](/v1/docs/authenticating-signers#java-sdk).

### Updating an Existing Signer

Similarly, to update an existing signer, you must create a Signer object that contains the updates you want to make to your signer. The following code will do this:

```csharp
Signer updatedSigner = SignerBuilder.NewSignerWithEmail("mary.doe@example.com")
    .WithFirstName("Mary")
    .WithLastName("Doe")
    .WithCustomId("Signer1")
    .Build();
```

Once you have updated the signer, find the PackageId (the transaction) that you wish to change this signer in, and use the OneSpan Sign client to update the signer.

```csharp
 eslClient.PackageService.UpdateSigner(packageId, updatedSigner);
```

### Removing Signers From a Transaction

To remove a signer from a transaction, simply call the removeSigner function with the packageId and signerId string.

```csharp
eslClient.PackageService.UpdateSigner(packageId, updatedSigner);
```

### Results

After running your code, if you login to OneSpan Sign and navigate to your package, you will see your signer in your transaction.

## REST API

To download the full code sample see our [Code Share](https://community.onespan.com/documentation/onespan-sign/codeshare/signer-management-example-rest-api/) site.

One of the most fundamental and basic operations in OneSpan Sign is that of inviting signers to sign documents. This topic describes how to add, update, and remove signers from a transaction.

To ensure the security of your transactions, do not utilize dummy email addresses for your recipients.

### Adding Signers to a Transaction

To add a signer to an existing transaction, use the following code:

#### HTTP Request

```http
POST /api/packages/{packageId}/roles
```

For information on updating the authentication methods used for transactions, see [Authenticating Signers](/v1/docs/authenticating-signers#java-sdk).

#### HTTP Headers

```http
Accept: application/json   
Content-Type: application/json   
Authorization: Basic api_key
```

#### Request Payload

```json
{
  "id": "Signer5",
  "type": "SIGNER",
  "signers": [
    {
      "email": "mail32@example.com",
      "firstName": "John",
      "lastName": "Smith",
      "id": "Signer5",
      "phone": "+15141234567",
      "notificationMethods": {
        "primary": ["EMAIL", "SMS"]
      }
    }
  ]
}
```

For a complete description of each field, see the Request Payload table below.

#### Response Payload

```json
 {
  "id": "Signer5",
  "data": null,
  "specialTypes": [

  ],
  "emailMessage": null,
  "attachmentRequirements": [

  ],
  "locked": false,
  "reassign": false,
  "index": 0,
  "signers": [
    {
      "group": null,
      "language": "en",
      "signature": null,
      "id": "Signer5",
      "delivery": {
        "provider": false,
        "email": false,
        "download": false
      },
      "auth": {
        "scheme": "NONE",
        "challenges": [

        ]
      },
      "knowledgeBasedAuthentication": null,
      "data": null,
      "title": "",
      "company": "",
      "email": "mail32@example.com",
      "firstName": "John",
      "lastName": "Smith",
      "external": null,
      "updated": "2017-11-16T16:53:01Z",
      "phone": "",
      "professionalIdentityFields": [

      ],
      "userCustomFields": [

      ],
      "address": null,
      "created": "2017-11-16T16:53:01Z",
      "name": "",
      "specialTypes": [

      ]
    }
  ],
  "name": "Signer5",
  "type": "SIGNER"
}
```

### Updating an Existing Signer

To update an existing signer (role), first create a payload with the updates you want to make and then use the request examples below to make your updates. Use the roleid you assigned in the previous request.

If you did not assign a roleid, a randomly generated ID will be assigned by OneSpan Sign.

#### HTTP Request

```http
PUT /api/packages/{packageId}/roles/{roleId}
```

#### HTTP Headers

```http
Accept: application/json   
Content-Type: application/json   
Authorization: Basic api_key
```

#### Request Payload

```json
 {
  "type": "SIGNER",
  "signers": [
    {
      "email": "mary.doe@example.com",
      "firstName": "Mary",
      "lastName": "Doe"
    }
  ]
}
```

### Response Payload

```json
{
  "id": "Signer5",
  "data": null,
  "specialTypes": [

  ],
  "emailMessage": null,
  "attachmentRequirements": [

  ],
  "locked": false,
  "reassign": false,
  "index": 0,
  "signers": [
    {
      "group": null,
      "language": "en",
      "signature": null,
      "id": "Signer5",
      "delivery": {
        "provider": false,
        "email": false,
        "download": false
      },
      "auth": {
        "scheme": "NONE",
        "challenges": [

        ]
      },
      "knowledgeBasedAuthentication": null,
      "data": null,
      "title": "",
      "company": "",
      "email": "mary.doe@example.com",
      "firstName": "Mary",
      "lastName": "Doe",
      "external": null,
      "updated": "2017-11-16T16:53:01Z",
      "phone": "",
      "professionalIdentityFields": [

      ],
      "userCustomFields": [

      ],
      "address": null,
      "created": "2017-11-16T16:53:01Z",
      "name": "",
      "specialTypes": [

      ]
    }
  ],
  "name": "Signer5",
  "type": "SIGNER"
}
```

For a complete description of each field, see the Request Payload table below.

### Removing Signers From a Transaction

To remove a signer, you make a DELETE request to the following URI:

#### HTTP Request

```http
DELETE /api/packages/{packageId}/roles/{signerId}
```

#### HTTP Headers

```http
Accept: application/json   
Content-Type: application/json   
Authorization: Basic api_key
```

### Results

After running your code, if you login to OneSpan Sign and navigate to your package, you will see your signer in your transaction.

### Request Payload Table

| Property | Type | Editable | Required | Default | Sample Values |
| --- | --- | --- | --- | --- | --- |
| id | string | Yes | No | n/a | Signer5 |
| reassign | boolean | Yes | No | false | true / false |
| name | string | Yes | No | n/a | Signer5 |
| id | string | Yes | No | n/a | Signer5 |
| type | string | Yes | No | SIGNER | SIGNER / SENDER |
| signers |  |  |  |  |  |
| email | string | Yes | No | n/a | mail32@example.com |
| firstName | string | Yes | No | n/a | John |
| lastName | string | Yes | No | n/a | Smith |
| id | string | Yes | No | n/a | Signer5 |
| phone | string | Yes | No | n/a | "+15141234567" |
| notificationMethods | object | Yes | No | n/a | { "primary" : [ "EMAIL" ] } |
| primary | array | Yes | No | n/a | [“SMS”], ["EMAIL"], ["EMAIL", "SMS"] |

## APEX SDK

To download the full code sample see our [Code Share](https://community.onespan.com/documentation/onespan-sign/codeshare/signer-management-example-apex-sdk) site.

One of the most fundamental and basic operations in OneSpan Sign is that of inviting signers to sign documents. This topic describes how to add, update, and remove signers from a transaction.

To ensure the security of your transactions, do not utilize dummy email addresses for your recipients.

### Adding Signers to a Transaction

To add a signer to an existing transaction, you must first create the Signer object. The following code will create a Signer object:

```plaintext
ESignLiveAPIObjects.Role role = new ESignLiveAPIObjects.Role();
role.id = 'signer1';
role.signers = sdk.createRolesSigner('John', 'Smith', 'signer@example.com', 'CEO', 'ABC Bank');
sdk.helper.createRole(packageId, role);
```

Once the Signer object has been created, find the PackageId returned to you during the transaction creation and use the OneSpan Sign client to add your signer. The following code will do this:

```plaintext
ESignLiveAPIObjects.Role retrievedRole = sdk.getRole(packageId, 'signer1');
```

For information on updating the authentication methods used for transactions, see [Authenticating Signers](/v1/docs/authenticating-signers#java-sdk).

### Updating an Existing Signer

To update an existing signer, simply modify any of your Signer attributes, by retrieving that signer. All attributes, with the exception of RoleID, can be modified.The following code will do this:

```plaintext
retrievedRole.signers.get(0).firstName = 'changed firstname';
retrievedRole.signers.get(0).lastName = 'changed lastname';
retrievedRole.signers.get(0).email = 'changed@example.com';
```

Then, find the PackageId you wish to change this signer in and use the OneSpan Sign sdk to update the signer.

```plaintext
 sdk.updateRole(packageId,'signer1',retrievedRole);
```

### Removing Signers from a Transaction

To remove a signer from a transaction, simply call the deleteRole function with the packageID and roleId string.

```plaintext
 sdk.helper.deleteRole(packageId, 'signer1');
```

#### Results

After running your code, if you login to OneSpan Sign and navigate to your package, you will see your signer in your transaction.
