curl --request DELETE \
--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.delete(url, json=payload, headers=headers)
print(response.text)const options = {
method: 'DELETE',
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 => "DELETE",
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("DELETE", 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.delete("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::Delete.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
}Remove a contract approver
Removes an approver, identified by email, from the contract, as long as the next send has not happened yet. Returns the approvers of the contract after the change. See How contract approvers work.
curl --request DELETE \
--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.delete(url, json=payload, headers=headers)
print(response.text)const options = {
method: 'DELETE',
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 => "DELETE",
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("DELETE", 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.delete("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::Delete.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 removed
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