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

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:

POST /contracts Create a multi-party contract contracts:write
GET /contracts/{id} Get contract details & signing progress contracts:read
GET /usage Check quota & usage contracts:read
GET /status Health check no scope required

What's Next

Now that you've made your first API call, dive deeper into the platform: