---
title: "Delivering Signed Documents"
slug: "delivering-signed-documents"
updated: 2025-07-03T20:10:44Z
published: 2025-07-03T20:10:44Z
canonical: "docs.onespan.com/delivering-signed-documents"
---

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

# Delivering Signed Documents

[Java SDK](/v1/docs/delivering-signed-documents#java-sdk) [.NET SDK](/v1/docs/delivering-signed-documents#net-sdk) [REST API](/v1/docs/delivering-signed-documents#rest-api) [APEX SDK](/v1/docs/delivering-signed-documents#apex-sdk)

## Java SDK

To download the full code sample see our [Code Share](https://github.com/eSignLive/esl.sdk.java/blob/master/sdk/src/main/java/com/silanis/esl/sdk/examples/DeliverSignedDocumentsByEmailExample.java) site.

Once a transaction has been completed, you can automatically deliver the signed documents to your signers. The following code will do this:

```java
// Create a new document package with a specified name
DocumentPackage superDuperPackage = newPackageNamed(getPackageName())
    // Add a signer with email, first name, and last name, and set to deliver signed documents by email
    .withSigner(newSignerWithEmail("john.smith@example.com")
        .withFirstName("John")
        .withLastName("Smith")
        .deliverSignedDocumentsByEmail())
    // Add a document with a name, input stream, and signature details
    .withDocument(newDocumentWithName("First Document")
        .fromStream(documentInputStream1, DocumentType.PDF)
        .withSignature(signatureFor("john.smith@example.com")
            .onPage(0)
            .atPosition(100, 100)))
    // Build the document package
    .build();
```

### Results

Once you've sent your package for signing and the transaction, each of your signers will receive an emails with a link to the signed documents.

## .NET SDK

To download the full code sample see our [Code Share](https://github.com/eSignLive/esl.sdk.net/blob/master/sdk/SDK.Examples/src/DeliverSignedDocumentsByEmailExample.cs) site.

Once a transaction has been completed, you can automatically deliver the signed documents to your signers. The following code will do this:

```csharp
 // Create a new document package with a specified name and description
DocumentPackage package = PackageBuilder.NewPackageNamed(PackageName)
    .DescribedAs("This is a new package")
    // Add a signer with email, first name, last name, and set to deliver signed documents by email
    .WithSigner(SignerBuilder.NewSignerWithEmail(email1)
        .WithFirstName("John")
        .WithLastName("Smith")
        .DeliverSignedDocumentsByEmail())
    // Add a document with a name, input stream, and signature details
    .WithDocument(DocumentBuilder.NewDocumentNamed("My Document")
        .FromStream(fileStream1, DocumentType.PDF)
        .WithSignature(SignatureBuilder.SignatureFor(email1)
            .OnPage(0)
            .AtPosition(100, 100)))
    // Build the document package
    .Build();
```

### Results

Once you've sent your package for signing and the transaction, each of your signers will receive an emails with a link to the signed documents.

## REST API

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

Once a transaction has been completed, you can automatically deliver the signed documents to your signers. The following code will do this:

#### HTTP Request

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

#### HTTP Headers

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

#### Request Payload

```json
{
  "id": "Signer5",
  "reassign": true,
  "type": "SIGNER",
  "signers": [
    {
      "email": "mail32@example.com",
      "firstName": "John",
      "lastName": "Smith",
      "id": "Signer5",
      "delivery": {
        "email": true,
        "download": true,
        "provider": true
      }
    }
  ],
  "name": "Signer5"
}
```

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": true,
  "index": 0,
  "signers": [
    {
      "group": null,
      "language": "en",
      "signature": null,
      "id": "Signer5",
      "delivery": {
        "provider": true,
        "email": true,
        "download": true
      },
      "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"
}
```

### Results

Once you've sent your package for signing and the transaction, each of your signers will receive an emails with a link to the signed documents.

### 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 |
| delivery |  |  |  |  |  |
| email | boolean | Yes | No | false | true / false |
| download | boolean | Yes | No | false | true / false |
| provider | boolean | Yes | No | false | true / false |

## APEX SDK

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

Once a transaction has been completed, you can automatically deliver the signed documents to your signers. The following code will do this:

```plaintext
// Create a new role object
ESignLiveAPIObjects.Role role = new ESignLiveAPIObjects.Role();

// Create a new signer object
ESignLiveAPIObjects.Signer signer = new ESignLiveAPIObjects.Signer();
signer.firstName = 'firstName';
signer.lastName = 'lastName';
signer.email = 'signer@example.com';
signer.name = 'signer1';
signer.id = 'signer1';

// Set delivery options for the signer
signer.delivery = new ESignLiveAPIObjects.Delivery(true, true, true); // Boolean download, Boolean email, Boolean provider

// Assign the signer to the role
role.signers = new List<ESignLiveAPIObjects.Signer>{signer};
role.id = 'signer1';
```

### Results

Once you've sent your package for signing, each of your signers will receive an email with a link to the signed documents.
