Esign Envelopes

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

FIELDTYPEDESCRIPTION
filter[status]stringComma-separated statuses to include (draft, sent, completed, declined, voided, expired).
pageinteger1-based page number.
per_pageintegerPage 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

STATUSDESCRIPTION
200 OKa page of envelopes
401 Unauthorizedmissing or invalid API key
402 Payment Requiredthe team's plan doesn't include the E-Signature module
403 Forbiddenthe 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

FIELDTYPEDESCRIPTION
idstring · requiredEnvelope 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

STATUSDESCRIPTION
200 OKthe envelope
404 Not Foundno 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

FIELDTYPEDESCRIPTION
idstring · requiredEnvelope id.

Request body

FIELDTYPEDESCRIPTION
reasonstringOptional 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

STATUSDESCRIPTION
204 No Contentdeleted
404 Not Foundno 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

FIELDTYPEDESCRIPTION
idstring · requiredSource 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

STATUSDESCRIPTION
201 Createdcreated — the new duplicate envelope
404 Not Foundno 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

FIELDTYPEDESCRIPTION
idstring · requiredSource envelope id.

Request body

FIELDTYPEDESCRIPTION
templateobject
template.namestringTemplate name. Defaults to the envelope subject + " (Template)".
template.descriptionstringOptional 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

STATUSDESCRIPTION
201 Createdcreated — the new template
404 Not Foundno such envelope in this team
422 Unprocessable Contenttemplate 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

FIELDTYPEDESCRIPTION
idstring · requiredEnvelope 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

STATUSDESCRIPTION
200 OKsent — returns the updated envelope
404 Not Foundno such envelope in this team
422 Unprocessable Contentenvelope is not ready to be sent (envelope_not_ready)

Was this article helpful?