HR template
UAE Offer Letter
Bilingual offer of employment compliant with UAE Federal Decree-Law 33 of 2021. Captures position, compensation breakdown, term + probation, leave, and benefits.
Pro, Business & Scale plansCountry: AELanguage: ar+enUAE-MOHRE
slug: uae-offer-letterRendered 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": "uae-offer-letter",
"data": {
"referenceNumber": "OL-2026-0291",
"issueDate": "2026-04-15",
"acceptByDate": "2026-04-29",
"employer": {
"name": "Helios Technologies FZ-LLC",
"address": "Dubai Internet City, Building 17, Dubai, UAE",
"mohreNumber": "734821"
},
"candidate": {
"name": "Aditi Patel"
},
"position": {
"title": "Senior Backend Engineer",
"department": "Engineering",
"reportsTo": "VP of Engineering",
"location": "Dubai Internet City, Dubai",
"weeklyHours": 40
},
"term": {
"startDate": "2026-06-01",
"contractType": "Limited (12 months, renewable)",
"probationMonths": 6
},
"compensation": {
"basic": 18000,
"housing": 6000,
"transport": 1500,
// …
}
}'node.js
import { Kamy } from "@kamydev/sdk";
const kamy = new Kamy({ apiKey: process.env.KAMY_API_KEY! });
const { url } = await kamy.render({
templateSlug: "uae-offer-letter",
data: {
"referenceNumber": "OL-2026-0291",
"issueDate": "2026-04-15",
"acceptByDate": "2026-04-29",
"employer": {
"name": "Helios Technologies FZ-LLC",
"address": "Dubai Internet City, Building 17, Dubai, UAE",
"mohreNumber": "734821"
},
"candidate": {
"name": "Aditi Patel"
},
"position": {
"title": "Senior Backend Engineer",
"department": "Engineering",
"reportsTo": "VP of Engineering",
"location": "Dubai Internet City, Dubai",
"weeklyHours": 40
},
"term": {
"startDate": "2026-06-01",
"contractType": "Limited (12 months, renewable)",
"probationMonths": 6
},
"compensation": {
"basic": 18000,
"housing": 6000,
"transport": 1500,
// …
},
});
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": "uae-offer-letter",
"data": {
"referenceNumber": "OL-2026-0291",
"issueDate": "2026-04-15",
"acceptByDate": "2026-04-29",
"employer": {
"name": "Helios Technologies FZ-LLC",
"address": "Dubai Internet City, Building 17, Dubai, UAE",
"mohreNumber": "734821"
},
"candidate": {
"name": "Aditi Patel"
},
"position": {
"title": "Senior Backend Engineer",
"department": "Engineering",
"reportsTo": "VP of Engineering",
"location": "Dubai Internet City, Dubai",
"weeklyHours": 40
},
"term": {
"startDate": "2026-06-01",
"contractType": "Limited (12 months, renewable)",
"probationMonths": 6
},
"compensation": {
"basic": 18000,
"housing": 6000,
"transport": 1500,
// …
},
},
)
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
{
"referenceNumber": "OL-2026-0291",
"issueDate": "2026-04-15",
"acceptByDate": "2026-04-29",
"employer": {
"name": "Helios Technologies FZ-LLC",
"address": "Dubai Internet City, Building 17, Dubai, UAE",
"mohreNumber": "734821"
},
"candidate": {
"name": "Aditi Patel"
},
"position": {
"title": "Senior Backend Engineer",
"department": "Engineering",
"reportsTo": "VP of Engineering",
"location": "Dubai Internet City, Dubai",
"weeklyHours": 40
},
"term": {
"startDate": "2026-06-01",
"contractType": "Limited (12 months, renewable)",
"probationMonths": 6
},
"compensation": {
"basic": 18000,
"housing": 6000,
"transport": 1500,
"other": 0,
"grossMonthly": 25500,
"grossAnnual": 306000,
"currency": "AED"
},
"leave": {
"annualDays": 30
},
"benefits": {
"healthInsurance": "Premium plan covering employee + spouse + 2 dependents",
"airTicket": "One return ticket to Mumbai per year for employee + dependents",
"other": [
"13th-month bonus",
"Annual learning budget AED 8,000"
]
},
"signer": {
"name": "Reem Al-Sabbagh",
"title": "Head of People"
}
}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": [
"referenceNumber",
"issueDate",
"employer",
"candidate",
"position",
"term",
"compensation",
"leave",
"benefits",
"signer",
"acceptByDate"
],
"properties": {
"referenceNumber": {
"type": "string"
},
"issueDate": {
"type": "string"
},
"acceptByDate": {
"type": "string"
},
"employer": {
"type": "object",
"required": [
"name"
],
"properties": {
"name": {
"type": "string"
},
"address": {
"type": "string"
},
"mohreNumber": {
"type": "string"
}
}
},
"candidate": {
"type": "object",
"required": [
"name"
],
"properties": {
"name": {
"type": "string"
}
}
},
"position": {
"type": "object",
"required": [
"title",
"department",
"location",
"weeklyHours"
],
"properties": {
"title": {
"type": "string"
},
"department": {
"type": "string"
},
"reportsTo": {
"type": "string"
},
"location": {
"type": "string"
},
"weeklyHours": {
"type": "number"
}
}
},
"term": {
"type": "object",
"required": [
"startDate",
"contractType",
"probationMonths"
],
"properties": {
"startDate": {
"type": "string"
},
"contractType": {
"type": "string"
},
"probationMonths": {
"type": "number"
}
}
},
"compensation": {
"type": "object",
"required": [
"basic",
"grossMonthly",
"grossAnnual",
"currency"
],
"properties": {
"basic": {
"type": "number"
},
"housing": {
"type": "number"
},
"transport": {
"type": "number"
},
"other": {
"type": "number"
},
"grossMonthly": {
"type": "number"
},
"grossAnnual": {
"type": "number"
},
"currency": {
"type": "string"
}
}
},
"leave": {
"type": "object",
"required": [
"annualDays"
],
"properties": {
"annualDays": {
"type": "number"
}
}
},
"benefits": {
"type": "object",
"properties": {
"healthInsurance": {
"type": "string"
},
"airTicket": {
"type": "string"
},
"other": {
"type": "array",
"items": {
"type": "string"
}
}
}
},
"signer": {
"type": "object",
"required": [
"name",
"title"
],
"properties": {
"name": {
"type": "string"
},
"title": {
"type": "string"
}
}
}
}
}