curl --request POST \
--url https://api.tomorro.com/v2/clauses \
--header 'Content-Type: application/json' \
--header 'x-api-key: <api-key>' \
--data '
{
"name": "Governing Law",
"description": "Standard governing law and jurisdiction wording",
"contentText": "This Agreement shall be governed by the laws of England and Wales.",
"language": "gb"
}
'import requests
url = "https://api.tomorro.com/v2/clauses"
payload = {
"name": "Governing Law",
"description": "Standard governing law and jurisdiction wording",
"contentText": "This Agreement shall be governed by the laws of England and Wales.",
"language": "gb"
}
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({
name: 'Governing Law',
description: 'Standard governing law and jurisdiction wording',
contentText: 'This Agreement shall be governed by the laws of England and Wales.',
language: 'gb'
})
};
fetch('https://api.tomorro.com/v2/clauses', 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/clauses",
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([
'name' => 'Governing Law',
'description' => 'Standard governing law and jurisdiction wording',
'contentText' => 'This Agreement shall be governed by the laws of England and Wales.',
'language' => 'gb'
]),
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/clauses"
payload := strings.NewReader("{\n \"name\": \"Governing Law\",\n \"description\": \"Standard governing law and jurisdiction wording\",\n \"contentText\": \"This Agreement shall be governed by the laws of England and Wales.\",\n \"language\": \"gb\"\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/clauses")
.header("x-api-key", "<api-key>")
.header("Content-Type", "application/json")
.body("{\n \"name\": \"Governing Law\",\n \"description\": \"Standard governing law and jurisdiction wording\",\n \"contentText\": \"This Agreement shall be governed by the laws of England and Wales.\",\n \"language\": \"gb\"\n}")
.asString();require 'uri'
require 'net/http'
url = URI("https://api.tomorro.com/v2/clauses")
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 \"name\": \"Governing Law\",\n \"description\": \"Standard governing law and jurisdiction wording\",\n \"contentText\": \"This Agreement shall be governed by the laws of England and Wales.\",\n \"language\": \"gb\"\n}"
response = http.request(request)
puts response.read_body{
"id": "550e8400-e29b-41d4-a716-446655440000",
"name": "Confidentiality",
"description": "Standard confidentiality clause",
"organizationId": "550e8400-e29b-41d4-a716-446655440000",
"content": [
{
"type": "paragraph",
"children": [
{
"text": "Clause content"
}
]
}
],
"contentText": "Clause content",
"listNumbering": null,
"translations": [
{
"language": "en",
"content": [
{
"type": "paragraph",
"children": [
{
"text": "Clause content"
}
]
}
],
"contentText": "Clause content",
"order": 0
}
],
"languages": [
"en",
"fr"
],
"createdAt": "2024-01-01T00:00:00.000Z",
"updatedAt": "2024-01-02T00:00:00.000Z"
}Create clause
Creates a Clause Library entry from name, description, and contentText (plain text or markdown). contentText is converted to Slate server-side (headings, marks, and lists preserved). Optional language defaults to the organization language.
curl --request POST \
--url https://api.tomorro.com/v2/clauses \
--header 'Content-Type: application/json' \
--header 'x-api-key: <api-key>' \
--data '
{
"name": "Governing Law",
"description": "Standard governing law and jurisdiction wording",
"contentText": "This Agreement shall be governed by the laws of England and Wales.",
"language": "gb"
}
'import requests
url = "https://api.tomorro.com/v2/clauses"
payload = {
"name": "Governing Law",
"description": "Standard governing law and jurisdiction wording",
"contentText": "This Agreement shall be governed by the laws of England and Wales.",
"language": "gb"
}
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({
name: 'Governing Law',
description: 'Standard governing law and jurisdiction wording',
contentText: 'This Agreement shall be governed by the laws of England and Wales.',
language: 'gb'
})
};
fetch('https://api.tomorro.com/v2/clauses', 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/clauses",
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([
'name' => 'Governing Law',
'description' => 'Standard governing law and jurisdiction wording',
'contentText' => 'This Agreement shall be governed by the laws of England and Wales.',
'language' => 'gb'
]),
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/clauses"
payload := strings.NewReader("{\n \"name\": \"Governing Law\",\n \"description\": \"Standard governing law and jurisdiction wording\",\n \"contentText\": \"This Agreement shall be governed by the laws of England and Wales.\",\n \"language\": \"gb\"\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/clauses")
.header("x-api-key", "<api-key>")
.header("Content-Type", "application/json")
.body("{\n \"name\": \"Governing Law\",\n \"description\": \"Standard governing law and jurisdiction wording\",\n \"contentText\": \"This Agreement shall be governed by the laws of England and Wales.\",\n \"language\": \"gb\"\n}")
.asString();require 'uri'
require 'net/http'
url = URI("https://api.tomorro.com/v2/clauses")
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 \"name\": \"Governing Law\",\n \"description\": \"Standard governing law and jurisdiction wording\",\n \"contentText\": \"This Agreement shall be governed by the laws of England and Wales.\",\n \"language\": \"gb\"\n}"
response = http.request(request)
puts response.read_body{
"id": "550e8400-e29b-41d4-a716-446655440000",
"name": "Confidentiality",
"description": "Standard confidentiality clause",
"organizationId": "550e8400-e29b-41d4-a716-446655440000",
"content": [
{
"type": "paragraph",
"children": [
{
"text": "Clause content"
}
]
}
],
"contentText": "Clause content",
"listNumbering": null,
"translations": [
{
"language": "en",
"content": [
{
"type": "paragraph",
"children": [
{
"text": "Clause content"
}
]
}
],
"contentText": "Clause content",
"order": 0
}
],
"languages": [
"en",
"fr"
],
"createdAt": "2024-01-01T00:00:00.000Z",
"updatedAt": "2024-01-02T00:00:00.000Z"
}Authorizations
API key for authentication. Get your key at https://app.tomorro.com/settings/integrations?integration=api-key
Body
Name of the clause in the organization Clause Library
1"Governing Law"
Short description of the clause (may be an empty string)
"Standard governing law and jurisdiction wording"
Legal body of the clause (plain text or markdown). Converted server-side to Slate — markdown headings, bold/italic, and lists are preserved as editor nodes.
1"This Agreement shall be governed by the laws of England and Wales."
Optional translation language code (e.g. fr, gb). Defaults to the organization language when omitted or invalid.
"gb"
Response
Clause created successfully
Unique identifier for the clause.
"550e8400-e29b-41d4-a716-446655440000"
The name of the clause.
"Confidentiality"
A short description of the clause.
"Standard confidentiality clause"
The organization this clause belongs to.
"550e8400-e29b-41d4-a716-446655440000"
The raw JSON content of the clause (Slate editor format).
[
{
"type": "paragraph",
"children": [{ "text": "Clause content" }]
}
]
Plain-text rendering of content (Slate → text). Prefer this for LLM / text consumers; use content for rich editing.
"Clause content"
List numbering configuration, if any.
null
Per-language translations of the clause.
Show child attributes
Show child attributes
[
{
"language": "en",
"content": [
{
"type": "paragraph",
"children": [{ "text": "Clause content" }]
}
],
"contentText": "Clause content",
"order": 0
}
]
Languages available for this clause.
["en", "fr"]
Time at which the clause was created. Formatted as an ISO 8601 date-time string.
"2024-01-01T00:00:00.000Z"
Time at which the clause was last updated. Formatted as an ISO 8601 date-time string.
"2024-01-02T00:00:00.000Z"