Upload contract signed version
curl --request POST \
--url https://api.tomorro.com/v2/contracts/{id}/signed-version \
--header 'Content-Type: application/json' \
--header 'x-api-key: <api-key>' \
--data '
{
"files": [
{
"key": "signedFiles/550e8400-e29b-41d4-a716-446655440000/files/b3b7bd7b-85f9-49e7-843d-71f656df5ca5",
"name": "nda-signed.pdf",
"contentType": "application/pdf"
}
],
"signatureDate": "2026-09-07T10:15:00.000Z"
}
'import requests
url = "https://api.tomorro.com/v2/contracts/{id}/signed-version"
payload = {
"files": [
{
"key": "signedFiles/550e8400-e29b-41d4-a716-446655440000/files/b3b7bd7b-85f9-49e7-843d-71f656df5ca5",
"name": "nda-signed.pdf",
"contentType": "application/pdf"
}
],
"signatureDate": "2026-09-07T10:15:00.000Z"
}
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({
files: [
{
key: 'signedFiles/550e8400-e29b-41d4-a716-446655440000/files/b3b7bd7b-85f9-49e7-843d-71f656df5ca5',
name: 'nda-signed.pdf',
contentType: 'application/pdf'
}
],
signatureDate: '2026-09-07T10:15:00.000Z'
})
};
fetch('https://api.tomorro.com/v2/contracts/{id}/signed-version', 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}/signed-version",
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([
'files' => [
[
'key' => 'signedFiles/550e8400-e29b-41d4-a716-446655440000/files/b3b7bd7b-85f9-49e7-843d-71f656df5ca5',
'name' => 'nda-signed.pdf',
'contentType' => 'application/pdf'
]
],
'signatureDate' => '2026-09-07T10:15:00.000Z'
]),
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}/signed-version"
payload := strings.NewReader("{\n \"files\": [\n {\n \"key\": \"signedFiles/550e8400-e29b-41d4-a716-446655440000/files/b3b7bd7b-85f9-49e7-843d-71f656df5ca5\",\n \"name\": \"nda-signed.pdf\",\n \"contentType\": \"application/pdf\"\n }\n ],\n \"signatureDate\": \"2026-09-07T10:15:00.000Z\"\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}/signed-version")
.header("x-api-key", "<api-key>")
.header("Content-Type", "application/json")
.body("{\n \"files\": [\n {\n \"key\": \"signedFiles/550e8400-e29b-41d4-a716-446655440000/files/b3b7bd7b-85f9-49e7-843d-71f656df5ca5\",\n \"name\": \"nda-signed.pdf\",\n \"contentType\": \"application/pdf\"\n }\n ],\n \"signatureDate\": \"2026-09-07T10:15:00.000Z\"\n}")
.asString();require 'uri'
require 'net/http'
url = URI("https://api.tomorro.com/v2/contracts/{id}/signed-version")
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 \"files\": [\n {\n \"key\": \"signedFiles/550e8400-e29b-41d4-a716-446655440000/files/b3b7bd7b-85f9-49e7-843d-71f656df5ca5\",\n \"name\": \"nda-signed.pdf\",\n \"contentType\": \"application/pdf\"\n }\n ],\n \"signatureDate\": \"2026-09-07T10:15:00.000Z\"\n}"
response = http.request(request)
puts response.read_bodyContracts document
Upload contract signed version
Marks the contract as signed from PDFs signed in a third-party tool: attaches them as the signed files, moves the contract to signed and stamps signatureDate, which also sets the start date when the contract type derives it from the signature date. Accepted from draft, negotiating, or signing when the signature was sent through a third-party tool. First call POST /files/upload-url once per PDF, PUT each file body to the returned URL, then call this endpoint with the returned keys.
POST
/
contracts
/
{id}
/
signed-version
Upload contract signed version
curl --request POST \
--url https://api.tomorro.com/v2/contracts/{id}/signed-version \
--header 'Content-Type: application/json' \
--header 'x-api-key: <api-key>' \
--data '
{
"files": [
{
"key": "signedFiles/550e8400-e29b-41d4-a716-446655440000/files/b3b7bd7b-85f9-49e7-843d-71f656df5ca5",
"name": "nda-signed.pdf",
"contentType": "application/pdf"
}
],
"signatureDate": "2026-09-07T10:15:00.000Z"
}
'import requests
url = "https://api.tomorro.com/v2/contracts/{id}/signed-version"
payload = {
"files": [
{
"key": "signedFiles/550e8400-e29b-41d4-a716-446655440000/files/b3b7bd7b-85f9-49e7-843d-71f656df5ca5",
"name": "nda-signed.pdf",
"contentType": "application/pdf"
}
],
"signatureDate": "2026-09-07T10:15:00.000Z"
}
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({
files: [
{
key: 'signedFiles/550e8400-e29b-41d4-a716-446655440000/files/b3b7bd7b-85f9-49e7-843d-71f656df5ca5',
name: 'nda-signed.pdf',
contentType: 'application/pdf'
}
],
signatureDate: '2026-09-07T10:15:00.000Z'
})
};
fetch('https://api.tomorro.com/v2/contracts/{id}/signed-version', 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}/signed-version",
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([
'files' => [
[
'key' => 'signedFiles/550e8400-e29b-41d4-a716-446655440000/files/b3b7bd7b-85f9-49e7-843d-71f656df5ca5',
'name' => 'nda-signed.pdf',
'contentType' => 'application/pdf'
]
],
'signatureDate' => '2026-09-07T10:15:00.000Z'
]),
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}/signed-version"
payload := strings.NewReader("{\n \"files\": [\n {\n \"key\": \"signedFiles/550e8400-e29b-41d4-a716-446655440000/files/b3b7bd7b-85f9-49e7-843d-71f656df5ca5\",\n \"name\": \"nda-signed.pdf\",\n \"contentType\": \"application/pdf\"\n }\n ],\n \"signatureDate\": \"2026-09-07T10:15:00.000Z\"\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}/signed-version")
.header("x-api-key", "<api-key>")
.header("Content-Type", "application/json")
.body("{\n \"files\": [\n {\n \"key\": \"signedFiles/550e8400-e29b-41d4-a716-446655440000/files/b3b7bd7b-85f9-49e7-843d-71f656df5ca5\",\n \"name\": \"nda-signed.pdf\",\n \"contentType\": \"application/pdf\"\n }\n ],\n \"signatureDate\": \"2026-09-07T10:15:00.000Z\"\n}")
.asString();require 'uri'
require 'net/http'
url = URI("https://api.tomorro.com/v2/contracts/{id}/signed-version")
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 \"files\": [\n {\n \"key\": \"signedFiles/550e8400-e29b-41d4-a716-446655440000/files/b3b7bd7b-85f9-49e7-843d-71f656df5ca5\",\n \"name\": \"nda-signed.pdf\",\n \"contentType\": \"application/pdf\"\n }\n ],\n \"signatureDate\": \"2026-09-07T10:15:00.000Z\"\n}"
response = http.request(request)
puts response.read_bodyAuthorizations
API key for authentication. Get your key at https://app.tomorro.com/settings/integrations?integration=api-key
Path Parameters
Body
application/json
Response
Contract signed