curl --request POST \
--url https://api.gonitro.dev/sign/envelopes \
--header 'Authorization: Bearer <token>' \
--header 'Content-Type: application/json' \
--data '
{
"name": "<string>"
}
'import requests
url = "https://api.gonitro.dev/sign/envelopes"
payload = { "name": "<string>" }
headers = {
"Authorization": "Bearer <token>",
"Content-Type": "application/json"
}
response = requests.post(url, json=payload, headers=headers)
print(response.text)const options = {
method: 'POST',
headers: {Authorization: 'Bearer <token>', 'Content-Type': 'application/json'},
body: JSON.stringify({name: '<string>'})
};
fetch('https://api.gonitro.dev/sign/envelopes', options)
.then(res => res.json())
.then(res => console.log(res))
.catch(err => console.error(err));<?php
$curl = curl_init();
curl_setopt_array($curl, [
CURLOPT_URL => "https://api.gonitro.dev/sign/envelopes",
CURLOPT_RETURNTRANSFER => true,
CURLOPT_ENCODING => "",
CURLOPT_MAXREDIRS => 10,
CURLOPT_TIMEOUT => 30,
CURLOPT_HTTP_VERSION => CURL_HTTP_VERSION_1_1,
CURLOPT_CUSTOMREQUEST => "POST",
CURLOPT_POSTFIELDS => json_encode([
'name' => '<string>'
]),
CURLOPT_HTTPHEADER => [
"Authorization: Bearer <token>",
"Content-Type: application/json"
],
]);
$response = curl_exec($curl);
$err = curl_error($curl);
curl_close($curl);
if ($err) {
echo "cURL Error #:" . $err;
} else {
echo $response;
}package main
import (
"fmt"
"strings"
"net/http"
"io"
)
func main() {
url := "https://api.gonitro.dev/sign/envelopes"
payload := strings.NewReader("{\n \"name\": \"<string>\"\n}")
req, _ := http.NewRequest("POST", url, payload)
req.Header.Add("Authorization", "Bearer <token>")
req.Header.Add("Content-Type", "application/json")
res, _ := http.DefaultClient.Do(req)
defer res.Body.Close()
body, _ := io.ReadAll(res.Body)
fmt.Println(string(body))
}HttpResponse<String> response = Unirest.post("https://api.gonitro.dev/sign/envelopes")
.header("Authorization", "Bearer <token>")
.header("Content-Type", "application/json")
.body("{\n \"name\": \"<string>\"\n}")
.asString();require 'uri'
require 'net/http'
url = URI("https://api.gonitro.dev/sign/envelopes")
http = Net::HTTP.new(url.host, url.port)
http.use_ssl = true
request = Net::HTTP::Post.new(url)
request["Authorization"] = 'Bearer <token>'
request["Content-Type"] = 'application/json'
request.body = "{\n \"name\": \"<string>\"\n}"
response = http.request(request)
puts response.read_body{
"ID": "3c90c3cc-0d44-4b50-8888-8dd25736052a",
"createdAt": "2023-11-07T05:31:56Z",
"lastModifiedAt": "2023-11-07T05:31:56Z",
"name": "<string>",
"status": "drafted",
"mode": "sequential",
"notification": {
"subject": "<string>",
"body": "<string>"
},
"notificationsManagedBy": "nitro"
}{
"type": "https://developers.gonitro.com/docs/build-nitro/errors#400-bad-request",
"title": "Bad Request",
"status": 400,
"detail": "Request validation failed",
"instance": "/sign/envelopes",
"validation_errors": {
"name": "must not be blank"
}
}{
"type": "https://developers.gonitro.com/docs/build-nitro/errors#401-unauthorized",
"title": "Unauthorized",
"status": 401,
"detail": "Missing or invalid Authorization header",
"instance": "/sign/envelopes"
}Create Envelope
The Create Envelope endpoint creates a new sign envelope in Nitro.
A sign envelope is the container for signature processes in Nitro. It can include assets such as documents, participants, signature fields, and configuration settings that define how the signing process should behave. With the Create Envelope endpoint, you will create an empty sign envelope you can later add assets to.
curl --request POST \
--url https://api.gonitro.dev/sign/envelopes \
--header 'Authorization: Bearer <token>' \
--header 'Content-Type: application/json' \
--data '
{
"name": "<string>"
}
'import requests
url = "https://api.gonitro.dev/sign/envelopes"
payload = { "name": "<string>" }
headers = {
"Authorization": "Bearer <token>",
"Content-Type": "application/json"
}
response = requests.post(url, json=payload, headers=headers)
print(response.text)const options = {
method: 'POST',
headers: {Authorization: 'Bearer <token>', 'Content-Type': 'application/json'},
body: JSON.stringify({name: '<string>'})
};
fetch('https://api.gonitro.dev/sign/envelopes', options)
.then(res => res.json())
.then(res => console.log(res))
.catch(err => console.error(err));<?php
$curl = curl_init();
curl_setopt_array($curl, [
CURLOPT_URL => "https://api.gonitro.dev/sign/envelopes",
CURLOPT_RETURNTRANSFER => true,
CURLOPT_ENCODING => "",
CURLOPT_MAXREDIRS => 10,
CURLOPT_TIMEOUT => 30,
CURLOPT_HTTP_VERSION => CURL_HTTP_VERSION_1_1,
CURLOPT_CUSTOMREQUEST => "POST",
CURLOPT_POSTFIELDS => json_encode([
'name' => '<string>'
]),
CURLOPT_HTTPHEADER => [
"Authorization: Bearer <token>",
"Content-Type: application/json"
],
]);
$response = curl_exec($curl);
$err = curl_error($curl);
curl_close($curl);
if ($err) {
echo "cURL Error #:" . $err;
} else {
echo $response;
}package main
import (
"fmt"
"strings"
"net/http"
"io"
)
func main() {
url := "https://api.gonitro.dev/sign/envelopes"
payload := strings.NewReader("{\n \"name\": \"<string>\"\n}")
req, _ := http.NewRequest("POST", url, payload)
req.Header.Add("Authorization", "Bearer <token>")
req.Header.Add("Content-Type", "application/json")
res, _ := http.DefaultClient.Do(req)
defer res.Body.Close()
body, _ := io.ReadAll(res.Body)
fmt.Println(string(body))
}HttpResponse<String> response = Unirest.post("https://api.gonitro.dev/sign/envelopes")
.header("Authorization", "Bearer <token>")
.header("Content-Type", "application/json")
.body("{\n \"name\": \"<string>\"\n}")
.asString();require 'uri'
require 'net/http'
url = URI("https://api.gonitro.dev/sign/envelopes")
http = Net::HTTP.new(url.host, url.port)
http.use_ssl = true
request = Net::HTTP::Post.new(url)
request["Authorization"] = 'Bearer <token>'
request["Content-Type"] = 'application/json'
request.body = "{\n \"name\": \"<string>\"\n}"
response = http.request(request)
puts response.read_body{
"ID": "3c90c3cc-0d44-4b50-8888-8dd25736052a",
"createdAt": "2023-11-07T05:31:56Z",
"lastModifiedAt": "2023-11-07T05:31:56Z",
"name": "<string>",
"status": "drafted",
"mode": "sequential",
"notification": {
"subject": "<string>",
"body": "<string>"
},
"notificationsManagedBy": "nitro"
}{
"type": "https://developers.gonitro.com/docs/build-nitro/errors#400-bad-request",
"title": "Bad Request",
"status": 400,
"detail": "Request validation failed",
"instance": "/sign/envelopes",
"validation_errors": {
"name": "must not be blank"
}
}{
"type": "https://developers.gonitro.com/docs/build-nitro/errors#401-unauthorized",
"title": "Unauthorized",
"status": 401,
"detail": "Missing or invalid Authorization header",
"instance": "/sign/envelopes"
}Authorizations
Bearer authentication header of the form Bearer <token>, where <token> is your auth token.
Body
The Envelope's name. It doesn't have to be unique.
1The Signing Mode in an enum that defines the signing order. It has two possible values:
sequential: Participants receive notifications one at a time, in the order they were added to the envelope. Each new notification is triggered once the previous participant has completed their signing.parallel: All participants are notified at the same time and can sign the documents in the envelope independently, without waiting for others.
sequential, parallel The notification object defines the email sent to participants when an envelope is delivered for signing. It contains a subject and a body as nested parameters, and both fields support dynamic variables.
Required unless notificationsManagedBy is sender. It is optional in the schema because the requirement depends on notificationsManagedBy:
notificationsManagedByomitted ornitro:notificationis required, with a non-emptysubjectandbody.notificationsManagedByissender:notificationmust be omitted. Nitro sends no email for this envelope, so the copy would never be rendered. Sending both is rejected with a400.
Dynamic Variables
You can personalize notification emails by referencing dynamic variables in the subject or body.
Available variables:
envelope_name: The name of the envelope being signed.
sender_name_or_email: The sender’s name, or their email address if the name is not available.
Syntax:
To reference the variables, wrap them with $() in your message. Example: $(envelope_name)
notification object example:
{
"notification": {
"subject": "$(sender_name_or_email) is requesting your signature",
"body": "Hi,\nPlease sign the $(envelope_name)\nThank you,\n$(sender_name_or_email)"
}
}
Show child attributes
Show child attributes
Who notifies the participants of this envelope. Two values are accepted:
nitro(default): Nitro sends the participant notification emails, as it always has.sender: Nitro sends no automated email notifications to signers or CC recipients — including signature requests, reminders and signature completion notices. You distribute the signing links yourself, using the List Signer Signing URLs by Envelope ID endpoint and the envelope webhooks.
When set to sender, the notification object must be omitted — its subject and body would never be rendered, so sending both is rejected with a 400. When it is omitted or set to nitro, the notification object is required.
This setting is only available to API applications.
By enabling this setting, you assume full responsibility for notifying signers and CC recipients of pending signature requests, deadlines, and completed documents through your own communication channels. Nitro Sign will not notify these participants on your behalf under any circumstances while this setting is enabled.
Depending on your use case and jurisdiction, failure to adequately notify signers may affect the enforceability of the resulting electronic signature or your compliance obligations under applicable e-signature laws (e.g., ESIGN Act, UETA, eIDAS). We strongly recommend consulting your legal or compliance team before enabling this setting in production.
This setting requires SMS authentication to be configured for all signers on the envelope, as an additional safeguard against unauthorized access to signing links. Sending the envelope for signing fails if any signer is missing it.
nitro, sender Response
When an envelope is created you will get a unique ID for it. You can add assets to the envelope later by referencing its unique ID using other endpoints in this API.
A unique UUIDv4 string that identifies the envelope in the Nitro system.
UTC timestamp indicating when the envelope was created.
UTC timestamp indicating the last time the envelope was updated. Matches createdAt at the time of creation.
The name of the envelope.
The internal status of the envelope. Defaults to drafted on creation.
drafted, sent, processing, sealed, rejected, cancelled, deleted Signing mode for the envelope.
sequential, parallel Notification settings for the envelope. Omitted while notificationsManagedBy is sender: Nitro renders no copy for such an envelope, so it exposes none.
Show child attributes
Show child attributes
Who notifies the participants of this envelope: nitro or sender. Defaults to nitro.
nitro, sender