← Files DocuSealARCHIVED FILE

skills/docuseal-code/references/api/send-documents-for-signature-via-api.md

10.9 KB · Oct 8, 2026 · 00:04 UTC

↓ Download file

See the change to this file →

# Send documents for signature via API

## Send default document signing request email

Prerequisites: Visit [DocuSeal API Console](https://console.docuseal.com/api) to obtain your API key.

Template ID: Identify the template ID you want to use for the form.

`POST` request to `https://api.docuseal.com/submissions`. Include the obtained API key in the headers. Specify the `template_id` and submitter details:

#### email

Pass email address of each individual party in the document signing process.

#### role

Specifies the designated role of each participant (e.g., 'Director', 'Contractor'). Pass role names defined in the template form.

#### order

Pass `'preserved'` order to send email only to the first signer party, second party will receive an email after the document is signed by the first party. Pass `'random'` to send emails to all parties right away to allow them to sign in random order.

Upon a successful request, specified submitters of the document will receive an email invitation to click on the link to fill and sign the document.

#### JS

```
const docuseal = require("@docuseal/api");

docuseal.configure({ key: "API_KEY", url: "https://api.docuseal.com" });

const submission = await docuseal.createSubmission({
  template_id: 1000001,
  send_email: false,
  submitters: [
    {
      email: 'john.doe@example.com',
      role: 'Director'
    },
    {
      email: 'roe.moe@example.com',
      role: 'Contractor'
    }
  ]
});
```

#### TypeScript

```
import docuseal from "@docuseal/api";

docuseal.configure({ key: "API_KEY", url: "https://api.docuseal.com" });

const submission = await docuseal.createSubmission({
  template_id: 1000001,
  send_email: false,
  submitters: [
    {
      email: 'john.doe@example.com',
      role: 'Director'
    },
    {
      email: 'roe.moe@example.com',
      role: 'Contractor'
    }
  ]
});
```

#### Python

```
from docuseal import docuseal

docuseal.key = "API_KEY"
docuseal.url = "https://api.docuseal.com"

submission = docuseal.create_submission({
  "template_id": 1000001,
  "send_email": False,
  "submitters": [
    {
      "email": "john.doe@example.com",
      "role": "Director"
    },
    {
      "email": "roe.moe@example.com",
      "role": "Contractor"
    }
  ]
})
```

#### Ruby

```
require "docuseal"

Docuseal.key = ENV["DOCUSEAL_API_KEY"]
Docuseal.url = "https://api.docuseal.com"

submission = Docuseal.create_submission({
  template_id: 1000001,
  send_email: false,
  submitters: [
    {
      email: 'john.doe@example.com',
      role: 'Director'
    },
    {
      email: 'roe.moe@example.com',
      role: 'Contractor'
    }
  ]
})
```

#### PHP

```
$docuseal = new DocusealApi('API_KEY', 'https://api.docuseal.com');

$submission = $docuseal->createSubmission([
  'template_id' => 1000001,
  'send_email' => false,
  'submitters' => [
    [
      'email' => 'john.doe@example.com',
      'role' => 'Director'
    ],
    [
      'email' => 'roe.moe@example.com',
      'role' => 'Contractor'
    ]
  ]
]);
```

#### Java

```
var client = new DocusealClient("API_KEY", "https://api.docuseal.com");

var submission = client.createSubmission(CreateSubmissionParams.builder()
    .templateId(1000001)
    .submitters(List.of(
      CreateSubmissionSubmitterParams.builder()
        .email("john.doe@example.com")
        .role("Director")
        .build(),
      CreateSubmissionSubmitterParams.builder()
        .email("roe.moe@example.com")
        .role("Contractor")
        .build()))
    .sendEmail(false)
    .build());
```

#### C#

```
var client = new DocusealClient("API_KEY", "https://api.docuseal.com");

var submission = await client.CreateSubmissionAsync(new CreateSubmissionParams
{
    TemplateId = 1000001,
    SendEmail = false,
    Submitters = [
        new CreateSubmissionSubmitterParams
        {
            Email = "john.doe@example.com",
            Role = "Director"
        },
        new CreateSubmissionSubmitterParams
        {
            Email = "roe.moe@example.com",
            Role = "Contractor"
        },
    ]
});
```

#### Go

```
ds := docuseal.NewClient(
	"API_KEY",
	docuseal.WithBaseURL("https://api.docuseal.com"),
)

submission, err := ds.CreateSubmission(context.Background(), &docuseal.CreateSubmissionParams{
	TemplateID: 1000001,
	SendEmail: docuseal.Bool(false),
	Submitters: []*docuseal.CreateSubmissionSubmitterParams{
		{
			Email: "john.doe@example.com",
			Role: "Director",
		},
		{
			Email: "roe.moe@example.com",
			Role: "Contractor",
		},
	},
})
```

#### cURL

```
curl -X POST https://api.docuseal.com/submissions \
  --header "X-Auth-Token: YOUR_API_KEY" \
  --header "Content-Type: application/json" \
  --data '{
    "template_id": 1000001,
    "send_email": false,
    "submitters": [
      { "email": "john.doe@example.com", "role": "Director" },
      { "email": "roe.moe@example.com", "role": "Contractor" }
    ]
  }'
```

## Send custom document signing request email message

`POST` request to `https://api.docuseal.com/submissions`. Include the obtained API key in the headers.  
 Specify the `message` and submitter details:

#### subject

Custom email message subject line.

#### body

Custom email message body, can contain the following variables:

| Variable | Description |
| --- | --- |
| `{{template.name}}` | Name of the template document form |
| `{{template.id}}` | ID of the template document form |
| `{{submitter.link}}` | Signing form link |
| `{{account.name}}` | Your company name |
| `{{sender.name}}` | Full name of the user requesting signature |
| `{{sender.first_name}}` | First name of the user requesting signature |
| `{{submitter.email}}` | Signer (aka Submitter) email address |
| `{{submitter.name}}` | Signer (aka Submitter) full name |
| `{{submitter.first_name}}` | Signer (aka Submitter) first name |
| `{{submitter.FieldName}}` | Signer (aka Submitter) field value |
| `{{submitter.slug}}` | Unique key which is used to open the embedded signing form |
| `{{submission.submitters}}` | A list of submitter emails |
| `{{submission.expire_at}}` | Submission expiration date and time |
| `{{submitters[1].email}}` | Email of the first party |
| `{{submitters[1].name}}` | Name of the first party |
| `{{submitters[1].FieldName}}` | Form field value of the first party |

Upon a successful request, specified submitters of the document will receive an email invitation with a custom message.

#### JS

```
const docuseal = require("@docuseal/api");

docuseal.configure({ key: "API_KEY", url: "https://api.docuseal.com" });

const submission = await docuseal.createSubmission({
  template_id: 1000001,
  message: {
    subject: 'Custom Subject',
    body: 'Custom Message {{submitter.link}}'
  },
  submitters: [
    {
      email: 'john.doe@example.com',
      role: 'Director'
    },
    {
      email: 'roe.moe@example.com',
      role: 'Contractor'
    }
  ]
});
```

#### TypeScript

```
import docuseal from "@docuseal/api";

docuseal.configure({ key: "API_KEY", url: "https://api.docuseal.com" });

const submission = await docuseal.createSubmission({
  template_id: 1000001,
  message: {
    subject: 'Custom Subject',
    body: 'Custom Message {{submitter.link}}'
  },
  submitters: [
    {
      email: 'john.doe@example.com',
      role: 'Director'
    },
    {
      email: 'roe.moe@example.com',
      role: 'Contractor'
    }
  ]
});
```

#### Python

```
from docuseal import docuseal

docuseal.key = "API_KEY"
docuseal.url = "https://api.docuseal.com"

submission = docuseal.create_submission({
  "template_id": 1000001,
  "message": {
    "subject": "Custom Subject",
    "body": "Custom Message {{submitter.link}}"
  },
  "submitters": [
    {
      "email": "john.doe@example.com",
      "role": "Director"
    },
    {
      "email": "roe.moe@example.com",
      "role": "Contractor"
    }
  ]
})
```

#### Ruby

```
require "docuseal"

Docuseal.key = ENV["DOCUSEAL_API_KEY"]
Docuseal.url = "https://api.docuseal.com"

submission = Docuseal.create_submission({
  template_id: 1000001,
  message: {
    subject: 'Custom Subject',
    body: 'Custom Message {{submitter.link}}'
  },
  submitters: [
    {
      email: 'john.doe@example.com',
      role: 'Director'
    },
    {
      email: 'roe.moe@example.com',
      role: 'Contractor'
    }
  ]
})
```

#### PHP

```
$docuseal = new DocusealApi('API_KEY', 'https://api.docuseal.com');

$submission = $docuseal->createSubmission([
  'template_id' => 1000001,
  'message' => [
    'subject' => 'Custom Subject',
    'body' => 'Custom Message {{submitter.link}}'
  ],
  'submitters' => [
    [
      'email' => 'john.doe@example.com',
      'role' => 'Director'
    ],
    [
      'email' => 'roe.moe@example.com',
      'role' => 'Contractor'
    ]
  ]
]);
```

#### Java

```
var client = new DocusealClient("API_KEY", "https://api.docuseal.com");

var submission = client.createSubmission(CreateSubmissionParams.builder()
    .templateId(1000001)
    .submitters(List.of(
      CreateSubmissionSubmitterParams.builder()
        .email("john.doe@example.com")
        .role("Director")
        .build(),
      CreateSubmissionSubmitterParams.builder()
        .email("roe.moe@example.com")
        .role("Contractor")
        .build()))
    .message(CreateSubmissionMessageParams.builder()
      .subject("Custom Subject")
      .body("Custom Message {{submitter.link}}")
      .build())
    .build());
```

#### C#

```
var client = new DocusealClient("API_KEY", "https://api.docuseal.com");

var submission = await client.CreateSubmissionAsync(new CreateSubmissionParams
{
    TemplateId = 1000001,
    Message = new CreateSubmissionMessageParams
    {
        Subject = "Custom Subject",
        Body = "Custom Message {{submitter.link}}"
    },
    Submitters = [
        new CreateSubmissionSubmitterParams
        {
            Email = "john.doe@example.com",
            Role = "Director"
        },
        new CreateSubmissionSubmitterParams
        {
            Email = "roe.moe@example.com",
            Role = "Contractor"
        },
    ]
});
```

#### Go

```
ds := docuseal.NewClient(
	"API_KEY",
	docuseal.WithBaseURL("https://api.docuseal.com"),
)

submission, err := ds.CreateSubmission(context.Background(), &docuseal.CreateSubmissionParams{
	TemplateID: 1000001,
	Message: &docuseal.CreateSubmissionMessageParams{
		Subject: "Custom Subject",
		Body: "Custom Message {{submitter.link}}",
	},
	Submitters: []*docuseal.CreateSubmissionSubmitterParams{
		{
			Email: "john.doe@example.com",
			Role: "Director",
		},
		{
			Email: "roe.moe@example.com",
			Role: "Contractor",
		},
	},
})
```

#### cURL

```
curl -X POST https://api.docuseal.com/submissions \
  --header "X-Auth-Token: YOUR_API_KEY" \
  --header "Content-Type: application/json" \
  --data'{
    "template_id": 1000001,
    "message": {
      "subject": "Custom Subject",
      "body": "Custom Message {{submitter.link}}"
    },
    "submitters": [
      { "email": "john.doe@example.com", "role": "Director" },
      { "email": "roe.moe@example.com", "role": "Contractor" }
    ]
  }'
```

Learn more
- [REST API Reference](https://www.docuseal.com/docs/api#create-a-submission)

SHA-256: 37ecb1ff6be2b519f5ceb9addc3a5c5d7da7c9a22acae1457c805c5fe47a9099