Generate professional employment contracts in DOCX and PDF formats from your HR data using Liquid templates. Built for HR systems and backend developers who need reliable contract automation without document generation complexity.
Every new hire needs a personalized employment contract with role-specific terms, salary details, and company policies. Manual contract creation is time-consuming and error-prone. Building document generation into your HR system means wrestling with DOCX libraries, PDF rendering, and template management.
Send your employee data and contract template to our API. Get back professionally formatted contracts ready for signature workflows.
#1. Submit contract generation request
curl --request POST \
--url https://dash.liquidtemplater.com/items/template_request \
--header 'Authorization: Bearer YOUR_BEARER_API_KEY_HERE_1234578' \
--header 'content-type: application/json' \
--data '{
"data": {
"employee": {
"name": "Sarah Johnson",
"position": "Senior Software Engineer",
"salary": 95000,
"start_date": "2025-07-01",
"department": "Engineering",
"manager": "Alex Chen",
"benefits": {
"vacation_days": 25,
"health_insurance": true,
"retirement_match": "6%"
}
},
"company": {
"name": "TechCorp Inc.",
"address": "123 Innovation Drive, Austin, TX"
}
},
"template": "<contract template content>",
"type": "docx"
}'
#Response includes processing ID
{
"data": {
"id": "9125fdc1-a094-4464-8a5e-c5f28ee7dcca",
"result": null,
"fullfilled_on": null
}
}
#2. Poll for completion
curl --request GET \
--url https://dash.liquidtemplater.com/items/template_request/9125fdc1-a094-4464-8a5e-c5f28ee7dcca \
--header 'Authorization: Bearer YOUR_BEARER_API_KEY_HERE_1234578'
#After a few seconds get download ID
{
"data": {
"id": "9125fdc1-a094-4464-8a5e-c5f28ee7dcca",
"result": "166013e8-a767-4d1f-9502-889378a7f715",
"fullfilled_on": "2025-06-20T11:32:11"
}
}
#3. Download the contract
curl 'https://dash.liquidtemplater.com/assets/166013e8-a767-4d1f-9502-889378a7f715?download=true' \
--header 'Authorization: Bearer YOUR_BEARER_API_KEY_HERE_1234578'
EMPLOYMENT AGREEMENT
This Employment Agreement is entered into between {{ company.name }} ("Company") and {{ employee.name }} ("Employee").
POSITION AND DUTIES
Employee will serve as {{ employee.position }} in the {{ employee.department }} department, reporting to {{ employee.manager }}.
COMPENSATION
Annual Salary: ${{ employee.salary | number }}
Start Date: {{ employee.start_date | date: "%B %d, %Y" }}
BENEFITS
- Vacation: {{ employee.benefits.vacation_days }} days annually
{% if employee.benefits.health_insurance -%}
- Health insurance coverage provided
{% endif -%}
{% if employee.benefits.retirement_match -%}
- 401(k) matching: {{ employee.benefits.retirement_match }}
{% endif -%}
Company Address: {{ company.address }}
Signatures:
_________________________ Date: ___________
{{ employee.name }}
_________________________ Date: ___________
{{ company.name }} Representative
Standard Employment Contracts
Role-Specific Contracts
Compliance Documents
// Integrate with your HR system
async function generateEmploymentContract(employeeId) {
const employee = await hr.getEmployeeData(employeeId);
const company = await settings.getCompanyInfo();
const response = await fetch('https://dash.liquidtemplater.com/items/template_request', {
method: 'POST',
headers: {
'Authorization': `Bearer ${YOUR_BEARER_API_KEY}`,
'Content-Type': 'application/json'
},
body: JSON.stringify({
data: { employee, company },
template: getContractTemplate(employee.position),
type: 'docx'
})
});
const { data: { id } } = await response.json();
// Poll until fullfilled_on has a value
const result = await pollForCompletion(id);
return `https://dash.liquidtemplater.com/assets/${result.data.result}?download=true`;
}
Generate contracts in the format your workflow requires:
Simply change the type parameter in your API request.
Asynchronous Processing: Contract generation happens in the background while your HR system stays responsive.
Template Versioning: Update contract templates without changing your integration code.
GDPR Compliant: Generated contracts stored securely in Germany for 7 days, automatically purged afterward.
Automatically send contracts to new hires using your own SMTP credentials:
{
"data": {
"employee": {...},
"email_to": "sarah.johnson@email.com",
"email_from": "hr@yourcompany.com"
},
"template": "{{contract_template}}",
"type": "email"
}
Requires SMTP setup in your dashboard first.
Employment contracts contain sensitive personal and financial information. Our infrastructure provides:
Onboarding Automation
Contract Updates
Free Tier: 100 renders/month - perfect for small teams Pro: €55/month for 10,000 renders + €0.005 per additional render Enterprise: Unlimited renders with dedicated infrastructure
Built by developers, for developers. No vendor lock-in, no complex setup.