Base URL: https://api.cornerspot.net
Authentication: requests use a bearer token, for example Authorization: Bearer YOUR_API_KEY.
List envelopes
GET /c/api/v1/esign/envelopes
Returns a paginated list of the team's envelopes, newest first. Requires esign_read scope and the E-Signature module.
Query parameters
| FIELD | TYPE | DESCRIPTION |
|---|---|---|
filter[status] | string | Comma-separated statuses to include (draft, sent, completed, declined, voided, expired). |
page | integer | 1-based page number. |
per_page | integer | Page size (1–100, default 25). |
Code samples
curl --request GET \
--url 'https://api.cornerspot.net/c/api/v1/esign/envelopes' \
--header 'Authorization: Bearer YOUR_API_KEY'
const response = await fetch('https://api.cornerspot.net/c/api/v1/esign/envelopes', {
method: 'GET',
headers: {
'Authorization': 'Bearer YOUR_API_KEY'
}
});
const data = await response.json();
console.log(data);
// Node.js 18+ (native fetch)
const response = await fetch('https://api.cornerspot.net/c/api/v1/esign/envelopes', {
method: 'GET',
headers: {
'Authorization': 'Bearer YOUR_API_KEY'
}
});
if (!response.ok) {
throw new Error(`Request failed: ${response.status}`);
}
const data = await response.json();
console.log(data);
import json
import urllib.request
url = "https://api.cornerspot.net/c/api/v1/esign/envelopes"
headers = {
"Authorization": "Bearer YOUR_API_KEY",
}
request = urllib.request.Request(url, headers=headers, method="GET")
with urllib.request.urlopen(request) as response:
data = json.loads(response.read().decode("utf-8"))
print(data)
require "json"
require "net/http"
uri = URI("https://api.cornerspot.net/c/api/v1/esign/envelopes")
request = Net::HTTP::Get.new(uri)
request["Authorization"] = "Bearer YOUR_API_KEY"
response = Net::HTTP.start(uri.hostname, uri.port, use_ssl: uri.scheme == "https") do |http|
http.request(request)
end
puts JSON.parse(response.body)
<?php
$curl = curl_init();
curl_setopt_array($curl, [
CURLOPT_URL => 'https://api.cornerspot.net/c/api/v1/esign/envelopes',
CURLOPT_RETURNTRANSFER => true,
CURLOPT_CUSTOMREQUEST => 'GET',
CURLOPT_HTTPHEADER => [
'Authorization: Bearer YOUR_API_KEY',
],
]);
$response = curl_exec($curl);
curl_close($curl);
$data = json_decode($response, true);
print_r($data);
Responses
| STATUS | DESCRIPTION |
|---|---|
200 OK | a page of envelopes |
401 Unauthorized | missing or invalid API key |
402 Payment Required | the team's plan doesn't include the E-Signature module |
403 Forbidden | the key lacks the esign_read scope |
Get an envelope
GET /c/api/v1/esign/envelopes/{id}
Returns the full detail for a single envelope (documents, recipients, fields). Requires esign_read.
Path parameters
| FIELD | TYPE | DESCRIPTION |
|---|---|---|
id | string · required | Envelope id. |
Code samples
curl --request GET \
--url 'https://api.cornerspot.net/c/api/v1/esign/envelopes/1f2e3d4c-5b6a-4789-9c0d-1e2f3a4b5c6d' \
--header 'Authorization: Bearer YOUR_API_KEY'
const response = await fetch('https://api.cornerspot.net/c/api/v1/esign/envelopes/1f2e3d4c-5b6a-4789-9c0d-1e2f3a4b5c6d', {
method: 'GET',
headers: {
'Authorization': 'Bearer YOUR_API_KEY'
}
});
const data = await response.json();
console.log(data);
// Node.js 18+ (native fetch)
const response = await fetch('https://api.cornerspot.net/c/api/v1/esign/envelopes/1f2e3d4c-5b6a-4789-9c0d-1e2f3a4b5c6d', {
method: 'GET',
headers: {
'Authorization': 'Bearer YOUR_API_KEY'
}
});
if (!response.ok) {
throw new Error(`Request failed: ${response.status}`);
}
const data = await response.json();
console.log(data);
import json
import urllib.request
url = "https://api.cornerspot.net/c/api/v1/esign/envelopes/1f2e3d4c-5b6a-4789-9c0d-1e2f3a4b5c6d"
headers = {
"Authorization": "Bearer YOUR_API_KEY",
}
request = urllib.request.Request(url, headers=headers, method="GET")
with urllib.request.urlopen(request) as response:
data = json.loads(response.read().decode("utf-8"))
print(data)
require "json"
require "net/http"
uri = URI("https://api.cornerspot.net/c/api/v1/esign/envelopes/1f2e3d4c-5b6a-4789-9c0d-1e2f3a4b5c6d")
request = Net::HTTP::Get.new(uri)
request["Authorization"] = "Bearer YOUR_API_KEY"
response = Net::HTTP.start(uri.hostname, uri.port, use_ssl: uri.scheme == "https") do |http|
http.request(request)
end
puts JSON.parse(response.body)
<?php
$curl = curl_init();
curl_setopt_array($curl, [
CURLOPT_URL => 'https://api.cornerspot.net/c/api/v1/esign/envelopes/1f2e3d4c-5b6a-4789-9c0d-1e2f3a4b5c6d',
CURLOPT_RETURNTRANSFER => true,
CURLOPT_CUSTOMREQUEST => 'GET',
CURLOPT_HTTPHEADER => [
'Authorization: Bearer YOUR_API_KEY',
],
]);
$response = curl_exec($curl);
curl_close($curl);
$data = json_decode($response, true);
print_r($data);
Responses
| STATUS | DESCRIPTION |
|---|---|
200 OK | the envelope |
404 Not Found | no such envelope in this team |
Trash an envelope
DELETE /c/api/v1/esign/envelopes/{id}
Soft-deletes an envelope. Deal-linked envelopes go through the deal-unlink path. Returns 204 on success, 422 if the service reports a blocker. Requires esign_write.
Path parameters
| FIELD | TYPE | DESCRIPTION |
|---|---|---|
id | string · required | Envelope id. |
Request body
| FIELD | TYPE | DESCRIPTION |
|---|---|---|
reason | string | Optional human-readable deletion reason stored in the audit log. |
Code samples
curl --request DELETE \
--url 'https://api.cornerspot.net/c/api/v1/esign/envelopes/1f2e3d4c-5b6a-4789-9c0d-1e2f3a4b5c6d' \
--header 'Content-Type: application/json' \
--header 'Authorization: Bearer YOUR_API_KEY' \
--data '{
"reason": "string"
}'
const response = await fetch('https://api.cornerspot.net/c/api/v1/esign/envelopes/1f2e3d4c-5b6a-4789-9c0d-1e2f3a4b5c6d', {
method: 'DELETE',
headers: {
'Content-Type': 'application/json',
'Authorization': 'Bearer YOUR_API_KEY'
},
body: JSON.stringify({
"reason": "string"
})
});
const data = await response.json();
console.log(data);
// Node.js 18+ (native fetch)
const response = await fetch('https://api.cornerspot.net/c/api/v1/esign/envelopes/1f2e3d4c-5b6a-4789-9c0d-1e2f3a4b5c6d', {
method: 'DELETE',
headers: {
'Content-Type': 'application/json',
'Authorization': 'Bearer YOUR_API_KEY'
},
body: JSON.stringify({
"reason": "string"
})
});
if (!response.ok) {
throw new Error(`Request failed: ${response.status}`);
}
const data = await response.json();
console.log(data);
import json
import urllib.request
url = "https://api.cornerspot.net/c/api/v1/esign/envelopes/1f2e3d4c-5b6a-4789-9c0d-1e2f3a4b5c6d"
payload = json.dumps({
"reason": "string"
}).encode("utf-8")
headers = {
"Content-Type": "application/json",
"Authorization": "Bearer YOUR_API_KEY",
}
request = urllib.request.Request(url, data=payload, headers=headers, method="DELETE")
with urllib.request.urlopen(request) as response:
data = json.loads(response.read().decode("utf-8"))
print(data)
require "json"
require "net/http"
uri = URI("https://api.cornerspot.net/c/api/v1/esign/envelopes/1f2e3d4c-5b6a-4789-9c0d-1e2f3a4b5c6d")
request = Net::HTTP::Delete.new(uri)
request["Content-Type"] = "application/json"
request["Authorization"] = "Bearer YOUR_API_KEY"
request.body = JSON.generate({
"reason": "string"
})
response = Net::HTTP.start(uri.hostname, uri.port, use_ssl: uri.scheme == "https") do |http|
http.request(request)
end
puts JSON.parse(response.body)
<?php
$curl = curl_init();
curl_setopt_array($curl, [
CURLOPT_URL => 'https://api.cornerspot.net/c/api/v1/esign/envelopes/1f2e3d4c-5b6a-4789-9c0d-1e2f3a4b5c6d',
CURLOPT_RETURNTRANSFER => true,
CURLOPT_CUSTOMREQUEST => 'DELETE',
CURLOPT_HTTPHEADER => [
'Content-Type: application/json',
'Authorization: Bearer YOUR_API_KEY',
],
CURLOPT_POSTFIELDS => json_encode([
'reason' => 'string',
]),
]);
$response = curl_exec($curl);
curl_close($curl);
$data = json_decode($response, true);
print_r($data);
Responses
| STATUS | DESCRIPTION |
|---|---|
204 No Content | deleted |
404 Not Found | no such envelope in this team |
Duplicate an envelope
POST /c/api/v1/esign/envelopes/{id}/duplicate
Creates a deep copy of an envelope (documents, recipients, and fields) as a new draft. Requires esign_write.
Path parameters
| FIELD | TYPE | DESCRIPTION |
|---|---|---|
id | string · required | Source envelope id. |
Code samples
curl --request POST \
--url 'https://api.cornerspot.net/c/api/v1/esign/envelopes/1f2e3d4c-5b6a-4789-9c0d-1e2f3a4b5c6d/duplicate' \
--header 'Authorization: Bearer YOUR_API_KEY'
const response = await fetch('https://api.cornerspot.net/c/api/v1/esign/envelopes/1f2e3d4c-5b6a-4789-9c0d-1e2f3a4b5c6d/duplicate', {
method: 'POST',
headers: {
'Authorization': 'Bearer YOUR_API_KEY'
}
});
const data = await response.json();
console.log(data);
// Node.js 18+ (native fetch)
const response = await fetch('https://api.cornerspot.net/c/api/v1/esign/envelopes/1f2e3d4c-5b6a-4789-9c0d-1e2f3a4b5c6d/duplicate', {
method: 'POST',
headers: {
'Authorization': 'Bearer YOUR_API_KEY'
}
});
if (!response.ok) {
throw new Error(`Request failed: ${response.status}`);
}
const data = await response.json();
console.log(data);
import json
import urllib.request
url = "https://api.cornerspot.net/c/api/v1/esign/envelopes/1f2e3d4c-5b6a-4789-9c0d-1e2f3a4b5c6d/duplicate"
headers = {
"Authorization": "Bearer YOUR_API_KEY",
}
request = urllib.request.Request(url, headers=headers, method="POST")
with urllib.request.urlopen(request) as response:
data = json.loads(response.read().decode("utf-8"))
print(data)
require "json"
require "net/http"
uri = URI("https://api.cornerspot.net/c/api/v1/esign/envelopes/1f2e3d4c-5b6a-4789-9c0d-1e2f3a4b5c6d/duplicate")
request = Net::HTTP::Post.new(uri)
request["Authorization"] = "Bearer YOUR_API_KEY"
response = Net::HTTP.start(uri.hostname, uri.port, use_ssl: uri.scheme == "https") do |http|
http.request(request)
end
puts JSON.parse(response.body)
<?php
$curl = curl_init();
curl_setopt_array($curl, [
CURLOPT_URL => 'https://api.cornerspot.net/c/api/v1/esign/envelopes/1f2e3d4c-5b6a-4789-9c0d-1e2f3a4b5c6d/duplicate',
CURLOPT_RETURNTRANSFER => true,
CURLOPT_CUSTOMREQUEST => 'POST',
CURLOPT_HTTPHEADER => [
'Authorization: Bearer YOUR_API_KEY',
],
]);
$response = curl_exec($curl);
curl_close($curl);
$data = json_decode($response, true);
print_r($data);
Responses
| STATUS | DESCRIPTION |
|---|---|
201 Created | created — the new duplicate envelope |
404 Not Found | no such envelope in this team |
Save envelope as a template
POST /c/api/v1/esign/envelopes/{id}/save_as_template
Clones the envelope into a reusable template. The template.name defaults to "<subject> (Template)" when omitted. Requires esign_write.
Path parameters
| FIELD | TYPE | DESCRIPTION |
|---|---|---|
id | string · required | Source envelope id. |
Request body
| FIELD | TYPE | DESCRIPTION |
|---|---|---|
template | object | |
template.name | string | Template name. Defaults to the envelope subject + " (Template)". |
template.description | string | Optional description shown in the template library. |
Code samples
curl --request POST \
--url 'https://api.cornerspot.net/c/api/v1/esign/envelopes/1f2e3d4c-5b6a-4789-9c0d-1e2f3a4b5c6d/save_as_template' \
--header 'Content-Type: application/json' \
--header 'Authorization: Bearer YOUR_API_KEY' \
--data '{
"template": {
"name": "string",
"description": "string"
}
}'
const response = await fetch('https://api.cornerspot.net/c/api/v1/esign/envelopes/1f2e3d4c-5b6a-4789-9c0d-1e2f3a4b5c6d/save_as_template', {
method: 'POST',
headers: {
'Content-Type': 'application/json',
'Authorization': 'Bearer YOUR_API_KEY'
},
body: JSON.stringify({
"template": {
"name": "string",
"description": "string"
}
})
});
const data = await response.json();
console.log(data);
// Node.js 18+ (native fetch)
const response = await fetch('https://api.cornerspot.net/c/api/v1/esign/envelopes/1f2e3d4c-5b6a-4789-9c0d-1e2f3a4b5c6d/save_as_template', {
method: 'POST',
headers: {
'Content-Type': 'application/json',
'Authorization': 'Bearer YOUR_API_KEY'
},
body: JSON.stringify({
"template": {
"name": "string",
"description": "string"
}
})
});
if (!response.ok) {
throw new Error(`Request failed: ${response.status}`);
}
const data = await response.json();
console.log(data);
import json
import urllib.request
url = "https://api.cornerspot.net/c/api/v1/esign/envelopes/1f2e3d4c-5b6a-4789-9c0d-1e2f3a4b5c6d/save_as_template"
payload = json.dumps({
"template": {
"name": "string",
"description": "string"
}
}).encode("utf-8")
headers = {
"Content-Type": "application/json",
"Authorization": "Bearer YOUR_API_KEY",
}
request = urllib.request.Request(url, data=payload, headers=headers, method="POST")
with urllib.request.urlopen(request) as response:
data = json.loads(response.read().decode("utf-8"))
print(data)
require "json"
require "net/http"
uri = URI("https://api.cornerspot.net/c/api/v1/esign/envelopes/1f2e3d4c-5b6a-4789-9c0d-1e2f3a4b5c6d/save_as_template")
request = Net::HTTP::Post.new(uri)
request["Content-Type"] = "application/json"
request["Authorization"] = "Bearer YOUR_API_KEY"
request.body = JSON.generate({
"template": {
"name": "string",
"description": "string"
}
})
response = Net::HTTP.start(uri.hostname, uri.port, use_ssl: uri.scheme == "https") do |http|
http.request(request)
end
puts JSON.parse(response.body)
<?php
$curl = curl_init();
curl_setopt_array($curl, [
CURLOPT_URL => 'https://api.cornerspot.net/c/api/v1/esign/envelopes/1f2e3d4c-5b6a-4789-9c0d-1e2f3a4b5c6d/save_as_template',
CURLOPT_RETURNTRANSFER => true,
CURLOPT_CUSTOMREQUEST => 'POST',
CURLOPT_HTTPHEADER => [
'Content-Type: application/json',
'Authorization: Bearer YOUR_API_KEY',
],
CURLOPT_POSTFIELDS => json_encode([
'template' => [
'name' => 'string',
'description' => 'string',
],
]),
]);
$response = curl_exec($curl);
curl_close($curl);
$data = json_decode($response, true);
print_r($data);
Responses
| STATUS | DESCRIPTION |
|---|---|
201 Created | created — the new template |
404 Not Found | no such envelope in this team |
422 Unprocessable Content | template could not be created (e.g. validation failure) |
Send envelope for signature
POST /c/api/v1/esign/envelopes/{id}/send_for_signature
Transitions a draft envelope to sent, dispatching invitation emails to recipients. Validates send-readiness before sending: the envelope must be a draft, have ≥1 document, ≥1 signer with a required non-autofill field assigned, and (if routing is sequential) contiguous routing orders starting at 1. Returns 422 envelope_not_ready with an errors array describing what to fix. Requires esign_write.
Path parameters
| FIELD | TYPE | DESCRIPTION |
|---|---|---|
id | string · required | Envelope id. |
Code samples
curl --request POST \
--url 'https://api.cornerspot.net/c/api/v1/esign/envelopes/1f2e3d4c-5b6a-4789-9c0d-1e2f3a4b5c6d/send_for_signature' \
--header 'Authorization: Bearer YOUR_API_KEY'
const response = await fetch('https://api.cornerspot.net/c/api/v1/esign/envelopes/1f2e3d4c-5b6a-4789-9c0d-1e2f3a4b5c6d/send_for_signature', {
method: 'POST',
headers: {
'Authorization': 'Bearer YOUR_API_KEY'
}
});
const data = await response.json();
console.log(data);
// Node.js 18+ (native fetch)
const response = await fetch('https://api.cornerspot.net/c/api/v1/esign/envelopes/1f2e3d4c-5b6a-4789-9c0d-1e2f3a4b5c6d/send_for_signature', {
method: 'POST',
headers: {
'Authorization': 'Bearer YOUR_API_KEY'
}
});
if (!response.ok) {
throw new Error(`Request failed: ${response.status}`);
}
const data = await response.json();
console.log(data);
import json
import urllib.request
url = "https://api.cornerspot.net/c/api/v1/esign/envelopes/1f2e3d4c-5b6a-4789-9c0d-1e2f3a4b5c6d/send_for_signature"
headers = {
"Authorization": "Bearer YOUR_API_KEY",
}
request = urllib.request.Request(url, headers=headers, method="POST")
with urllib.request.urlopen(request) as response:
data = json.loads(response.read().decode("utf-8"))
print(data)
require "json"
require "net/http"
uri = URI("https://api.cornerspot.net/c/api/v1/esign/envelopes/1f2e3d4c-5b6a-4789-9c0d-1e2f3a4b5c6d/send_for_signature")
request = Net::HTTP::Post.new(uri)
request["Authorization"] = "Bearer YOUR_API_KEY"
response = Net::HTTP.start(uri.hostname, uri.port, use_ssl: uri.scheme == "https") do |http|
http.request(request)
end
puts JSON.parse(response.body)
<?php
$curl = curl_init();
curl_setopt_array($curl, [
CURLOPT_URL => 'https://api.cornerspot.net/c/api/v1/esign/envelopes/1f2e3d4c-5b6a-4789-9c0d-1e2f3a4b5c6d/send_for_signature',
CURLOPT_RETURNTRANSFER => true,
CURLOPT_CUSTOMREQUEST => 'POST',
CURLOPT_HTTPHEADER => [
'Authorization: Bearer YOUR_API_KEY',
],
]);
$response = curl_exec($curl);
curl_close($curl);
$data = json_decode($response, true);
print_r($data);
Responses
| STATUS | DESCRIPTION |
|---|---|
200 OK | sent — returns the updated envelope |
404 Not Found | no such envelope in this team |
422 Unprocessable Content | envelope is not ready to be sent (envelope_not_ready) |
