curl --request POST \
--url https://api.tomorro.com/v2/contracts/{id}/approvers \
--header 'Content-Type: application/json' \
--header 'x-api-key: <api-key>' \
--data '
{
"email": "manager@acme.com"
}
'import requests
url = "https://api.tomorro.com/v2/contracts/{id}/approvers"
payload = { "email": "manager@acme.com" }
headers = {
"x-api-key": "<api-key>",
"Content-Type": "application/json"
}
response = requests.post(url, json=payload, headers=headers)
print(response.text)const options = {
method: 'POST',
headers: {'x-api-key': '<api-key>', 'Content-Type': 'application/json'},
body: JSON.stringify({email: 'manager@acme.com'})
};
fetch('https://api.tomorro.com/v2/contracts/{id}/approvers', 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.tomorro.com/v2/contracts/{id}/approvers",
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([
'email' => 'manager@acme.com'
]),
CURLOPT_HTTPHEADER => [
"Content-Type: application/json",
"x-api-key: <api-key>"
],
]);
$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.tomorro.com/v2/contracts/{id}/approvers"
payload := strings.NewReader("{\n \"email\": \"manager@acme.com\"\n}")
req, _ := http.NewRequest("POST", url, payload)
req.Header.Add("x-api-key", "<api-key>")
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.tomorro.com/v2/contracts/{id}/approvers")
.header("x-api-key", "<api-key>")
.header("Content-Type", "application/json")
.body("{\n \"email\": \"manager@acme.com\"\n}")
.asString();require 'uri'
require 'net/http'
url = URI("https://api.tomorro.com/v2/contracts/{id}/approvers")
http = Net::HTTP.new(url.host, url.port)
http.use_ssl = true
request = Net::HTTP::Post.new(url)
request["x-api-key"] = '<api-key>'
request["Content-Type"] = 'application/json'
request.body = "{\n \"email\": \"manager@acme.com\"\n}"
response = http.request(request)
puts response.read_body{
"additionalApprovers": [
{
"memberId": "550e8400-e29b-41d4-a716-446655440000",
"email": "manager@acme.com",
"firstname": "Morgan",
"lastname": "Lee"
}
],
"customApproversAllowed": true
}Add a contract approver
Adds one organization member, identified by email, to the approvers of the contract. Call it once per approver: each call adds to the list and never replaces it. The member must be an admin or a manager. The approvers apply to the next send only, for review or for signature: add them again to get an approval at a later send. Accepted on draft or negotiating contracts whose contract type does not apply its own approval workflow before review. Returns the approvers of the contract after the change. See How contract approvers work.
curl --request POST \
--url https://api.tomorro.com/v2/contracts/{id}/approvers \
--header 'Content-Type: application/json' \
--header 'x-api-key: <api-key>' \
--data '
{
"email": "manager@acme.com"
}
'import requests
url = "https://api.tomorro.com/v2/contracts/{id}/approvers"
payload = { "email": "manager@acme.com" }
headers = {
"x-api-key": "<api-key>",
"Content-Type": "application/json"
}
response = requests.post(url, json=payload, headers=headers)
print(response.text)const options = {
method: 'POST',
headers: {'x-api-key': '<api-key>', 'Content-Type': 'application/json'},
body: JSON.stringify({email: 'manager@acme.com'})
};
fetch('https://api.tomorro.com/v2/contracts/{id}/approvers', 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.tomorro.com/v2/contracts/{id}/approvers",
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([
'email' => 'manager@acme.com'
]),
CURLOPT_HTTPHEADER => [
"Content-Type: application/json",
"x-api-key: <api-key>"
],
]);
$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.tomorro.com/v2/contracts/{id}/approvers"
payload := strings.NewReader("{\n \"email\": \"manager@acme.com\"\n}")
req, _ := http.NewRequest("POST", url, payload)
req.Header.Add("x-api-key", "<api-key>")
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.tomorro.com/v2/contracts/{id}/approvers")
.header("x-api-key", "<api-key>")
.header("Content-Type", "application/json")
.body("{\n \"email\": \"manager@acme.com\"\n}")
.asString();require 'uri'
require 'net/http'
url = URI("https://api.tomorro.com/v2/contracts/{id}/approvers")
http = Net::HTTP.new(url.host, url.port)
http.use_ssl = true
request = Net::HTTP::Post.new(url)
request["x-api-key"] = '<api-key>'
request["Content-Type"] = 'application/json'
request.body = "{\n \"email\": \"manager@acme.com\"\n}"
response = http.request(request)
puts response.read_body{
"additionalApprovers": [
{
"memberId": "550e8400-e29b-41d4-a716-446655440000",
"email": "manager@acme.com",
"firstname": "Morgan",
"lastname": "Lee"
}
],
"customApproversAllowed": true
}Authorizations
API key for authentication. Get your key at https://app.tomorro.com/settings/integrations?integration=api-key
Path Parameters
The unique identifier (UUID) of the contract
"550e8400-e29b-41d4-a716-446655440000"
Body
Email of the organization member. The email identifies one member, so a name is never accepted. To add an approver, the member must be an admin or a manager.
"manager@acme.com"
Response
Approver added
Custom additional approvers configured on the contract preferences.
Show child attributes
Show child attributes
[
{
"memberId": "550e8400-e29b-41d4-a716-446655440000",
"email": "manager@acme.com",
"firstname": "Morgan",
"lastname": "Lee"
}
]
True when no type-level BEFORE_SEND_FOR_REVIEW workflow applies, so custom approvers can be added (same gate as the product UI).
true