An overtime request form that works before payroll

Updated 2026-10-30

Overtime gets agreed in a corridor and remembered differently when payroll runs. I would rather have the ask in writing before the hours are worked. Staff open one link, say what and why, and the request lands in a list I can sort.

Three groups of questions

About you and the day. Name, team, date and extra hours. I need these to match the request to the schedule and to the right manager.

About the work. The reason, the task and a cost code. A manager can approve "report due Friday" faster than "needs more time".

Pay and approval. How the person would like the time handled, plus two boxes: one for hours already worked and one for "I spoke to my manager first". The first box shows me how often people ask after the fact.

Who fills it and who reads it

Employees fill it in. A manager or HR reads the CSV. A person's own AI can do the typing. It might ask "Which day is the overtime?" Then "How many extra hours?" Then "What will you work on?" It shows everything and sends it only after a yes. See agent-fillable forms.

A tip and a note

Download the CSV each week and sort it by approving manager, so each person sees only their own list. Overtime rules differ by country and contract. This is a form, not legal advice, so have a professional check any wording that has legal weight.

Staff who travel for extra shifts can use a travel request. Courses taken outside normal hours fit a training registration form. More HR tools are in HR and recruiting forms.

Questions

Can I tell late requests from early ones?

Yes. The `already_worked` box marks requests filed after the hours happened. Filter on it in the CSV to see how often it happens and under which manager.

Can I cap how many hours one request may ask for?

Yes. The extra hours field takes a minimum and a maximum, so a value outside your range is refused. A weekly total per person is something you add up in the CSV.

Should the form ask for pay rates?

No. This template leaves pay rates out on purpose. Keep pay data in your payroll system and match requests to it by name and date.

Try the form

Live demo ยท nothing is saved

Request extra hours

Please ask before you work the extra time. Your manager reads every request.

Why is the extra time needed? (required)
This work could not be finished in normal hours

Leave it blank if you do not have one.

How would you like the time to be handled?
I already worked these hours

Tick this if you are asking after the fact.

I talked to my manager about this first

Or paste the JSON

Give this to your AI. It needs the AI Form API MCP server or an API key. It makes the form and sends you the link.

text
Create this form with the AI Form API create_form tool (or POST https://aiformapi.com/v1/forms with my API key). Then reply with the public_url.

{
  "title": "Request extra hours",
  "description": "Please ask before you work the extra time. Your manager reads every request.",
  "fields": [
    {
      "id": "employee_name",
      "label": "Your name",
      "type": "short_text",
      "required": true,
      "max_length": 150
    },
    {
      "id": "team_name",
      "label": "Team or department",
      "type": "short_text",
      "max_length": 100
    },
    {
      "id": "approving_manager",
      "label": "Who approves this?",
      "type": "short_text",
      "required": true,
      "max_length": 150
    },
    {
      "id": "overtime_date",
      "label": "Date you expect to work overtime",
      "type": "date",
      "required": true
    },
    {
      "id": "extra_hours",
      "label": "Extra hours you expect to work",
      "type": "number",
      "required": true,
      "min": 0.5,
      "max": 24
    },
    {
      "id": "overtime_reason",
      "label": "Why is the extra time needed?",
      "type": "single_choice",
      "required": true,
      "options": [
        "Deadline",
        "Staff shortage",
        "Customer demand",
        "Equipment or system problem",
        "Seasonal peak",
        "Other"
      ]
    },
    {
      "id": "task_description",
      "label": "What work will you do?",
      "type": "long_text",
      "required": true,
      "max_length": 1000
    },
    {
      "id": "normal_hours_not_enough",
      "label": "This work could not be finished in normal hours",
      "type": "checkbox"
    },
    {
      "id": "cost_code",
      "label": "Project or cost code",
      "type": "short_text",
      "help": "Leave it blank if you do not have one.",
      "max_length": 60
    },
    {
      "id": "pay_preference",
      "label": "How would you like the time to be handled?",
      "type": "single_choice",
      "options": [
        "Paid as overtime",
        "Time off instead",
        "As company policy says"
      ]
    },
    {
      "id": "already_worked",
      "label": "I already worked these hours",
      "type": "checkbox",
      "help": "Tick this if you are asking after the fact."
    },
    {
      "id": "manager_discussed",
      "label": "I talked to my manager about this first",
      "type": "checkbox"
    }
  ]
}

Or call the API

bash
curl -X POST https://aiformapi.com/v1/forms \
  -H "Authorization: Bearer $AIFORMAPI_KEY" \
  -H "Content-Type: application/json" \
  -d '{"title":"Request extra hours","description":"Please ask before you work the extra time. Your manager reads every request.","fields":[{"id":"employee_name","label":"Your name","type":"short_text","required":true,"max_length":150},{"id":"team_name","label":"Team or department","type":"short_text","max_length":100},{"id":"approving_manager","label":"Who approves this?","type":"short_text","required":true,"max_length":150},{"id":"overtime_date","label":"Date you expect to work overtime","type":"date","required":true},{"id":"extra_hours","label":"Extra hours you expect to work","type":"number","required":true,"min":0.5,"max":24},{"id":"overtime_reason","label":"Why is the extra time needed?","type":"single_choice","required":true,"options":["Deadline","Staff shortage","Customer demand","Equipment or system problem","Seasonal peak","Other"]},{"id":"task_description","label":"What work will you do?","type":"long_text","required":true,"max_length":1000},{"id":"normal_hours_not_enough","label":"This work could not be finished in normal hours","type":"checkbox"},{"id":"cost_code","label":"Project or cost code","type":"short_text","help":"Leave it blank if you do not have one.","max_length":60},{"id":"pay_preference","label":"How would you like the time to be handled?","type":"single_choice","options":["Paid as overtime","Time off instead","As company policy says"]},{"id":"already_worked","label":"I already worked these hours","type":"checkbox","help":"Tick this if you are asking after the fact."},{"id":"manager_discussed","label":"I talked to my manager about this first","type":"checkbox"}]}'

JSON definition

json
{
  "title": "Request extra hours",
  "description": "Please ask before you work the extra time. Your manager reads every request.",
  "fields": [
    {
      "id": "employee_name",
      "label": "Your name",
      "type": "short_text",
      "required": true,
      "max_length": 150
    },
    {
      "id": "team_name",
      "label": "Team or department",
      "type": "short_text",
      "max_length": 100
    },
    {
      "id": "approving_manager",
      "label": "Who approves this?",
      "type": "short_text",
      "required": true,
      "max_length": 150
    },
    {
      "id": "overtime_date",
      "label": "Date you expect to work overtime",
      "type": "date",
      "required": true
    },
    {
      "id": "extra_hours",
      "label": "Extra hours you expect to work",
      "type": "number",
      "required": true,
      "min": 0.5,
      "max": 24
    },
    {
      "id": "overtime_reason",
      "label": "Why is the extra time needed?",
      "type": "single_choice",
      "required": true,
      "options": [
        "Deadline",
        "Staff shortage",
        "Customer demand",
        "Equipment or system problem",
        "Seasonal peak",
        "Other"
      ]
    },
    {
      "id": "task_description",
      "label": "What work will you do?",
      "type": "long_text",
      "required": true,
      "max_length": 1000
    },
    {
      "id": "normal_hours_not_enough",
      "label": "This work could not be finished in normal hours",
      "type": "checkbox"
    },
    {
      "id": "cost_code",
      "label": "Project or cost code",
      "type": "short_text",
      "help": "Leave it blank if you do not have one.",
      "max_length": 60
    },
    {
      "id": "pay_preference",
      "label": "How would you like the time to be handled?",
      "type": "single_choice",
      "options": [
        "Paid as overtime",
        "Time off instead",
        "As company policy says"
      ]
    },
    {
      "id": "already_worked",
      "label": "I already worked these hours",
      "type": "checkbox",
      "help": "Tick this if you are asking after the fact."
    },
    {
      "id": "manager_discussed",
      "label": "I talked to my manager about this first",
      "type": "checkbox"
    }
  ]
}