Fill rolefig's California starter offer letter and pay plan (commission, salary with bonus, or hourly) from values the employer confirmed, or fill the employer's own contract through {{placeholders}}. Returns the document text, best-effort warnings (wage table checked 2026-10-06), the workspace's Compensation and Offer terms texts, and an ATS offer object once the candidate, start date and expiry are set. Use only confirmed values and never invent terms. Not legal advice. Remote use sends these values to rolefig to fill the template; nothing is stored.
View input schema
{
"type": "object",
"properties": {
"values": {
"type": "object",
"properties": {
"employer": {
"type": "object",
"properties": {
"legalName": {
"type": "string",
"minLength": 1,
"maxLength": 200,
"description": "The employer's legal name."
},
"address": {
"type": "string",
"minLength": 1,
"maxLength": 300,
"description": "The employer's address."
},
"signerName": {
"type": "string",
"minLength": 1,
"maxLength": 120,
"description": "Who signs for the employer."
},
"signerTitle": {
"type": "string",
"minLength": 1,
"maxLength": 120,
"description": "The signer's job title."
}
},
"required": [
"legalName",
"address",
"signerName",
"signerTitle"
],
"additionalProperties": false
},
"candidate": {
"default": {},
"type": "object",
"properties": {
"name": {
"description": "The candidate's full name, once you make the offer.",
"type": "string",
"maxLength": 120
}
},
"additionalProperties": false
},
"role": {
"type": "object",
"properties": {
"title": {
"type": "string",
"minLength": 1,
"maxLength": 120
},
"duties": {
"minItems": 1,
"maxItems": 12,
"type": "array",
"items": {
"type": "string",
"minLength": 1,
"maxLength": 300
},
"description": "Main duties, one short line each."
},
"workLocation": {
"type": "string",
"minLength": 1,
"maxLength": 200,
"description": "Where the work happens, including the state, e.g. 'San Diego, CA'."
},
"schedule": {
"type": "string",
"minLength": 1,
"maxLength": 200
},
"reportsTo": {
"type": "string",
"maxLength": 120
}
},
"required": [
"title",
"duties",
"workLocation",
"schedule"
],
"additionalProperties": false
},
"startDate": {
"description": "First day of work, YYYY-MM-DD. Leave out until you make the offer.",
"type": "string",
"format": "date",
"pattern": "^(?:(?:\\d\\d[2468][048]|\\d\\d[13579][26]|\\d\\d0[48]|[02468][048]00|[13579][26]00)-02-29|\\d{4}-(?:(?:0[13578]|1[02])-(?:0[1-9]|[12]\\d|3[01])|(?:0[469]|11)-(?:0[1-9]|[12]\\d|30)|(?:02)-(?:0[1-9]|1\\d|2[0-8])))$"
},
"offerExpiresAt": {
"description": "When the offer expires, as an ISO 8601 UTC time. Leave out until you make the offer.",
"type": "string",
"format": "date-time",
"pattern": "^(?:(?:\\d\\d[2468][048]|\\d\\d[13579][26]|\\d\\d0[48]|[02468][048]00|[13579][26]00)-02-29|\\d{4}-(?:(?:0[13578]|1[02])-(?:0[1-9]|[12]\\d|3[01])|(?:0[469]|11)-(?:0[1-9]|[12]\\d|30)|(?:02)-(?:0[1-9]|1\\d|2[0-8])))T(?:(?:[01]\\d|2[0-3]):[0-5]\\d:[0-5]\\d(?:\\.\\d+)?(?:Z))$"
},
"classification": {
"description": "Overtime classification. Required for commission and salary plans; hourly plans are non-exempt.",
"type": "string",
"enum": [
"exempt",
"non-exempt"
]
},
"pay": {
"oneOf": [
{
"type": "object",
"properties": {
"plan": {
"type": "string",
"const": "commission"
},
"rate": {
"type": "string",
"minLength": 1,
"maxLength": 300,
"description": "How commission is calculated: the rate and what it applies to, e.g. '3% of contract value on every project you close'."
},
"earned": {
"type": "string",
"minLength": 1,
"maxLength": 1000,
"description": "When commission is earned, e.g. 'half when the deposit clears, half on final payment'."
},
"paid": {
"type": "string",
"minLength": 1,
"maxLength": 1000,
"description": "When earned commission is paid, e.g. 'on the next regular payday after it is earned'."
},
"afterEmployment": {
"type": "string",
"minLength": 1,
"maxLength": 1000,
"description": "What happens to earned and pending commission when employment ends."
},
"draw": {
"description": "Optional draw paid while the employee builds commission.",
"type": "object",
"properties": {
"amountPerMonth": {
"type": "number",
"exclusiveMinimum": 0,
"maximum": 100000
},
"months": {
"type": "integer",
"minimum": 1,
"maximum": 24
},
"recoverable": {
"type": "boolean",
"description": "true: an advance repaid from future commission; false: the employee keeps it."
}
},
"required": [
"amountPerMonth",
"months",
"recoverable"
],
"additionalProperties": false
},
"cap": {
"description": "Optional cap on commission or earnings.",
"type": "string",
"maxLength": 200
},
"target": {
"description": "Optional target earnings, shown as an estimate.",
"type": "string",
"maxLength": 200
},
"rules": {
"default": [],
"description": "Special rules, e.g. 'projects signed below our margin floor need written approval and pay half rate'.",
"maxItems": 10,
"type": "array",
"items": {
"type": "string",
"minLength": 1,
"maxLength": 300
}
}
},
"required": [
"plan",
"rate",
"earned",
"paid",
"afterEmployment"
],
"additionalProperties": false
},
{
"type": "object",
"properties": {
"plan": {
"type": "string",
"const": "salary_bonus"
},
"annualBase": {
"type": "number",
"exclusiveMinimum": 0,
"maximum": 10000000,
"description": "Base salary in USD per year."
},
"bonusTarget": {
"description": "Optional target bonus, e.g. '$25,000–$40,000 a year'.",
"type": "string",
"maxLength": 300
},
"bonusMeasures": {
"description": "What the bonus is based on. Required with a bonus target.",
"type": "string",
"maxLength": 1000
},
"bonusTiming": {
"description": "When the bonus is paid. Required with a bonus target.",
"type": "string",
"maxLength": 500
},
"bonusConditions": {
"description": "Optional conditions for the bonus.",
"type": "string",
"maxLength": 1000
}
},
"required": [
"plan",
"annualBase"
],
"additionalProperties": false
},
{
"type": "object",
"properties": {
"plan": {
"type": "string",
"const": "hourly"
},
"hourlyRate": {
"type": "number",
"exclusiveMinimum": 0,
"maximum": 1000,
"description": "Pay in USD per hour."
},
"payFrequency": {
"type": "string",
"enum": [
"weekly",
"biweekly",
"semimonthly"
],
"description": "How often pay goes out."
}
},
"required": [
"plan",
"hourlyRate",
"payFrequency"
],
"additionalProperties": false
}
]
},
"reimbursements": {
"default": [],
"description": "Business expenses reimbursed, e.g. 'mileage at the IRS rate'.",
"maxItems": 10,
"type": "array",
"items": {
"type": "string",
"minLength": 1,
"maxLength": 200
}
},
"benefits": {
"default": [],
"description": "Benefits offered.",
"maxItems": 12,
"type": "array",
"items": {
"type": "string",
"minLength": 1,
"maxLength": 200
}
}
},
"required": [
"employer",
"role",
"pay"
],
"additionalProperties": false
},
"ownContract": {
"type": "string",
"minLength": 1,
"maxLength": 50000
},
"today": {
"type": "string",
"format": "date",
"pattern": "^(?:(?:\\d\\d[2468][048]|\\d\\d[13579][26]|\\d\\d0[48]|[02468][048]00|[13579][26]00)-02-29|\\d{4}-(?:(?:0[13578]|1[02])-(?:0[1-9]|[12]\\d|3[01])|(?:0[469]|11)-(?:0[1-9]|[12]\\d|30)|(?:02)-(?:0[1-9]|1\\d|2[0-8])))$"
}
},
"required": [
"values"
],
"$schema": "https://json-schema.org/draft/2020-12/schema"
}