> For clean Markdown of any page, append .md to the page URL.
> For a complete documentation index, see https://developers.hellosign.com/llms.txt.
> For AI client integration (Claude Code, Cursor, etc.), connect to the MCP server at https://developers.hellosign.com/_mcp/server.

> Find out how to send and retrieve signature requests, check their status, and download completed documents using the Dropbox Sign API.

# Signature Request Walkthrough

There are several ways to send a signature request using the Dropbox Sign API. The method you may want to use will depend on your use case. Take a look at the different options we offer to decide which scenario fits your needs.

## Scenarios

How do you plan on creating your signature requests?

You provide the files to create the request and we add a signature page for the signers to sign.

<br />

<br />

Files

Setup a template on hellosign.com and reuse it with custom data when sending signature requests.

<br />

<br />

Templates

You provide the files and tell us exactly where form fields go on them. No signature page is added in this case.

<br />

Form Fields

### Using Files

This is the simplest way to create a signature request, attach the file(s) along with signer details and you're all set. A signature page will be appended at the end of your documents with a signature field for each signer involved.

\<Runn### Request

POST [https://api.hellosign.com/v3/signature\_request/send](https://api.hellosign.com/v3/signature_request/send)

```php PHP
<?php

namespace Dropbox\SignSandbox;

require_once __DIR__ . '/../vendor/autoload.php';

use SplFileObject;
use Dropbox;

$config = Dropbox\Sign\Configuration::getDefaultConfiguration();
$config->setUsername("YOUR_API_KEY");
// $config->setAccessToken("YOUR_ACCESS_TOKEN");

$field_options = (new Dropbox\Sign\Model\SubFieldOptions())
    ->setDateFormat(Dropbox\Sign\Model\SubFieldOptions::DATE_FORMAT_DD_MM_YYYY);

$signing_options = (new Dropbox\Sign\Model\SubSigningOptions())
    ->setDefaultType(Dropbox\Sign\Model\SubSigningOptions::DEFAULT_TYPE_DRAW)
    ->setDraw(true)
    ->setPhone(false)
    ->setType(true)
    ->setUpload(true)
    ->setForceAdvancedSignatureDetails(false);

$signers_1 = (new Dropbox\Sign\Model\SubSignatureRequestSigner())
    ->setName("Jack")
    ->setEmailAddress("jack@example.com")
    ->setOrder(0);

$signers_2 = (new Dropbox\Sign\Model\SubSignatureRequestSigner())
    ->setName("Jill")
    ->setEmailAddress("jill@example.com")
    ->setOrder(1);

$signers = [
    $signers_1,
    $signers_2,
];

$signature_request_send_request = (new Dropbox\Sign\Model\SignatureRequestSendRequest())
    ->setMessage("Please sign this NDA and then we can discuss more. Let me know if you\nhave any questions.")
    ->setSubject("The NDA we talked about")
    ->setTestMode(true)
    ->setTitle("NDA with Acme Co.")
    ->setCcEmailAddresses([
        "lawyer1@dropboxsign.com",
        "lawyer2@dropboxsign.com",
    ])
    ->setFiles([
    ])
    ->setMetadata(json_decode(<<<'EOD'
        {
            "custom_id": 1234,
            "custom_text": "NDA #9"
        }
    EOD, true))
    ->setFieldOptions($field_options)
    ->setSigningOptions($signing_options)
    ->setSigners($signers);

try \{
    $response = (new Dropbox\Sign\Api\SignatureRequestApi(config: $config))->signatureRequestSend(
        signature_request_send_request: $signature_request_send_request,
    );

    print_r($response);
} catch (Dropbox\Sign\ApiException $e) \{
    echo "Exception when calling SignatureRequestApi#signatureRequestSend: \{$e->getMessage()}";
}

```

```csharp C#
using System;
using System.Collections.Generic;
using System.IO;
using System.Text.Json;

using Dropbox.Sign.Api;
using Dropbox.Sign.Client;
using Dropbox.Sign.Model;

namespace Dropbox.SignSandbox;

public class SignatureRequestSendExample
{
    public static void Run()
    {
        var config = new Configuration();
        config.Username = "YOUR_API_KEY";
        // config.AccessToken = "YOUR_ACCESS_TOKEN";

        var fieldOptions = new SubFieldOptions(
            dateFormat: SubFieldOptions.DateFormatEnum.DD_MM_YYYY
        );

        var signingOptions = new SubSigningOptions(
            defaultType: SubSigningOptions.DefaultTypeEnum.Draw,
            draw: true,
            phone: false,
            type: true,
            upload: true,
            force_advanced_signature_details: false,
        );

        var signers1 = new SubSignatureRequestSigner(
            name: "Jack",
            emailAddress: "jack@example.com",
            order: 0
        );

        var signers2 = new SubSignatureRequestSigner(
            name: "Jill",
            emailAddress: "jill@example.com",
            order: 1
        );

        var signers = new List<SubSignatureRequestSigner>
        {
            signers1,
            signers2,
        };

        var signatureRequestSendRequest = new SignatureRequestSendRequest(
            message: "Please sign this NDA and then we can discuss more. Let me know if you\nhave any questions.",
            subject: "The NDA we talked about",
            testMode: true,
            title: "NDA with Acme Co.",
            ccEmailAddresses: [
                "lawyer1@dropboxsign.com",
                "lawyer2@dropboxsign.com",
            ],
            files: new List<Stream>
            {
                new FileStream(
                    path: "./example_signature_request.pdf",
                    mode: FileMode.Open
                ),
            },
            metadata: JsonSerializer.Deserialize<Dictionary<string, object>>("""
                {
                    "custom_id": 1234,
                    "custom_text": "NDA #9"
                }
            """),
            fieldOptions: fieldOptions,
            signingOptions: signingOptions,
            signers: signers
        );

        try
        {
            var response = new SignatureRequestApi(config).SignatureRequestSend(
                signatureRequestSendRequest: signatureRequestSendRequest
            );

            Console.WriteLine(response);
        }
        catch (ApiException e)
        {
            Console.WriteLine("Exception when calling SignatureRequestApi#SignatureRequestSend: " + e.Message);
            Console.WriteLine("Status Code: " + e.ErrorCode);
            Console.WriteLine(e.StackTrace);
        }
    }
}

```

```typescript TypeScript
import * as fs from 'fs';
import api from "@dropbox/sign"
import models from "@dropbox/sign"

const apiCaller = new api.SignatureRequestApi();
apiCaller.username = "YOUR_API_KEY";
// apiCaller.accessToken = "YOUR_ACCESS_TOKEN";

const fieldOptions: models.SubFieldOptions = {
  dateFormat: models.SubFieldOptions.DateFormatEnum.DdMmYyyy,
};

const signingOptions: models.SubSigningOptions = {
  defaultType: models.SubSigningOptions.DefaultTypeEnum.Draw,
  draw: true,
  phone: false,
  type: true,
  upload: true,
  force_advanced_signature_details: false,
};

const signers1: models.SubSignatureRequestSigner = {
  name: "Jack",
  emailAddress: "jack@example.com",
  order: 0,
};

const signers2: models.SubSignatureRequestSigner = {
  name: "Jill",
  emailAddress: "jill@example.com",
  order: 1,
};

const signers = [
  signers1,
  signers2,
];

const signatureRequestSendRequest: models.SignatureRequestSendRequest = {
  message: "Please sign this NDA and then we can discuss more. Let me know if you\nhave any questions.",
  subject: "The NDA we talked about",
  testMode: true,
  title: "NDA with Acme Co.",
  ccEmailAddresses: [
    "lawyer1@dropboxsign.com",
    "lawyer2@dropboxsign.com",
  ],
  files: [
    fs.createReadStream("./example_signature_request.pdf"),
  ],
  metadata: {
    "custom_id": 1234,
    "custom_text": "NDA #9"
  },
  fieldOptions: fieldOptions,
  signingOptions: signingOptions,
  signers: signers,
};

apiCaller.signatureRequestSend(
  signatureRequestSendRequest,
).then(response => {
  console.log(response.body);
}).catch(error => {
  console.log("Exception when calling SignatureRequestApi#signatureRequestSend:");
  console.log(error.body);
});

```

```java Java
package com.dropbox.sign_sandbox;

import com.dropbox.sign.ApiException;
import com.dropbox.sign.Configuration;
import com.dropbox.sign.api.*;
import com.dropbox.sign.auth.*;
import com.dropbox.sign.JSON;
import com.dropbox.sign.model.*;

import java.io.File;
import java.math.BigDecimal;
import java.time.LocalDate;
import java.time.OffsetDateTime;
import java.util.ArrayList;
import java.util.List;
import java.util.Map;

public class SignatureRequestSendExample
{
    public static void main(String[] args)
    {
        var config = Configuration.getDefaultApiClient();
        ((HttpBasicAuth) config.getAuthentication("api_key")).setUsername("YOUR_API_KEY");
        // ((HttpBearerAuth) config.getAuthentication("oauth2")).setBearerToken("YOUR_ACCESS_TOKEN");

        var fieldOptions = new SubFieldOptions();
        fieldOptions.dateFormat(SubFieldOptions.DateFormatEnum.DD_MM_YYYY);

        var signingOptions = new SubSigningOptions();
        signingOptions.defaultType(SubSigningOptions.DefaultTypeEnum.DRAW);
        signingOptions.draw(true);
        signingOptions.phone(false);
        signingOptions.type(true);
        signingOptions.upload(true);
        signingOptions.forceAdvancedSignatureDetails(false);

        var signers1 = new SubSignatureRequestSigner();
        signers1.name("Jack");
        signers1.emailAddress("jack@example.com");
        signers1.order(0);

        var signers2 = new SubSignatureRequestSigner();
        signers2.name("Jill");
        signers2.emailAddress("jill@example.com");
        signers2.order(1);

        var signers = new ArrayList<SubSignatureRequestSigner>(List.of (
            signers1,
            signers2
        ));

        var signatureRequestSendRequest = new SignatureRequestSendRequest();
        signatureRequestSendRequest.message("Please sign this NDA and then we can discuss more. Let me know if you\nhave any questions.");
        signatureRequestSendRequest.subject("The NDA we talked about");
        signatureRequestSendRequest.testMode(true);
        signatureRequestSendRequest.title("NDA with Acme Co.");
        signatureRequestSendRequest.ccEmailAddresses(List.of (
            "lawyer1@dropboxsign.com",
            "lawyer2@dropboxsign.com"
        ));
        signatureRequestSendRequest.files(List.of (
            new File("./example_signature_request.pdf")
        ));
        signatureRequestSendRequest.metadata(JSON.deserialize("""
            {
                "custom_id": 1234,
                "custom_text": "NDA #9"
            }
        """, Map.class));
        signatureRequestSendRequest.fieldOptions(fieldOptions);
        signatureRequestSendRequest.signingOptions(signingOptions);
        signatureRequestSendRequest.signers(signers);

        try
        {
            var response = new SignatureRequestApi(config).signatureRequestSend(
                signatureRequestSendRequest
            );

            System.out.println(response);
        } catch (ApiException e) {
            System.err.println("Exception when calling SignatureRequestApi#signatureRequestSend");
            System.err.println("Status code: " + e.getCode());
            System.err.println("Reason: " + e.getResponseBody());
            System.err.println("Response headers: " + e.getResponseHeaders());
            e.printStackTrace();
        }
    }
}

```

```ruby Ruby
require "json"
require "dropbox-sign"

Dropbox::Sign.configure do |config|
    config.username = "YOUR_API_KEY"
    # config.access_token = "YOUR_ACCESS_TOKEN"
end

field_options = Dropbox::Sign::SubFieldOptions.new
field_options.date_format = "DD - MM - YYYY"

signing_options = Dropbox::Sign::SubSigningOptions.new
signing_options.default_type = "draw"
signing_options.draw = true
signing_options.phone = false
signing_options.type = true
signing_options.upload = true
signing_options.force_advanced_signature_details = false

signers_1 = Dropbox::Sign::SubSignatureRequestSigner.new
signers_1.name = "Jack"
signers_1.email_address = "jack@example.com"
signers_1.order = 0

signers_2 = Dropbox::Sign::SubSignatureRequestSigner.new
signers_2.name = "Jill"
signers_2.email_address = "jill@example.com"
signers_2.order = 1

signers = [
    signers_1,
    signers_2,
]

signature_request_send_request = Dropbox::Sign::SignatureRequestSendRequest.new
signature_request_send_request.message = "Please sign this NDA and then we can discuss more. Let me know if you\nhave any questions."
signature_request_send_request.subject = "The NDA we talked about"
signature_request_send_request.test_mode = true
signature_request_send_request.title = "NDA with Acme Co."
signature_request_send_request.cc_email_addresses = [
    "lawyer1@dropboxsign.com",
    "lawyer2@dropboxsign.com",
]
signature_request_send_request.files = [
    File.new("./example_signature_request.pdf", "r"),
]
signature_request_send_request.metadata = JSON.parse(\<<-EOD
    {
        "custom_id": 1234,
        "custom_text": "NDA #9"
    }
    EOD
)
signature_request_send_request.field_options = field_options
signature_request_send_request.signing_options = signing_options
signature_request_send_request.signers = signers

begin
    response = Dropbox::Sign::SignatureRequestApi.new.signature_request_send(
        signature_request_send_request,
    )

    p response
rescue Dropbox::Sign::ApiError => e
    puts "Exception when calling SignatureRequestApi#signature_request_send: #{e}"
end

```

```python Python
import json
from datetime import date, datetime
from pprint import pprint

from dropbox_sign import ApiClient, ApiException, Configuration, api, models

configuration = Configuration(
    username="YOUR_API_KEY",
    # access_token="YOUR_ACCESS_TOKEN",
)

with ApiClient(configuration) as api_client:
    field_options = models.SubFieldOptions(
        date_format="DD - MM - YYYY",
    )

    signing_options = models.SubSigningOptions(
        default_type="draw",
        draw=True,
        phone=False,
        type=True,
        upload=True,
        force_advanced_signature_details=False,
    )

    signers_1 = models.SubSignatureRequestSigner(
        name="Jack",
        email_address="jack@example.com",
        order=0,
    )

    signers_2 = models.SubSignatureRequestSigner(
        name="Jill",
        email_address="jill@example.com",
        order=1,
    )

    signers = [
        signers_1,
        signers_2,
    ]

    signature_request_send_request = models.SignatureRequestSendRequest(
        message="Please sign this NDA and then we can discuss more. Let me know if you\nhave any questions.",
        subject="The NDA we talked about",
        test_mode=True,
        title="NDA with Acme Co.",
        cc_email_addresses=[
            "lawyer1@dropboxsign.com",
            "lawyer2@dropboxsign.com",
        ],
        files=[
            open("./example_signature_request.pdf", "rb").read(),
        ],
        metadata=json.loads("""
            {
                "custom_id": 1234,
                "custom_text": "NDA #9"
            }
        """),
        field_options=field_options,
        signing_options=signing_options,
        signers=signers,
    )

    try:
        response = api.SignatureRequestApi(api_client).signature_request_send(
            signature_request_send_request=signature_request_send_request,
        )

        pprint(response)
    except ApiException as e:
        print("Exception when calling SignatureRequestApi#signature_request_send: %s\n" % e)

```

```curl cURL
curl -X POST 'https://api.hellosign.com/v3/signature_request/send' \
  -u 'YOUR_API_KEY:' \
  -F 'files[0]=@mutual-NDA-example.pdf' \
  -F 'title=NDA with Acme Co.' \
  -F 'subject=The NDA we talked about' \
  -F 'message=Please sign this NDA and then we can discuss more. Let me know if you have any questions.' \
  -F 'signers[0][email_address]=jack@example.com' \
  -F 'signers[0][name]=Jack' \
  -F 'signers[0][order]=0' \
  -F 'signers[1][email_address]=jill@example.com' \
  -F 'signers[1][name]=Jill' \
  -F 'signers[1][order]=1' \
  -F 'cc_email_addresses[]=lawyer1@dropboxsign.com' \
  -F 'cc_email_addresses[]=lawyer2@dropboxsign.com' \
  -F 'metadata[custom_id]=1234' \
  -F 'metadata[custom_text]=NDA #9' \
  -F 'signing_options[draw]=1' \
  -F 'signing_options[type]=1' \
  -F 'signing_options[upload]=1' \
  -F 'signing_options[phone]=1' \
  -F 'signing_options[default_type]=draw' \
  -F 'signing_options[force_advanced_signature_details]=0' \
  -F 'field_options[date_format]=DD - MM - YYYY' \
  -F 'test_mode=1'

```

```go Send Signature Request
package main

import (
	"fmt"
	"net/http"
	"io"
)

func main() {

	url := "https://api.hellosign.com/v3/signature_request/send"

	req, _ := http.NewRequest("POST", url, nil)

	req.SetBasicAuth("<apiKey>", "")
	req.Header.Add("Content-Type", "application/json")

	res, _ := http.DefaultClient.Do(req)

	defer res.Body.Close()
	body, _ := io.ReadAll(res.Body)

	fmt.Println(res)
	fmt.Println(string(body))

}
```

````swift Send Signature Request
import Foundation

let credentials = Data("<apiKey>:".utf8).base64EncodedString()

let headers = [
  "Authorization": "Basic \(credentials)",
  "Content-Type": "application/json"
]

let request = NSMutableURLRequest(url: NSURL(string: "https://api.hellosign.com/v3/signature_request/send")! as URL,
                                        cachePolicy: .useProtocolCachePolicy,
                                    timeoutInterval: 10.0)
request.httpMethod = "POST"
request.allHTTPHeaderFields = headers

let session = URLSession.shared
let dataTask = session.dataTask(with: request as URLRequest, completionHandler: \{ (data, response, error) -> Void in
  if (error != nil) {
    print(error as Any)
  } else {
    let httpResponse = response as? HTTPURLResponse
    print(httpResponse)
  }
})

dataTask.resume()
```s will send a signature request to Jack and Jill. Both will receive an email with a link to sign the request. The link will take them to a page where they can review the document before adding their signatures onto the signature page.

The `signature_request_id` field, found in the response object, allows you to keep track of the request status as shown in the [signature request status](#retrieving-signature-status) section. You can find more details about the [Signature Request](/api/signature-request) object on the [API reference page](/api/api-reference-welcome).<br /><br />

### Using Templates

If you need to send signature requests with the same documents often and need to have them filled in specific places, then using templates make perfect sense. This way, you save yourself the trouble of uploading the document files everytime and get to decide where the signers should fill in information.

Templates allow you to specify form fields (text, check boxes, signatures, etc...) that the signers should fill. But it also offers the possibilty to define "custom fields" that will be filled when the request gets sent via the API and will be shown to the signers.

Visit our [template walkthrough](/docs/walkthroughs/templates) if you're not familiar with templates and how to use them with the API.


<Runnab### Request

POST https://api.hellosign.com/v3/signature_request/send_with_template

```php PHP
<?php

namespace Dropbox\SignSandbox;

require_once __DIR__ . '/../vendor/autoload.php';

use SplFileObject;
use Dropbox;

$config = Dropbox\Sign\Configuration::getDefaultConfiguration();
$config->setUsername("YOUR_API_KEY");
// $config->setAccessToken("YOUR_ACCESS_TOKEN");

$signing_options = (new Dropbox\Sign\Model\SubSigningOptions())
    ->setDefaultType(Dropbox\Sign\Model\SubSigningOptions::DEFAULT_TYPE_DRAW)
    ->setDraw(true)
    ->setPhone(false)
    ->setType(true)
    ->setUpload(true)
    ->setForceAdvancedSignatureDetails(false);

$signers_1 = (new Dropbox\Sign\Model\SubSignatureRequestTemplateSigner())
    ->setRole("Client")
    ->setName("George")
    ->setEmailAddress("george@example.com");

$signers = [
    $signers_1,
];

$ccs_1 = (new Dropbox\Sign\Model\SubCC())
    ->setRole("Accounting")
    ->setEmailAddress("accounting@example.com");

$ccs = [
    $ccs_1,
];

$custom_fields_1 = (new Dropbox\Sign\Model\SubCustomField())
    ->setName("Cost")
    ->setEditor("Client")
    ->setRequired(true)
    ->setValue("\$20,000");

$custom_fields = [
    $custom_fields_1,
];

$signature_request_send_with_template_request = (new Dropbox\Sign\Model\SignatureRequestSendWithTemplateRequest())
    ->setTemplateIds([
        "61a832ff0d8423f91d503e76bfbcc750f7417c78",
    ])
    ->setMessage("Glad we could come to an agreement.")
    ->setSubject("Purchase Order")
    ->setTestMode(true)
    ->setSigningOptions($signing_options)
    ->setSigners($signers)
    ->setCcs($ccs)
    ->setCustomFields($custom_fields);

try \{
    $response = (new Dropbox\Sign\Api\SignatureRequestApi(config: $config))->signatureRequestSendWithTemplate(
        signature_request_send_with_template_request: $signature_request_send_with_template_request,
    );

    print_r($response);
} catch (Dropbox\Sign\ApiException $e) \{
    echo "Exception when calling SignatureRequestApi#signatureRequestSendWithTemplate: \{$e->getMessage()}";
}

````

```csharp C#
using System;
using System.Collections.Generic;
using System.IO;
using System.Text.Json;

using Dropbox.Sign.Api;
using Dropbox.Sign.Client;
using Dropbox.Sign.Model;

namespace Dropbox.SignSandbox;

public class SignatureRequestSendWithTemplateExample
{
    public static void Run()
    {
        var config = new Configuration();
        config.Username = "YOUR_API_KEY";
        // config.AccessToken = "YOUR_ACCESS_TOKEN";

        var signingOptions = new SubSigningOptions(
            defaultType: SubSigningOptions.DefaultTypeEnum.Draw,
            draw: true,
            phone: false,
            type: true,
            upload: true,
            force_advanced_signature_details: false,
        );

        var signers1 = new SubSignatureRequestTemplateSigner(
            role: "Client",
            name: "George",
            emailAddress: "george@example.com"
        );

        var signers = new List<SubSignatureRequestTemplateSigner>
        {
            signers1,
        };

        var ccs1 = new SubCC(
            role: "Accounting",
            emailAddress: "accounting@example.com"
        );

        var ccs = new List<SubCC>
        {
            ccs1,
        };

        var customFields1 = new SubCustomField(
            name: "Cost",
            editor: "Client",
            required: true,
            value: "$20,000"
        );

        var customFields = new List<SubCustomField>
        {
            customFields1,
        };

        var signatureRequestSendWithTemplateRequest = new SignatureRequestSendWithTemplateRequest(
            templateIds: [
                "61a832ff0d8423f91d503e76bfbcc750f7417c78",
            ],
            message: "Glad we could come to an agreement.",
            subject: "Purchase Order",
            testMode: true,
            signingOptions: signingOptions,
            signers: signers,
            ccs: ccs,
            customFields: customFields
        );

        try
        {
            var response = new SignatureRequestApi(config).SignatureRequestSendWithTemplate(
                signatureRequestSendWithTemplateRequest: signatureRequestSendWithTemplateRequest
            );

            Console.WriteLine(response);
        }
        catch (ApiException e)
        {
            Console.WriteLine("Exception when calling SignatureRequestApi#SignatureRequestSendWithTemplate: " + e.Message);
            Console.WriteLine("Status Code: " + e.ErrorCode);
            Console.WriteLine(e.StackTrace);
        }
    }
}

```

```typescript TypeScript
import * as fs from 'fs';
import api from "@dropbox/sign"
import models from "@dropbox/sign"

const apiCaller = new api.SignatureRequestApi();
apiCaller.username = "YOUR_API_KEY";
// apiCaller.accessToken = "YOUR_ACCESS_TOKEN";

const signingOptions: models.SubSigningOptions = {
  defaultType: models.SubSigningOptions.DefaultTypeEnum.Draw,
  draw: true,
  phone: false,
  type: true,
  upload: true,
  force_advanced_signature_details: false,
};

const signers1: models.SubSignatureRequestTemplateSigner = {
  role: "Client",
  name: "George",
  emailAddress: "george@example.com",
};

const signers = [
  signers1,
];

const ccs1: models.SubCC = {
  role: "Accounting",
  emailAddress: "accounting@example.com",
};

const ccs = [
  ccs1,
];

const customFields1: models.SubCustomField = {
  name: "Cost",
  editor: "Client",
  required: true,
  value: "$20,000",
};

const customFields = [
  customFields1,
];

const signatureRequestSendWithTemplateRequest: models.SignatureRequestSendWithTemplateRequest = {
  templateIds: [
    "61a832ff0d8423f91d503e76bfbcc750f7417c78",
  ],
  message: "Glad we could come to an agreement.",
  subject: "Purchase Order",
  testMode: true,
  signingOptions: signingOptions,
  signers: signers,
  ccs: ccs,
  customFields: customFields,
};

apiCaller.signatureRequestSendWithTemplate(
  signatureRequestSendWithTemplateRequest,
).then(response => {
  console.log(response.body);
}).catch(error => {
  console.log("Exception when calling SignatureRequestApi#signatureRequestSendWithTemplate:");
  console.log(error.body);
});

```

```java Java
package com.dropbox.sign_sandbox;

import com.dropbox.sign.ApiException;
import com.dropbox.sign.Configuration;
import com.dropbox.sign.api.*;
import com.dropbox.sign.auth.*;
import com.dropbox.sign.JSON;
import com.dropbox.sign.model.*;

import java.io.File;
import java.math.BigDecimal;
import java.time.LocalDate;
import java.time.OffsetDateTime;
import java.util.ArrayList;
import java.util.List;
import java.util.Map;

public class SignatureRequestSendWithTemplateExample
{
    public static void main(String[] args)
    {
        var config = Configuration.getDefaultApiClient();
        ((HttpBasicAuth) config.getAuthentication("api_key")).setUsername("YOUR_API_KEY");
        // ((HttpBearerAuth) config.getAuthentication("oauth2")).setBearerToken("YOUR_ACCESS_TOKEN");

        var signingOptions = new SubSigningOptions();
        signingOptions.defaultType(SubSigningOptions.DefaultTypeEnum.DRAW);
        signingOptions.draw(true);
        signingOptions.phone(false);
        signingOptions.type(true);
        signingOptions.upload(true);
        signingOptions.forceAdvancedSignatureDetails(false);

        var signers1 = new SubSignatureRequestTemplateSigner();
        signers1.role("Client");
        signers1.name("George");
        signers1.emailAddress("george@example.com");

        var signers = new ArrayList<SubSignatureRequestTemplateSigner>(List.of (
            signers1
        ));

        var ccs1 = new SubCC();
        ccs1.role("Accounting");
        ccs1.emailAddress("accounting@example.com");

        var ccs = new ArrayList<SubCC>(List.of (
            ccs1
        ));

        var customFields1 = new SubCustomField();
        customFields1.name("Cost");
        customFields1.editor("Client");
        customFields1.required(true);
        customFields1.value("$20,000");

        var customFields = new ArrayList<SubCustomField>(List.of (
            customFields1
        ));

        var signatureRequestSendWithTemplateRequest = new SignatureRequestSendWithTemplateRequest();
        signatureRequestSendWithTemplateRequest.templateIds(List.of (
            "61a832ff0d8423f91d503e76bfbcc750f7417c78"
        ));
        signatureRequestSendWithTemplateRequest.message("Glad we could come to an agreement.");
        signatureRequestSendWithTemplateRequest.subject("Purchase Order");
        signatureRequestSendWithTemplateRequest.testMode(true);
        signatureRequestSendWithTemplateRequest.signingOptions(signingOptions);
        signatureRequestSendWithTemplateRequest.signers(signers);
        signatureRequestSendWithTemplateRequest.ccs(ccs);
        signatureRequestSendWithTemplateRequest.customFields(customFields);

        try
        {
            var response = new SignatureRequestApi(config).signatureRequestSendWithTemplate(
                signatureRequestSendWithTemplateRequest
            );

            System.out.println(response);
        } catch (ApiException e) {
            System.err.println("Exception when calling SignatureRequestApi#signatureRequestSendWithTemplate");
            System.err.println("Status code: " + e.getCode());
            System.err.println("Reason: " + e.getResponseBody());
            System.err.println("Response headers: " + e.getResponseHeaders());
            e.printStackTrace();
        }
    }
}

```

```ruby Ruby
require "json"
require "dropbox-sign"

Dropbox::Sign.configure do |config|
    config.username = "YOUR_API_KEY"
    # config.access_token = "YOUR_ACCESS_TOKEN"
end

signing_options = Dropbox::Sign::SubSigningOptions.new
signing_options.default_type = "draw"
signing_options.draw = true
signing_options.phone = false
signing_options.type = true
signing_options.upload = true
signing_options.force_advanced_signature_details = false

signers_1 = Dropbox::Sign::SubSignatureRequestTemplateSigner.new
signers_1.role = "Client"
signers_1.name = "George"
signers_1.email_address = "george@example.com"

signers = [
    signers_1,
]

ccs_1 = Dropbox::Sign::SubCC.new
ccs_1.role = "Accounting"
ccs_1.email_address = "accounting@example.com"

ccs = [
    ccs_1,
]

custom_fields_1 = Dropbox::Sign::SubCustomField.new
custom_fields_1.name = "Cost"
custom_fields_1.editor = "Client"
custom_fields_1.required = true
custom_fields_1.value = "$20,000"

custom_fields = [
    custom_fields_1,
]

signature_request_send_with_template_request = Dropbox::Sign::SignatureRequestSendWithTemplateRequest.new
signature_request_send_with_template_request.template_ids = [
    "61a832ff0d8423f91d503e76bfbcc750f7417c78",
]
signature_request_send_with_template_request.message = "Glad we could come to an agreement."
signature_request_send_with_template_request.subject = "Purchase Order"
signature_request_send_with_template_request.test_mode = true
signature_request_send_with_template_request.signing_options = signing_options
signature_request_send_with_template_request.signers = signers
signature_request_send_with_template_request.ccs = ccs
signature_request_send_with_template_request.custom_fields = custom_fields

begin
    response = Dropbox::Sign::SignatureRequestApi.new.signature_request_send_with_template(
        signature_request_send_with_template_request,
    )

    p response
rescue Dropbox::Sign::ApiError => e
    puts "Exception when calling SignatureRequestApi#signature_request_send_with_template: #{e}"
end

```

```python Python
import json
from datetime import date, datetime
from pprint import pprint

from dropbox_sign import ApiClient, ApiException, Configuration, api, models

configuration = Configuration(
    username="YOUR_API_KEY",
    # access_token="YOUR_ACCESS_TOKEN",
)

with ApiClient(configuration) as api_client:
    signing_options = models.SubSigningOptions(
        default_type="draw",
        draw=True,
        phone=False,
        type=True,
        upload=True,
        force_advanced_signature_details=False,
    )

    signers_1 = models.SubSignatureRequestTemplateSigner(
        role="Client",
        name="George",
        email_address="george@example.com",
    )

    signers = [
        signers_1,
    ]

    ccs_1 = models.SubCC(
        role="Accounting",
        email_address="accounting@example.com",
    )

    ccs = [
        ccs_1,
    ]

    custom_fields_1 = models.SubCustomField(
        name="Cost",
        editor="Client",
        required=True,
        value="$20,000",
    )

    custom_fields = [
        custom_fields_1,
    ]

    signature_request_send_with_template_request = models.SignatureRequestSendWithTemplateRequest(
        template_ids=[
            "61a832ff0d8423f91d503e76bfbcc750f7417c78",
        ],
        message="Glad we could come to an agreement.",
        subject="Purchase Order",
        test_mode=True,
        signing_options=signing_options,
        signers=signers,
        ccs=ccs,
        custom_fields=custom_fields,
    )

    try:
        response = api.SignatureRequestApi(api_client).signature_request_send_with_template(
            signature_request_send_with_template_request=signature_request_send_with_template_request,
        )

        pprint(response)
    except ApiException as e:
        print("Exception when calling SignatureRequestApi#signature_request_send_with_template: %s\n" % e)

```

```curl cURL
curl -X POST 'https://api.hellosign.com/v3/signature_request/send_with_template' \
  -u 'YOUR_API_KEY:' \
  -F 'client_id=YOUR_CLIENT_ID' \
  -F 'template_ids[]=61a832ff0d8423f91d503e76bfbcc750f7417c78' \
  -F 'subject=Purchase Order' \
  -F 'message=Glad we could come to an agreement.' \
  -F 'signers[0][role]=Client' \
  -F 'signers[0][name]=George' \
  -F 'signers[0][email_address]=george@example.com' \
  -F 'ccs[0][role]=Accounting' \
  -F 'ccs[0][email_address]=accounting@example.com' \
  -F 'custom_fields[0][name]=Cost' \
  -F 'custom_fields[0][value]=$20,000' \
  -F 'custom_fields[0][editor]=Client' \
  -F 'custom_fields[0][required]=true' \
  -F 'signing_options[draw]=1' \
  -F 'signing_options[type]=1' \
  -F 'signing_options[upload]=1' \
  -F 'signing_options[phone]=1' \
  -F 'signing_options[default_type]=draw' \
  -F 'signing_options[force_advanced_signature_details]=0' \
  -F 'test_mode=1'

```

```go Send Signature Request With Template
package main

import (
	"fmt"
	"net/http"
	"io"
)

func main() {

	url := "https://api.hellosign.com/v3/signature_request/send_with_template"

	req, _ := http.NewRequest("POST", url, nil)

	req.SetBasicAuth("<apiKey>", "")
	req.Header.Add("Content-Type", "application/json")

	res, _ := http.DefaultClient.Do(req)

	defer res.Body.Close()
	body, _ := io.ReadAll(res.Body)

	fmt.Println(res)
	fmt.Println(string(body))

}
```

````swift Send Signature Request With Template
import Foundation

let credentials = Data("<apiKey>:".utf8).base64EncodedString()

let headers = [
  "Authorization": "Basic \(credentials)",
  "Content-Type": "application/json"
]

let request = NSMutableURLRequest(url: NSURL(string: "https://api.hellosign.com/v3/signature_request/send_with_template")! as URL,
                                        cachePolicy: .useProtocolCachePolicy,
                                    timeoutInterval: 10.0)
request.httpMethod = "POST"
request.allHTTPHeaderFields = headers

let session = URLSession.shared
let dataTask = session.dataTask(with: request as URLRequest, completionHandler: \{ (data, response, error) -> Void in
  if (error != nil) {
    print(error as Any)
  } else {
    let httpResponse = response as? HTTPURLResponse
    print(httpResponse)
  }
})

dataTask.resume()
```will send a signature request to George. George will receive an email with a link to sign the request. The link will take them to a page where they can review the document and fill out the required fields.

The `signature_request_id` field, found in the response object, allows you to keep track of the request status as shown in the [signature request status](#retrieving-signature-status) section. You can find more details about the [Signature Request](/api/signature-request) object on the [API reference page](/api/api-reference-welcome).<br /><br />

### Using Files and Form Fields

<Warning title="Warning" icon="fa-light fa-circle-exclamation">
  <strong>Warning:</strong> Due to a bug, the <code>form_fields_per_document</code> parameter only supports two-dimensional arrays right now. We're testing a fix right now. You can read more here: <a href="/docs/sdks/open-api/form-fields-per-document" target="_blank">Using Form Fields per Document</a>.
</Warning>

If you need to send documents with changing content but the same form fields, we have a better alternative than using templates. Rather than creating a large number of templates to cover all the variations, you can create one single template and retrieve the coordinates of the associated form fields. With that information, you can provide the list of form fields and their coordinates when sending the signature request via the API.

<Note title="Note" icon="fa-light fa-circle-info">
  <strong>Note:</strong> <a href="/docs/walkthroughs/text-tags">Text Tags</a> are a much easier way to handle this scenario as they allow you to place tags in the document that will be converted to components when the request is sent.
</Note>

This following request will create a signature request for two signers. On the first document (NDA), there will be a signature field and a date field for the signer. No form fields will be present on the second document.

For more information about form fields and their attributes, see `form_fields` in Templates on the [API reference page](/api/api-reference-welcome).

<Runnable### Request

POST https://api.hellosign.com/v3/signature_request/send

```php PHP
<?php

namespace Dropbox\SignSandbox;

require_once __DIR__ . '/../vendor/autoload.php';

use SplFileObject;
use Dropbox;

$config = Dropbox\Sign\Configuration::getDefaultConfiguration();
$config->setUsername("YOUR_API_KEY");
// $config->setAccessToken("YOUR_ACCESS_TOKEN");

$field_options = (new Dropbox\Sign\Model\SubFieldOptions())
    ->setDateFormat(Dropbox\Sign\Model\SubFieldOptions::DATE_FORMAT_DD_MM_YYYY);

$signing_options = (new Dropbox\Sign\Model\SubSigningOptions())
    ->setDefaultType(Dropbox\Sign\Model\SubSigningOptions::DEFAULT_TYPE_DRAW)
    ->setDraw(true)
    ->setPhone(false)
    ->setType(true)
    ->setUpload(true)
    ->setForceAdvancedSignatureDetails(false);

$signers_1 = (new Dropbox\Sign\Model\SubSignatureRequestSigner())
    ->setName("Jack")
    ->setEmailAddress("jack@example.com")
    ->setOrder(0);

$signers_2 = (new Dropbox\Sign\Model\SubSignatureRequestSigner())
    ->setName("Jill")
    ->setEmailAddress("jill@example.com")
    ->setOrder(1);

$signers = [
    $signers_1,
    $signers_2,
];

$signature_request_send_request = (new Dropbox\Sign\Model\SignatureRequestSendRequest())
    ->setMessage("Please sign this NDA and then we can discuss more. Let me know if you\nhave any questions.")
    ->setSubject("The NDA we talked about")
    ->setTestMode(true)
    ->setTitle("NDA with Acme Co.")
    ->setCcEmailAddresses([
        "lawyer1@dropboxsign.com",
        "lawyer2@dropboxsign.com",
    ])
    ->setFiles([
    ])
    ->setMetadata(json_decode(<<<'EOD'
        {
            "custom_id": 1234,
            "custom_text": "NDA #9"
        }
    EOD, true))
    ->setFieldOptions($field_options)
    ->setSigningOptions($signing_options)
    ->setSigners($signers);

try \{
    $response = (new Dropbox\Sign\Api\SignatureRequestApi(config: $config))->signatureRequestSend(
        signature_request_send_request: $signature_request_send_request,
    );

    print_r($response);
} catch (Dropbox\Sign\ApiException $e) \{
    echo "Exception when calling SignatureRequestApi#signatureRequestSend: \{$e->getMessage()}";
}

````

```csharp C#
using System;
using System.Collections.Generic;
using System.IO;
using System.Text.Json;

using Dropbox.Sign.Api;
using Dropbox.Sign.Client;
using Dropbox.Sign.Model;

namespace Dropbox.SignSandbox;

public class SignatureRequestSendExample
{
    public static void Run()
    {
        var config = new Configuration();
        config.Username = "YOUR_API_KEY";
        // config.AccessToken = "YOUR_ACCESS_TOKEN";

        var fieldOptions = new SubFieldOptions(
            dateFormat: SubFieldOptions.DateFormatEnum.DD_MM_YYYY
        );

        var signingOptions = new SubSigningOptions(
            defaultType: SubSigningOptions.DefaultTypeEnum.Draw,
            draw: true,
            phone: false,
            type: true,
            upload: true,
            force_advanced_signature_details: false,
        );

        var signers1 = new SubSignatureRequestSigner(
            name: "Jack",
            emailAddress: "jack@example.com",
            order: 0
        );

        var signers2 = new SubSignatureRequestSigner(
            name: "Jill",
            emailAddress: "jill@example.com",
            order: 1
        );

        var signers = new List<SubSignatureRequestSigner>
        {
            signers1,
            signers2,
        };

        var signatureRequestSendRequest = new SignatureRequestSendRequest(
            message: "Please sign this NDA and then we can discuss more. Let me know if you\nhave any questions.",
            subject: "The NDA we talked about",
            testMode: true,
            title: "NDA with Acme Co.",
            ccEmailAddresses: [
                "lawyer1@dropboxsign.com",
                "lawyer2@dropboxsign.com",
            ],
            files: new List<Stream>
            {
                new FileStream(
                    path: "./example_signature_request.pdf",
                    mode: FileMode.Open
                ),
            },
            metadata: JsonSerializer.Deserialize<Dictionary<string, object>>("""
                {
                    "custom_id": 1234,
                    "custom_text": "NDA #9"
                }
            """),
            fieldOptions: fieldOptions,
            signingOptions: signingOptions,
            signers: signers
        );

        try
        {
            var response = new SignatureRequestApi(config).SignatureRequestSend(
                signatureRequestSendRequest: signatureRequestSendRequest
            );

            Console.WriteLine(response);
        }
        catch (ApiException e)
        {
            Console.WriteLine("Exception when calling SignatureRequestApi#SignatureRequestSend: " + e.Message);
            Console.WriteLine("Status Code: " + e.ErrorCode);
            Console.WriteLine(e.StackTrace);
        }
    }
}

```

```typescript TypeScript
import * as fs from 'fs';
import api from "@dropbox/sign"
import models from "@dropbox/sign"

const apiCaller = new api.SignatureRequestApi();
apiCaller.username = "YOUR_API_KEY";
// apiCaller.accessToken = "YOUR_ACCESS_TOKEN";

const fieldOptions: models.SubFieldOptions = {
  dateFormat: models.SubFieldOptions.DateFormatEnum.DdMmYyyy,
};

const signingOptions: models.SubSigningOptions = {
  defaultType: models.SubSigningOptions.DefaultTypeEnum.Draw,
  draw: true,
  phone: false,
  type: true,
  upload: true,
  force_advanced_signature_details: false,
};

const signers1: models.SubSignatureRequestSigner = {
  name: "Jack",
  emailAddress: "jack@example.com",
  order: 0,
};

const signers2: models.SubSignatureRequestSigner = {
  name: "Jill",
  emailAddress: "jill@example.com",
  order: 1,
};

const signers = [
  signers1,
  signers2,
];

const signatureRequestSendRequest: models.SignatureRequestSendRequest = {
  message: "Please sign this NDA and then we can discuss more. Let me know if you\nhave any questions.",
  subject: "The NDA we talked about",
  testMode: true,
  title: "NDA with Acme Co.",
  ccEmailAddresses: [
    "lawyer1@dropboxsign.com",
    "lawyer2@dropboxsign.com",
  ],
  files: [
    fs.createReadStream("./example_signature_request.pdf"),
  ],
  metadata: {
    "custom_id": 1234,
    "custom_text": "NDA #9"
  },
  fieldOptions: fieldOptions,
  signingOptions: signingOptions,
  signers: signers,
};

apiCaller.signatureRequestSend(
  signatureRequestSendRequest,
).then(response => {
  console.log(response.body);
}).catch(error => {
  console.log("Exception when calling SignatureRequestApi#signatureRequestSend:");
  console.log(error.body);
});

```

```java Java
package com.dropbox.sign_sandbox;

import com.dropbox.sign.ApiException;
import com.dropbox.sign.Configuration;
import com.dropbox.sign.api.*;
import com.dropbox.sign.auth.*;
import com.dropbox.sign.JSON;
import com.dropbox.sign.model.*;

import java.io.File;
import java.math.BigDecimal;
import java.time.LocalDate;
import java.time.OffsetDateTime;
import java.util.ArrayList;
import java.util.List;
import java.util.Map;

public class SignatureRequestSendExample
{
    public static void main(String[] args)
    {
        var config = Configuration.getDefaultApiClient();
        ((HttpBasicAuth) config.getAuthentication("api_key")).setUsername("YOUR_API_KEY");
        // ((HttpBearerAuth) config.getAuthentication("oauth2")).setBearerToken("YOUR_ACCESS_TOKEN");

        var fieldOptions = new SubFieldOptions();
        fieldOptions.dateFormat(SubFieldOptions.DateFormatEnum.DD_MM_YYYY);

        var signingOptions = new SubSigningOptions();
        signingOptions.defaultType(SubSigningOptions.DefaultTypeEnum.DRAW);
        signingOptions.draw(true);
        signingOptions.phone(false);
        signingOptions.type(true);
        signingOptions.upload(true);
        signingOptions.forceAdvancedSignatureDetails(false);

        var signers1 = new SubSignatureRequestSigner();
        signers1.name("Jack");
        signers1.emailAddress("jack@example.com");
        signers1.order(0);

        var signers2 = new SubSignatureRequestSigner();
        signers2.name("Jill");
        signers2.emailAddress("jill@example.com");
        signers2.order(1);

        var signers = new ArrayList<SubSignatureRequestSigner>(List.of (
            signers1,
            signers2
        ));

        var signatureRequestSendRequest = new SignatureRequestSendRequest();
        signatureRequestSendRequest.message("Please sign this NDA and then we can discuss more. Let me know if you\nhave any questions.");
        signatureRequestSendRequest.subject("The NDA we talked about");
        signatureRequestSendRequest.testMode(true);
        signatureRequestSendRequest.title("NDA with Acme Co.");
        signatureRequestSendRequest.ccEmailAddresses(List.of (
            "lawyer1@dropboxsign.com",
            "lawyer2@dropboxsign.com"
        ));
        signatureRequestSendRequest.files(List.of (
            new File("./example_signature_request.pdf")
        ));
        signatureRequestSendRequest.metadata(JSON.deserialize("""
            {
                "custom_id": 1234,
                "custom_text": "NDA #9"
            }
        """, Map.class));
        signatureRequestSendRequest.fieldOptions(fieldOptions);
        signatureRequestSendRequest.signingOptions(signingOptions);
        signatureRequestSendRequest.signers(signers);

        try
        {
            var response = new SignatureRequestApi(config).signatureRequestSend(
                signatureRequestSendRequest
            );

            System.out.println(response);
        } catch (ApiException e) {
            System.err.println("Exception when calling SignatureRequestApi#signatureRequestSend");
            System.err.println("Status code: " + e.getCode());
            System.err.println("Reason: " + e.getResponseBody());
            System.err.println("Response headers: " + e.getResponseHeaders());
            e.printStackTrace();
        }
    }
}

```

```ruby Ruby
require "json"
require "dropbox-sign"

Dropbox::Sign.configure do |config|
    config.username = "YOUR_API_KEY"
    # config.access_token = "YOUR_ACCESS_TOKEN"
end

field_options = Dropbox::Sign::SubFieldOptions.new
field_options.date_format = "DD - MM - YYYY"

signing_options = Dropbox::Sign::SubSigningOptions.new
signing_options.default_type = "draw"
signing_options.draw = true
signing_options.phone = false
signing_options.type = true
signing_options.upload = true
signing_options.force_advanced_signature_details = false

signers_1 = Dropbox::Sign::SubSignatureRequestSigner.new
signers_1.name = "Jack"
signers_1.email_address = "jack@example.com"
signers_1.order = 0

signers_2 = Dropbox::Sign::SubSignatureRequestSigner.new
signers_2.name = "Jill"
signers_2.email_address = "jill@example.com"
signers_2.order = 1

signers = [
    signers_1,
    signers_2,
]

signature_request_send_request = Dropbox::Sign::SignatureRequestSendRequest.new
signature_request_send_request.message = "Please sign this NDA and then we can discuss more. Let me know if you\nhave any questions."
signature_request_send_request.subject = "The NDA we talked about"
signature_request_send_request.test_mode = true
signature_request_send_request.title = "NDA with Acme Co."
signature_request_send_request.cc_email_addresses = [
    "lawyer1@dropboxsign.com",
    "lawyer2@dropboxsign.com",
]
signature_request_send_request.files = [
    File.new("./example_signature_request.pdf", "r"),
]
signature_request_send_request.metadata = JSON.parse(\<<-EOD
    {
        "custom_id": 1234,
        "custom_text": "NDA #9"
    }
    EOD
)
signature_request_send_request.field_options = field_options
signature_request_send_request.signing_options = signing_options
signature_request_send_request.signers = signers

begin
    response = Dropbox::Sign::SignatureRequestApi.new.signature_request_send(
        signature_request_send_request,
    )

    p response
rescue Dropbox::Sign::ApiError => e
    puts "Exception when calling SignatureRequestApi#signature_request_send: #{e}"
end

```

```python Python
import json
from datetime import date, datetime
from pprint import pprint

from dropbox_sign import ApiClient, ApiException, Configuration, api, models

configuration = Configuration(
    username="YOUR_API_KEY",
    # access_token="YOUR_ACCESS_TOKEN",
)

with ApiClient(configuration) as api_client:
    field_options = models.SubFieldOptions(
        date_format="DD - MM - YYYY",
    )

    signing_options = models.SubSigningOptions(
        default_type="draw",
        draw=True,
        phone=False,
        type=True,
        upload=True,
        force_advanced_signature_details=False,
    )

    signers_1 = models.SubSignatureRequestSigner(
        name="Jack",
        email_address="jack@example.com",
        order=0,
    )

    signers_2 = models.SubSignatureRequestSigner(
        name="Jill",
        email_address="jill@example.com",
        order=1,
    )

    signers = [
        signers_1,
        signers_2,
    ]

    signature_request_send_request = models.SignatureRequestSendRequest(
        message="Please sign this NDA and then we can discuss more. Let me know if you\nhave any questions.",
        subject="The NDA we talked about",
        test_mode=True,
        title="NDA with Acme Co.",
        cc_email_addresses=[
            "lawyer1@dropboxsign.com",
            "lawyer2@dropboxsign.com",
        ],
        files=[
            open("./example_signature_request.pdf", "rb").read(),
        ],
        metadata=json.loads("""
            {
                "custom_id": 1234,
                "custom_text": "NDA #9"
            }
        """),
        field_options=field_options,
        signing_options=signing_options,
        signers=signers,
    )

    try:
        response = api.SignatureRequestApi(api_client).signature_request_send(
            signature_request_send_request=signature_request_send_request,
        )

        pprint(response)
    except ApiException as e:
        print("Exception when calling SignatureRequestApi#signature_request_send: %s\n" % e)

```

```curl cURL
curl -X POST 'https://api.hellosign.com/v3/signature_request/send' \
  -u 'YOUR_API_KEY:' \
  -F 'files[0]=@mutual-NDA-example.pdf' \
  -F 'title=NDA with Acme Co.' \
  -F 'subject=The NDA we talked about' \
  -F 'message=Please sign this NDA and then we can discuss more. Let me know if you have any questions.' \
  -F 'signers[0][email_address]=jack@example.com' \
  -F 'signers[0][name]=Jack' \
  -F 'signers[0][order]=0' \
  -F 'signers[1][email_address]=jill@example.com' \
  -F 'signers[1][name]=Jill' \
  -F 'signers[1][order]=1' \
  -F 'cc_email_addresses[]=lawyer1@dropboxsign.com' \
  -F 'cc_email_addresses[]=lawyer2@dropboxsign.com' \
  -F 'metadata[custom_id]=1234' \
  -F 'metadata[custom_text]=NDA #9' \
  -F 'signing_options[draw]=1' \
  -F 'signing_options[type]=1' \
  -F 'signing_options[upload]=1' \
  -F 'signing_options[phone]=1' \
  -F 'signing_options[default_type]=draw' \
  -F 'signing_options[force_advanced_signature_details]=0' \
  -F 'field_options[date_format]=DD - MM - YYYY' \
  -F 'test_mode=1'

```

```go Send Signature Request
package main

import (
	"fmt"
	"net/http"
	"io"
)

func main() {

	url := "https://api.hellosign.com/v3/signature_request/send"

	req, _ := http.NewRequest("POST", url, nil)

	req.SetBasicAuth("<apiKey>", "")
	req.Header.Add("Content-Type", "application/json")

	res, _ := http.DefaultClient.Do(req)

	defer res.Body.Close()
	body, _ := io.ReadAll(res.Body)

	fmt.Println(res)
	fmt.Println(string(body))

}
```

````swift Send Signature Request
import Foundation

let credentials = Data("<apiKey>:".utf8).base64EncodedString()

let headers = [
  "Authorization": "Basic \(credentials)",
  "Content-Type": "application/json"
]

let request = NSMutableURLRequest(url: NSURL(string: "https://api.hellosign.com/v3/signature_request/send")! as URL,
                                        cachePolicy: .useProtocolCachePolicy,
                                    timeoutInterval: 10.0)
request.httpMethod = "POST"
request.allHTTPHeaderFields = headers

let session = URLSession.shared
let dataTask = session.dataTask(with: request as URLRequest, completionHandler: \{ (data, response, error) -> Void in
  if (error != nil) {
    print(error as Any)
  } else {
    let httpResponse = response as? HTTPURLResponse
    print(httpResponse)
  }
})

dataTask.resume()
```ieving Signature Status

There are 2 ways get the status of a document. The preferred method is to provide a callback url which we'll post events to. The option to poll the API is also available but it's impractical in most situations since signers may take a while to view and sign your documents.

**Webhooks (preferred)**

Read our documentation about [Dropbox Sign Events](/docs/guides/events-and-callbacks/overview) to get a better understanding of how webhooks work with your account and apps.

**Polling**

<Warning title="Important" icon="fa-light fa-circle-exclamation">
If you poll, any frequency you choose has disadvantages, either having to make thousands of requests per signature request over a day or two or making fewer requests and having more time pass between the signature request completion and your system finding out about it. Webhooks solve both of these problems.
</Warning>

**Checking the status of a Signature Request**
<CodeBlock maxLines={0}>

```cURL cURL
curl -X GET 'https://api.hellosign.com/v3/signature_request/{signature_request_id}' \
  -u 'YOUR_API_KEY:'
````

```php PHP maxLines=0
<?php

namespace Dropbox\SignSandbox;

require_once __DIR__ . '/../vendor/autoload.php';

use SplFileObject;
use Dropbox;

$config = Dropbox\Sign\Configuration::getDefaultConfiguration();
$config->setUsername("YOUR_API_KEY");
// $config->setAccessToken("YOUR_ACCESS_TOKEN");

try \{
    $response = (new Dropbox\Sign\Api\SignatureRequestApi(config: $config))->signatureRequestGet(
        signature_request_id: "fa5c8a0b0f492d768749333ad6fcc214c111e967",
    );

    print_r($response);
} catch (Dropbox\Sign\ApiException $e) \{
    echo "Exception when calling SignatureRequestApi#signatureRequestGet: \{$e->getMessage()}";
}

```

```csharp C# maxLines=0
using System;
using System.Collections.Generic;
using System.IO;
using System.Text.Json;

using Dropbox.Sign.Api;
using Dropbox.Sign.Client;
using Dropbox.Sign.Model;

namespace Dropbox.SignSandbox;

public class SignatureRequestGetExample
{
    public static void Run()
    {
        var config = new Configuration();
        config.Username = "YOUR_API_KEY";
        // config.AccessToken = "YOUR_ACCESS_TOKEN";

        try
        {
            var response = new SignatureRequestApi(config).SignatureRequestGet(
                signatureRequestId: "fa5c8a0b0f492d768749333ad6fcc214c111e967"
            );

            Console.WriteLine(response);
        }
        catch (ApiException e)
        {
            Console.WriteLine("Exception when calling SignatureRequestApi#SignatureRequestGet: " + e.Message);
            Console.WriteLine("Status Code: " + e.ErrorCode);
            Console.WriteLine(e.StackTrace);
        }
    }
}

```

```typescript TypeScript
import * as fs from 'fs';
import api from "@dropbox/sign"
import models from "@dropbox/sign"

const apiCaller = new api.SignatureRequestApi();
apiCaller.username = "YOUR_API_KEY";
// apiCaller.accessToken = "YOUR_ACCESS_TOKEN";

apiCaller.signatureRequestGet(
  "fa5c8a0b0f492d768749333ad6fcc214c111e967", // signatureRequestId
).then(response => {
  console.log(response.body);
}).catch(error => {
  console.log("Exception when calling SignatureRequestApi#signatureRequestGet:");
  console.log(error.body);
});
```

```java Java
package com.dropbox.sign_sandbox;

import com.dropbox.sign.ApiException;
import com.dropbox.sign.Configuration;
import com.dropbox.sign.api.*;
import com.dropbox.sign.auth.*;
import com.dropbox.sign.JSON;
import com.dropbox.sign.model.*;

import java.io.File;
import java.math.BigDecimal;
import java.time.LocalDate;
import java.time.OffsetDateTime;
import java.util.ArrayList;
import java.util.List;
import java.util.Map;

public class SignatureRequestGetExample
{
    public static void main(String[] args)
    {
        var config = Configuration.getDefaultApiClient();
        ((HttpBasicAuth) config.getAuthentication("api_key")).setUsername("YOUR_API_KEY");
        // ((HttpBearerAuth) config.getAuthentication("oauth2")).setBearerToken("YOUR_ACCESS_TOKEN");

        try
        {
            var response = new SignatureRequestApi(config).signatureRequestGet(
                "fa5c8a0b0f492d768749333ad6fcc214c111e967" // signatureRequestId
            );

            System.out.println(response);
        } catch (ApiException e) {
            System.err.println("Exception when calling SignatureRequestApi#signatureRequestGet");
            System.err.println("Status code: " + e.getCode());
            System.err.println("Reason: " + e.getResponseBody());
            System.err.println("Response headers: " + e.getResponseHeaders());
            e.printStackTrace();
        }
    }
}

```

```ruby Ruby
require "json"
require "dropbox-sign"

Dropbox::Sign.configure do |config|
    config.username = "YOUR_API_KEY"
    # config.access_token = "YOUR_ACCESS_TOKEN"
end

begin
    response = Dropbox::Sign::SignatureRequestApi.new.signature_request_get(
        "fa5c8a0b0f492d768749333ad6fcc214c111e967", # signature_request_id
    )

    p response
rescue Dropbox::Sign::ApiError => e
    puts "Exception when calling SignatureRequestApi#signature_request_get: #{e}"
end

```

```python Python
import json
from datetime import date, datetime
from pprint import pprint

from dropbox_sign import ApiClient, ApiException, Configuration, api, models

configuration = Configuration(
    username="YOUR_API_KEY",
    # access_token="YOUR_ACCESS_TOKEN",
)

with ApiClient(configuration) as api_client:
    try:
        response = api.SignatureRequestApi(api_client).signature_request_get(
            signature_request_id="fa5c8a0b0f492d768749333ad6fcc214c111e967",
        )

        pprint(response)
    except ApiException as e:
        print("Exception when calling SignatureRequestApi#signature_request_get: %s\n" % e)
```

\</CodeBlock>

## Retrieving Documents

The Dropbox Sign API can be used to download files (documents) in several different formats. Those formats include:

* A binary file
* A hyperlink to a downloadable file
* A data uri (base64 encoded string)

### Download Files

You can either download a single PDF document or separate pages in a zip file. Either option will contain all the signatures and information that signers have added so far.

```cURL cURL
curl -X GET 'https://api.hellosign.com/v3/signature_request/files/{signature_request_id}?file_type=pdf' \
  -u 'YOUR_API_KEY:' \
  --output downloaded_document.pdf

```

```php PHP
<?php

namespace Dropbox\SignSandbox;

require_once __DIR__ . '/../vendor/autoload.php';

use SplFileObject;
use Dropbox;

$config = Dropbox\Sign\Configuration::getDefaultConfiguration();
$config->setUsername("YOUR_API_KEY");
// $config->setAccessToken("YOUR_ACCESS_TOKEN");

try \{
    $response = (new Dropbox\Sign\Api\SignatureRequestApi(config: $config))->signatureRequestFiles(
        signature_request_id: "fa5c8a0b0f492d768749333ad6fcc214c111e967",
        file_type: "pdf",
    );

    copy($response->getRealPath(), __DIR__ . '/file_response');
} catch (Dropbox\Sign\ApiException $e) \{
    echo "Exception when calling SignatureRequestApi#signatureRequestFiles: \{$e->getMessage()}";
}

```

```csharp C#
using System;
using System.Collections.Generic;
using System.IO;
using System.Text.Json;

using Dropbox.Sign.Api;
using Dropbox.Sign.Client;
using Dropbox.Sign.Model;

namespace Dropbox.SignSandbox;

public class SignatureRequestFilesExample
{
    public static void Run()
    {
        var config = new Configuration();
        config.Username = "YOUR_API_KEY";
        // config.AccessToken = "YOUR_ACCESS_TOKEN";

        try
        {
            var response = new SignatureRequestApi(config).SignatureRequestFiles(
                signatureRequestId: "fa5c8a0b0f492d768749333ad6fcc214c111e967",
                fileType: "pdf"
            );
            var fileStream = File.Create("./file_response");
            response.Seek(0, SeekOrigin.Begin);
            response.CopyTo(fileStream);
            fileStream.Close();
        }
        catch (ApiException e)
        {
            Console.WriteLine("Exception when calling SignatureRequestApi#SignatureRequestFiles: " + e.Message);
            Console.WriteLine("Status Code: " + e.ErrorCode);
            Console.WriteLine(e.StackTrace);
        }
    }
}

```

```typescript TypeScript
import * as fs from 'fs';
import api from "@dropbox/sign"
import models from "@dropbox/sign"

const apiCaller = new api.SignatureRequestApi();
apiCaller.username = "YOUR_API_KEY";
// apiCaller.accessToken = "YOUR_ACCESS_TOKEN";

apiCaller.signatureRequestFiles(
  "fa5c8a0b0f492d768749333ad6fcc214c111e967", // signatureRequestId
  "pdf", // fileType
).then(response => {
  fs.createWriteStream('./file_response').write(response.body);
}).catch(error => {
  console.log("Exception when calling SignatureRequestApi#signatureRequestFiles:");
  console.log(error.body);
});

```

```java Java
package com.dropbox.sign_sandbox;

import com.dropbox.sign.ApiException;
import com.dropbox.sign.Configuration;
import com.dropbox.sign.api.*;
import com.dropbox.sign.auth.*;
import com.dropbox.sign.JSON;
import com.dropbox.sign.model.*;

import java.io.File;
import java.math.BigDecimal;
import java.time.LocalDate;
import java.time.OffsetDateTime;
import java.util.ArrayList;
import java.util.List;
import java.util.Map;

public class SignatureRequestFilesExample
{
    public static void main(String[] args)
    {
        var config = Configuration.getDefaultApiClient();
        ((HttpBasicAuth) config.getAuthentication("api_key")).setUsername("YOUR_API_KEY");
        // ((HttpBearerAuth) config.getAuthentication("oauth2")).setBearerToken("YOUR_ACCESS_TOKEN");

        try
        {
            var response = new SignatureRequestApi(config).signatureRequestFiles(
                "fa5c8a0b0f492d768749333ad6fcc214c111e967", // signatureRequestId
                "pdf" // fileType
            );
            response.renameTo(new File("./file_response"));
        } catch (ApiException e) {
            System.err.println("Exception when calling SignatureRequestApi#signatureRequestFiles");
            System.err.println("Status code: " + e.getCode());
            System.err.println("Reason: " + e.getResponseBody());
            System.err.println("Response headers: " + e.getResponseHeaders());
            e.printStackTrace();
        }
    }
}

```

```ruby Ruby
require "json"
require "dropbox-sign"

Dropbox::Sign.configure do |config|
    config.username = "YOUR_API_KEY"
    # config.access_token = "YOUR_ACCESS_TOKEN"
end

begin
    response = Dropbox::Sign::SignatureRequestApi.new.signature_request_files(
        "fa5c8a0b0f492d768749333ad6fcc214c111e967", # signature_request_id
        {
            file_type: "pdf",
        },
    )

    FileUtils.cp(response.path, "./file_response")
rescue Dropbox::Sign::ApiError => e
    puts "Exception when calling SignatureRequestApi#signature_request_files: #{e}"
end

```

```python Python
import json
from datetime import date, datetime
from pprint import pprint

from dropbox_sign import ApiClient, ApiException, Configuration, api, models

configuration = Configuration(
    username="YOUR_API_KEY",
    # access_token="YOUR_ACCESS_TOKEN",
)

with ApiClient(configuration) as api_client:
    try:
        response = api.SignatureRequestApi(api_client).signature_request_files(
            signature_request_id="fa5c8a0b0f492d768749333ad6fcc214c111e967",
            file_type="pdf",
        )

        open("./file_response", "wb").write(response.read())
    except ApiException as e:
        print("Exception when calling SignatureRequestApi#signature_request_files: %s\n" % e)

```

### Download Files as Data Uri

```cURL cURL
curl -X GET 'https://api.hellosign.com/v3/signature_request/files_as_data_uri/{signature_request_id}' \
  -u 'YOUR_API_KEY:'
```

```php PHP
<?php

namespace Dropbox\SignSandbox;

require_once __DIR__ . '/../vendor/autoload.php';

use SplFileObject;
use Dropbox;

$config = Dropbox\Sign\Configuration::getDefaultConfiguration();
$config->setUsername("YOUR_API_KEY");
// $config->setAccessToken("YOUR_ACCESS_TOKEN");

try \{
    $response = (new Dropbox\Sign\Api\SignatureRequestApi(config: $config))->signatureRequestFilesAsDataUri(
        signature_request_id: "fa5c8a0b0f492d768749333ad6fcc214c111e967",
    );

    print_r($response);
} catch (Dropbox\Sign\ApiException $e) \{
    echo "Exception when calling SignatureRequestApi#signatureRequestFilesAsDataUri: \{$e->getMessage()}";
}

```

```csharp C#
using System;
using System.Collections.Generic;
using System.IO;
using System.Text.Json;

using Dropbox.Sign.Api;
using Dropbox.Sign.Client;
using Dropbox.Sign.Model;

namespace Dropbox.SignSandbox;

public class SignatureRequestFilesAsDataUriExample
{
    public static void Run()
    {
        var config = new Configuration();
        config.Username = "YOUR_API_KEY";
        // config.AccessToken = "YOUR_ACCESS_TOKEN";

        try
        {
            var response = new SignatureRequestApi(config).SignatureRequestFilesAsDataUri(
                signatureRequestId: "fa5c8a0b0f492d768749333ad6fcc214c111e967"
            );

            Console.WriteLine(response);
        }
        catch (ApiException e)
        {
            Console.WriteLine("Exception when calling SignatureRequestApi#SignatureRequestFilesAsDataUri: " + e.Message);
            Console.WriteLine("Status Code: " + e.ErrorCode);
            Console.WriteLine(e.StackTrace);
        }
    }
}

```

```typescript TypeScript
import * as fs from 'fs';
import api from "@dropbox/sign"
import models from "@dropbox/sign"

const apiCaller = new api.SignatureRequestApi();
apiCaller.username = "YOUR_API_KEY";
// apiCaller.accessToken = "YOUR_ACCESS_TOKEN";

apiCaller.signatureRequestFilesAsDataUri(
  "fa5c8a0b0f492d768749333ad6fcc214c111e967", // signatureRequestId
).then(response => {
  console.log(response.body);
}).catch(error => {
  console.log("Exception when calling SignatureRequestApi#signatureRequestFilesAsDataUri:");
  console.log(error.body);
});

```

```java Java
package com.dropbox.sign_sandbox;

import com.dropbox.sign.ApiException;
import com.dropbox.sign.Configuration;
import com.dropbox.sign.api.*;
import com.dropbox.sign.auth.*;
import com.dropbox.sign.JSON;
import com.dropbox.sign.model.*;

import java.io.File;
import java.math.BigDecimal;
import java.time.LocalDate;
import java.time.OffsetDateTime;
import java.util.ArrayList;
import java.util.List;
import java.util.Map;

public class SignatureRequestFilesAsDataUriExample
{
    public static void main(String[] args)
    {
        var config = Configuration.getDefaultApiClient();
        ((HttpBasicAuth) config.getAuthentication("api_key")).setUsername("YOUR_API_KEY");
        // ((HttpBearerAuth) config.getAuthentication("oauth2")).setBearerToken("YOUR_ACCESS_TOKEN");

        try
        {
            var response = new SignatureRequestApi(config).signatureRequestFilesAsDataUri(
                "fa5c8a0b0f492d768749333ad6fcc214c111e967" // signatureRequestId
            );

            System.out.println(response);
        } catch (ApiException e) {
            System.err.println("Exception when calling SignatureRequestApi#signatureRequestFilesAsDataUri");
            System.err.println("Status code: " + e.getCode());
            System.err.println("Reason: " + e.getResponseBody());
            System.err.println("Response headers: " + e.getResponseHeaders());
            e.printStackTrace();
        }
    }
}

```

```ruby Ruby
require "json"
require "dropbox-sign"

Dropbox::Sign.configure do |config|
    config.username = "YOUR_API_KEY"
    # config.access_token = "YOUR_ACCESS_TOKEN"
end

begin
    response = Dropbox::Sign::SignatureRequestApi.new.signature_request_files_as_data_uri(
        "fa5c8a0b0f492d768749333ad6fcc214c111e967", # signature_request_id
    )

    p response
rescue Dropbox::Sign::ApiError => e
    puts "Exception when calling SignatureRequestApi#signature_request_files_as_data_uri: #{e}"
end

```

```python Python
import json
from datetime import date, datetime
from pprint import pprint

from dropbox_sign import ApiClient, ApiException, Configuration, api, models

configuration = Configuration(
    username="YOUR_API_KEY",
    # access_token="YOUR_ACCESS_TOKEN",
)

with ApiClient(configuration) as api_client:
    try:
        response = api.SignatureRequestApi(api_client).signature_request_files_as_data_uri(
            signature_request_id="fa5c8a0b0f492d768749333ad6fcc214c111e967",
        )

        pprint(response)
    except ApiException as e:
        print("Exception when calling SignatureRequestApi#signature_request_files_as_data_uri: %s\n" % e)

```

### Download Files as File Url

```cURL cURL
curl -X GET 'https://api.hellosign.com/v3/signature_request/files_as_file_url/{signature_request_id}' \
  -u 'YOUR_API_KEY:'
```

```php PHP
<?php

namespace Dropbox\SignSandbox;

require_once __DIR__ . '/../vendor/autoload.php';

use SplFileObject;
use Dropbox;

$config = Dropbox\Sign\Configuration::getDefaultConfiguration();
$config->setUsername("YOUR_API_KEY");
// $config->setAccessToken("YOUR_ACCESS_TOKEN");

try \{
    $response = (new Dropbox\Sign\Api\SignatureRequestApi(config: $config))->signatureRequestFilesAsFileUrl(
        signature_request_id: "fa5c8a0b0f492d768749333ad6fcc214c111e967",
        force_download: 1,
    );

    print_r($response);
} catch (Dropbox\Sign\ApiException $e) \{
    echo "Exception when calling SignatureRequestApi#signatureRequestFilesAsFileUrl: \{$e->getMessage()}";
}

```

```csharp C#
using System;
using System.Collections.Generic;
using System.IO;
using System.Text.Json;

using Dropbox.Sign.Api;
using Dropbox.Sign.Client;
using Dropbox.Sign.Model;

namespace Dropbox.SignSandbox;

public class SignatureRequestFilesAsFileUrlExample
{
    public static void Run()
    {
        var config = new Configuration();
        config.Username = "YOUR_API_KEY";
        // config.AccessToken = "YOUR_ACCESS_TOKEN";

        try
        {
            var response = new SignatureRequestApi(config).SignatureRequestFilesAsFileUrl(
                signatureRequestId: "fa5c8a0b0f492d768749333ad6fcc214c111e967",
                forceDownload: 1
            );

            Console.WriteLine(response);
        }
        catch (ApiException e)
        {
            Console.WriteLine("Exception when calling SignatureRequestApi#SignatureRequestFilesAsFileUrl: " + e.Message);
            Console.WriteLine("Status Code: " + e.ErrorCode);
            Console.WriteLine(e.StackTrace);
        }
    }
}
```

```typescript TypeScript
import * as fs from 'fs';
import api from "@dropbox/sign"
import models from "@dropbox/sign"

const apiCaller = new api.SignatureRequestApi();
apiCaller.username = "YOUR_API_KEY";
// apiCaller.accessToken = "YOUR_ACCESS_TOKEN";

apiCaller.signatureRequestFilesAsFileUrl(
  "fa5c8a0b0f492d768749333ad6fcc214c111e967", // signatureRequestId
  1, // forceDownload
).then(response => {
  console.log(response.body);
}).catch(error => {
  console.log("Exception when calling SignatureRequestApi#signatureRequestFilesAsFileUrl:");
  console.log(error.body);
});

```

```java Java
package com.dropbox.sign_sandbox;

import com.dropbox.sign.ApiException;
import com.dropbox.sign.Configuration;
import com.dropbox.sign.api.*;
import com.dropbox.sign.auth.*;
import com.dropbox.sign.JSON;
import com.dropbox.sign.model.*;

import java.io.File;
import java.math.BigDecimal;
import java.time.LocalDate;
import java.time.OffsetDateTime;
import java.util.ArrayList;
import java.util.List;
import java.util.Map;

public class SignatureRequestFilesAsFileUrlExample
{
    public static void main(String[] args)
    {
        var config = Configuration.getDefaultApiClient();
        ((HttpBasicAuth) config.getAuthentication("api_key")).setUsername("YOUR_API_KEY");
        // ((HttpBearerAuth) config.getAuthentication("oauth2")).setBearerToken("YOUR_ACCESS_TOKEN");

        try
        {
            var response = new SignatureRequestApi(config).signatureRequestFilesAsFileUrl(
                "fa5c8a0b0f492d768749333ad6fcc214c111e967", // signatureRequestId
                1 // forceDownload
            );

            System.out.println(response);
        } catch (ApiException e) {
            System.err.println("Exception when calling SignatureRequestApi#signatureRequestFilesAsFileUrl");
            System.err.println("Status code: " + e.getCode());
            System.err.println("Reason: " + e.getResponseBody());
            System.err.println("Response headers: " + e.getResponseHeaders());
            e.printStackTrace();
        }
    }
}
```

```ruby Ruby
require "json"
require "dropbox-sign"

Dropbox::Sign.configure do |config|
    config.username = "YOUR_API_KEY"
    # config.access_token = "YOUR_ACCESS_TOKEN"
end

begin
    response = Dropbox::Sign::SignatureRequestApi.new.signature_request_files_as_file_url(
        "fa5c8a0b0f492d768749333ad6fcc214c111e967", # signature_request_id
        {
            force_download: 1,
        },
    )

    p response
rescue Dropbox::Sign::ApiError => e
    puts "Exception when calling SignatureRequestApi#signature_request_files_as_file_url: #{e}"
end
```

```python Python
import json
from datetime import date, datetime
from pprint import pprint

from dropbox_sign import ApiClient, ApiException, Configuration, api, models

configuration = Configuration(
    username="YOUR_API_KEY",
    # access_token="YOUR_ACCESS_TOKEN",
)

with ApiClient(configuration) as api_client:
    try:
        response = api.SignatureRequestApi(api_client).signature_request_files_as_file_url(
            signature_request_id="fa5c8a0b0f492d768749333ad6fcc214c111e967",
            force_download=1,
        )

        pprint(response)
    except ApiException as e:
        print("Exception when calling SignatureRequestApi#signature_request_files_as_file_url: %s\n" % e)
```