Getting Started
Everything you need to integrate Draftory into your platform.
What is the Draftory API
The Draftory API lets you create and manage multi-party contracts programmatically. Define multiple signing parties, send signing links automatically, and track signing progress — all from your own platform. Whether you're building an escrow service, a marketplace, or an internal tool, the API gives you full control over your contract workflow.
Prerequisites
- An active Draftory Enterprise account
- An API key (create one at Settings → API Access in the Draftory app)
Base URL
All API requests are made to the following base URL:
https://api.draftory.ca/api/external/v2
Your First API Call
Let's make two quick calls to verify your setup and create your first contract.
Step 1: Check API status
Send a GET request to /status to confirm your API key is valid. The response includes your key info and subscription tier.
curl https://api.draftory.ca/api/external/v2/status \
-H "x-api-key: dft_live_your_key"
const res = await fetch("https://api.draftory.ca/api/external/v2/status", {
headers: { "x-api-key": "dft_live_your_key" }
});
const data = await res.json();
console.log(data);
import requests
res = requests.get(
"https://api.draftory.ca/api/external/v2/status",
headers={"x-api-key": "dft_live_your_key"}
)
print(res.json())
Step 2: Create a contract
Send a POST request to /contracts to create a new multi-party contract. Here's a full NDA example with two parties:
curl -X POST https://api.draftory.ca/api/external/v2/contracts \
-H "x-api-key: dft_live_your_key" \
-H "Content-Type: application/json" \
-d '{
"parties": [
{ "role": "discloser", "legalName": "Acme Corp", "email": "acme@example.com" },
{ "role": "recipient", "legalName": "Jane Smith", "email": "jane@example.com" }
],
"contractType": "nda",
"content": "MUTUAL NON-DISCLOSURE AGREEMENT\n\n1. PARTIES\nDiscloser: Acme Corp (acme@example.com)\nRecipient: Jane Smith (jane@example.com)\n\n2. TERMS\nBoth parties agree not to disclose confidential information.\nThis agreement remains in effect for 2 years.",
"senderName": "Acme Corp",
"metadata": {
"internalRef": "DEAL-2026-042"
}
}'
const res = await fetch("https://api.draftory.ca/api/external/v2/contracts", {
method: "POST",
headers: {
"x-api-key": "dft_live_your_key",
"Content-Type": "application/json"
},
body: JSON.stringify({
parties: [
{ role: "discloser", legalName: "Acme Corp", email: "acme@example.com" },
{ role: "recipient", legalName: "Jane Smith", email: "jane@example.com" }
],
contractType: "nda",
content: "MUTUAL NON-DISCLOSURE AGREEMENT\n\n1. PARTIES\nDiscloser: Acme Corp\nRecipient: Jane Smith\n\n2. TERMS\nBoth parties agree not to disclose confidential information.",
senderName: "Acme Corp",
metadata: { internalRef: "DEAL-2026-042" }
})
});
const contract = await res.json();
console.log(contract);
import requests
res = requests.post(
"https://api.draftory.ca/api/external/v2/contracts",
headers={
"x-api-key": "dft_live_your_key",
"Content-Type": "application/json"
},
json={
"parties": [
{"role": "discloser", "legalName": "Acme Corp", "email": "acme@example.com"},
{"role": "recipient", "legalName": "Jane Smith", "email": "jane@example.com"}
],
"contractType": "nda",
"content": "MUTUAL NON-DISCLOSURE AGREEMENT\n\n1. PARTIES\nDiscloser: Acme Corp\nRecipient: Jane Smith\n\n2. TERMS\nBoth parties agree not to disclose confidential information.",
"senderName": "Acme Corp",
"metadata": {"internalRef": "DEAL-2026-042"}
}
)
print(res.json())
A successful 201 response returns the created contract with signing progress:
{
"success": true,
"contract": {
"id": "contract-1711234567890-AbCdEfGh",
"contractNumber": "EXT-20260321-ABCDEFGH",
"shareToken": "abc123token",
"shareUrl": "https://draftory.ca/contract/abc123token",
"status": "pending_signature",
"contractType": "nda",
"parties": [
{ "role": "discloser", "legalName": "Acme Corp", "email": "acme@example.com" },
{ "role": "recipient", "legalName": "Jane Smith", "email": "jane@example.com" }
],
"signingProgress": {
"signed": 0,
"total": 2,
"pending": 2,
"percentage": 0
},
"createdAt": "2026-03-21T12:00:00.000Z",
"expiresAt": "2026-04-04T12:00:00.000Z"
}
}
Draftory automatically sends signing emails to all parties. They can review and sign the contract at the shareUrl.
Available Endpoints
The Draftory API exposes the following endpoints:
/contracts
Create a multi-party contract
contracts:write
/contracts/{id}
Get contract details & signing progress
contracts:read
/usage
Check quota & usage
contracts:read
/status
Health check
no scope required
What's Next
Now that you've made your first API call, dive deeper into the platform:
- Authentication — Learn about API keys, scopes, and token rotation.
- Contracts Guide — Explore contract types, multi-party signing, and lifecycle events.