Legal template
Contract
Formal contract with numbered sections and signature blocks.
Free on every planLanguage: en
slug: contractRendered 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": "contract",
"data": {
"contractNumber": "MSA-2026-014",
"status": "executed",
"title": "Master Services Agreement",
"effectiveDate": "2026-03-01",
"expirationDate": "2027-03-01",
"parties": [
{
"role": "Service Provider",
"name": "Acme Studio, Inc.",
"description": "a Delaware corporation",
"address": [
"1234 Market Street",
"San Francisco, CA 94103"
],
"email": "[email protected]"
},
{
"role": "Client",
"name": "Initech LLC",
"description": "a Texas limited liability company",
"address": [
"77 Federal Plaza",
"Austin, TX 78701"
],
"email": "[email protected]"
}
],
// …
}
}'node.js
import { Kamy } from "@kamydev/sdk";
const kamy = new Kamy({ apiKey: process.env.KAMY_API_KEY! });
const { url } = await kamy.render({
templateSlug: "contract",
data: {
"contractNumber": "MSA-2026-014",
"status": "executed",
"title": "Master Services Agreement",
"effectiveDate": "2026-03-01",
"expirationDate": "2027-03-01",
"parties": [
{
"role": "Service Provider",
"name": "Acme Studio, Inc.",
"description": "a Delaware corporation",
"address": [
"1234 Market Street",
"San Francisco, CA 94103"
],
"email": "[email protected]"
},
{
"role": "Client",
"name": "Initech LLC",
"description": "a Texas limited liability company",
"address": [
"77 Federal Plaza",
"Austin, TX 78701"
],
"email": "[email protected]"
}
],
// …
},
});
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": "contract",
"data": {
"contractNumber": "MSA-2026-014",
"status": "executed",
"title": "Master Services Agreement",
"effectiveDate": "2026-03-01",
"expirationDate": "2027-03-01",
"parties": [
{
"role": "Service Provider",
"name": "Acme Studio, Inc.",
"description": "a Delaware corporation",
"address": [
"1234 Market Street",
"San Francisco, CA 94103"
],
"email": "[email protected]"
},
{
"role": "Client",
"name": "Initech LLC",
"description": "a Texas limited liability company",
"address": [
"77 Federal Plaza",
"Austin, TX 78701"
],
"email": "[email protected]"
}
],
// …
},
},
)
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
{
"contractNumber": "MSA-2026-014",
"status": "executed",
"title": "Master Services Agreement",
"effectiveDate": "2026-03-01",
"expirationDate": "2027-03-01",
"parties": [
{
"role": "Service Provider",
"name": "Acme Studio, Inc.",
"description": "a Delaware corporation",
"address": [
"1234 Market Street",
"San Francisco, CA 94103"
],
"email": "[email protected]"
},
{
"role": "Client",
"name": "Initech LLC",
"description": "a Texas limited liability company",
"address": [
"77 Federal Plaza",
"Austin, TX 78701"
],
"email": "[email protected]"
}
],
"recitals": [
"Acme Studio is engaged in the business of providing design, development, and consulting services to enterprise clients;",
"Client desires to engage Acme Studio to perform certain services in accordance with one or more Statements of Work to be issued under this Agreement; and",
"the parties wish to set forth the terms and conditions that shall govern such engagements during the term of this Agreement."
],
"sections": [
{
"title": "Scope of Services",
"body": "Acme Studio shall provide the design, development, and advisory services described in one or more Statements of Work executed by both parties (each, a \"SOW\"). Each SOW shall reference this Agreement and shall be governed by its terms.",
"clauses": [
"Each SOW shall set forth, at minimum, the scope, deliverables, fees, and timeline applicable to the services described therein.",
"Changes to the scope of any SOW shall be effective only upon a written change order signed by an authorized representative of each party."
]
},
{
"title": "Compensation and Payment",
"body": "Client shall pay Acme Studio the fees set forth in each SOW in accordance with the payment schedule contained therein.",
"clauses": [
"All undisputed amounts shall be paid within thirty (30) days of receipt of the applicable invoice.",
"Late payments shall accrue interest at the rate of one and one-half percent (1.5%) per month, or the maximum rate permitted by applicable law, whichever is less."
]
},
{
"title": "Confidentiality",
"body": "Each party shall hold in strict confidence all non-public information disclosed by the other party in connection with this Agreement (\"Confidential Information\") and shall use such Confidential Information solely to perform its obligations hereunder."
},
{
"title": "Intellectual Property",
"body": "Subject to Client's payment in full of all amounts due under the applicable SOW, Acme Studio hereby assigns to Client all right, title, and interest in and to the deliverables identified in such SOW as work product, excluding Acme Studio's pre-existing materials and any general tools or methodologies developed in the course of its business."
},
{
"title": "Term and Termination",
"body": "This Agreement shall commence on the Effective Date and shall continue in effect until terminated by either party upon thirty (30) days' prior written notice to the other party.",
"clauses": [
"Either party may terminate this Agreement immediately for cause upon written notice in the event of the other party's material breach that remains uncured for fifteen (15) days following written notice thereof.",
"The provisions of Sections 3 (Confidentiality) and 4 (Intellectual Property) shall survive any termination of this Agreement."
]
}
],
"governingLaw": "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. Any dispute arising out of or relating to this Agreement shall be resolved exclusively in the state and federal courts located in San Francisco County, California.",
"closingClause": "IN WITNESS WHEREOF, the parties hereto, intending to be legally bound, have caused this Agreement to be executed by their duly authorized representatives as of the Effective Date first written above.",
"signatures": [
{
"party": "Service Provider",
"name": "Jordan Lee",
"title": "Chief Executive Officer, Acme Studio, Inc.",
"date": "2026-03-01"
},
{
"party": "Client",
"name": "Bill Lumbergh",
"title": "Vice President of Operations, Initech LLC",
"date": "2026-03-01"
}
]
}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",
"sections"
],
"properties": {
"title": {
"type": "string",
"minLength": 1
},
"contractNumber": {
"type": "string"
},
"status": {
"type": "string",
"enum": [
"draft",
"executed",
"active",
"terminated",
"expired"
]
},
"effectiveDate": {
"type": "string"
},
"expirationDate": {
"type": "string"
},
"governingLaw": {
"type": "string"
},
"closingClause": {
"type": "string"
},
"recitals": {
"type": "array",
"items": {
"type": "string"
}
},
"parties": {
"type": "array",
"minItems": 1,
"items": {
"type": "object",
"required": [
"name"
],
"properties": {
"name": {
"type": "string",
"minLength": 1
},
"role": {
"type": "string"
},
"description": {
"type": "string"
},
"address": {
"anyOf": [
{
"type": "string"
},
{
"type": "array",
"items": {
"type": "string"
}
}
]
},
"email": {
"type": "string"
},
"phone": {
"type": "string"
}
}
}
},
"partyA": {
"type": "object",
"required": [
"name"
],
"properties": {
"name": {
"type": "string",
"minLength": 1
},
"role": {
"type": "string"
},
"description": {
"type": "string"
},
"address": {
"anyOf": [
{
"type": "string"
},
{
"type": "array",
"items": {
"type": "string"
}
}
]
},
"email": {
"type": "string"
},
"phone": {
"type": "string"
}
}
},
"partyB": {
"type": "object",
"required": [
"name"
],
"properties": {
"name": {
"type": "string",
"minLength": 1
},
"role": {
"type": "string"
},
"description": {
"type": "string"
},
"address": {
"anyOf": [
{
"type": "string"
},
{
"type": "array",
"items": {
"type": "string"
}
}
]
},
"email": {
"type": "string"
},
"phone": {
"type": "string"
}
}
},
"sections": {
"type": "array",
"minItems": 1,
"items": {
"type": "object",
"required": [
"title"
],
"properties": {
"title": {
"type": "string",
"minLength": 1
},
"heading": {
"type": "string"
},
"body": {
"type": "string"
},
"content": {
"type": "string"
},
"clauses": {
"type": "array",
"items": {
"type": "string"
}
}
}
}
},
"signatures": {
"type": "array",
"items": {
"type": "object",
"properties": {
"party": {
"type": "string"
},
"name": {
"type": "string"
},
"title": {
"type": "string"
},
"date": {
"type": "string"
},
"imageUrl": {
"type": "string"
}
}
}
}
}
}