--- 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.