Legal template
Agreement
Modern legal agreement with parties, recitals, numbered clauses, signatures, and optional witnesses block.
Free on every planLanguage: en
slug: agreementRendered with sample data
01
Quick start
Reference the template by its slug and pass your data. The same call works from any language; pick whichever fits your stack. Replace $KAMY_API_KEY with a key from the dashboard.
curl
curl https://kamy.dev/api/v1/render \
-H "Authorization: Bearer $KAMY_API_KEY" \
-H "Content-Type: application/json" \
-d '{
"templateSlug": "agreement",
"data": {
"title": "Mutual Non-Disclosure Agreement",
"agreementDate": "2026-03-15",
"partyA": {
"name": "Acme Studio, Inc.",
"address": "1234 Market Street, San Francisco, CA 94103",
"role": "Disclosing Party"
},
"partyB": {
"name": "Initech LLC",
"address": "77 Federal Plaza, Austin, TX 78701",
"role": "Receiving Party"
},
"sections": [
{
"title": "Definition of Confidential Information",
"paragraphs": [
"“Confidential Information” means any non-public information disclosed by one party to the other, whether orally, in writing, or by inspection of tangible objects, that is designated as confidential or that reasonably should be understood to be confidential given the nature of the information and the circumstances of disclosure."
],
"items": [
"Business plans, financial information, and forecasts",
"Customer lists, pricing, and contractual terms",
"Technical know-how, source code, and product designs",
"Personnel information and organizational structure"
]
},
{
"title": "Obligations of the Receiving Party",
// …
}
}'node.js
import { Kamy } from "@kamydev/sdk";
const kamy = new Kamy({ apiKey: process.env.KAMY_API_KEY! });
const { url } = await kamy.render({
templateSlug: "agreement",
data: {
"title": "Mutual Non-Disclosure Agreement",
"agreementDate": "2026-03-15",
"partyA": {
"name": "Acme Studio, Inc.",
"address": "1234 Market Street, San Francisco, CA 94103",
"role": "Disclosing Party"
},
"partyB": {
"name": "Initech LLC",
"address": "77 Federal Plaza, Austin, TX 78701",
"role": "Receiving Party"
},
"sections": [
{
"title": "Definition of Confidential Information",
"paragraphs": [
"“Confidential Information” means any non-public information disclosed by one party to the other, whether orally, in writing, or by inspection of tangible objects, that is designated as confidential or that reasonably should be understood to be confidential given the nature of the information and the circumstances of disclosure."
],
"items": [
"Business plans, financial information, and forecasts",
"Customer lists, pricing, and contractual terms",
"Technical know-how, source code, and product designs",
"Personnel information and organizational structure"
]
},
{
"title": "Obligations of the Receiving Party",
// …
},
});
console.log(url); // signed URL, valid for 1 hourpython
import os, requests
resp = requests.post(
"https://kamy.dev/api/v1/render",
headers={"Authorization": f"Bearer {os.environ['KAMY_API_KEY']}"},
json={
"templateSlug": "agreement",
"data": {
"title": "Mutual Non-Disclosure Agreement",
"agreementDate": "2026-03-15",
"partyA": {
"name": "Acme Studio, Inc.",
"address": "1234 Market Street, San Francisco, CA 94103",
"role": "Disclosing Party"
},
"partyB": {
"name": "Initech LLC",
"address": "77 Federal Plaza, Austin, TX 78701",
"role": "Receiving Party"
},
"sections": [
{
"title": "Definition of Confidential Information",
"paragraphs": [
"“Confidential Information” means any non-public information disclosed by one party to the other, whether orally, in writing, or by inspection of tangible objects, that is designated as confidential or that reasonably should be understood to be confidential given the nature of the information and the circumstances of disclosure."
],
"items": [
"Business plans, financial information, and forecasts",
"Customer lists, pricing, and contractual terms",
"Technical know-how, source code, and product designs",
"Personnel information and organizational structure"
]
},
{
"title": "Obligations of the Receiving Party",
// …
},
},
)
resp.raise_for_status()
print(resp.json()["url"])02
Sample payload
The full sample data the live preview above renders from. Use it as a starting point for your own integration — every field is optional except those marked required in the schema below.
json
{
"title": "Mutual Non-Disclosure Agreement",
"agreementDate": "2026-03-15",
"partyA": {
"name": "Acme Studio, Inc.",
"address": "1234 Market Street, San Francisco, CA 94103",
"role": "Disclosing Party"
},
"partyB": {
"name": "Initech LLC",
"address": "77 Federal Plaza, Austin, TX 78701",
"role": "Receiving Party"
},
"sections": [
{
"title": "Definition of Confidential Information",
"paragraphs": [
"“Confidential Information” means any non-public information disclosed by one party to the other, whether orally, in writing, or by inspection of tangible objects, that is designated as confidential or that reasonably should be understood to be confidential given the nature of the information and the circumstances of disclosure."
],
"items": [
"Business plans, financial information, and forecasts",
"Customer lists, pricing, and contractual terms",
"Technical know-how, source code, and product designs",
"Personnel information and organizational structure"
]
},
{
"title": "Obligations of the Receiving Party",
"paragraphs": [
"The Receiving Party shall hold all Confidential Information in strict confidence and shall not disclose it to any third party without the prior written consent of the Disclosing Party.",
"The Receiving Party shall use Confidential Information solely for the purpose of evaluating or pursuing a business relationship between the parties."
]
},
{
"title": "Term",
"paragraphs": [
"This Agreement shall remain in effect for a period of three (3) years from the Effective Date, after which the obligations of confidentiality shall continue with respect to Confidential Information that constitutes a trade secret for so long as such information remains a trade secret under applicable law."
]
},
{
"title": "Governing Law",
"paragraphs": [
"This Agreement shall be governed by and construed in accordance with the laws of the State of California, without regard to its conflict of laws principles."
]
}
]
}03
JSON Schema
The render endpoint validates your payload against this JSON Schema before queuing the render. Validation errors come back with HTTP 400 and a VALIDATION_FAILED code listing every offending path.
json
{
"type": "object",
"required": [
"title",
"parties",
"sections"
],
"properties": {
"title": {
"type": "string",
"minLength": 1
},
"effectiveDate": {
"type": "string"
},
"parties": {
"type": "array",
"minItems": 2,
"items": {
"type": "object",
"required": [
"name"
],
"properties": {
"name": {
"type": "string",
"minLength": 1
},
"role": {
"type": "string"
}
}
}
},
"sections": {
"type": "array",
"minItems": 1,
"items": {
"type": "object",
"required": [
"title",
"body"
],
"properties": {
"title": {
"type": "string",
"minLength": 1
},
"body": {
"type": "string"
}
}
}
}
}
}