Time off request form for PTO and vacation days

Updated 2026-10-30

A request in a chat slides up the screen and gets forgotten. Then someone is away and nobody knew. I would rather keep one list. This time off request form puts every PTO, vacation or leave request in one list, with the dates, the cover and the handover.

Who it is for

Small businesses, shops, clinics and teams without HR software. Also managers who approve by hand and want a record. It works for a leave request form and a vacation request form alike.

What each question is for

  • Type and dates: vacation, sick day or personal day, with a first and last day away.
  • Whole or half days, and the count: so you can check what is left in your own records.
  • Who covers: a named colleague, so the team plans for the gap.
  • Work to finish first: the one thing that will break if left.
  • Reachable or not: whether anyone may call in an emergency.

What an employee's AI would ask

"What type of time off is it?" Then "What are your first and last days away?" Then "Who will cover your work?" It shows all the answers and sends only after a yes. See agent-fillable forms.

Before you use it

The form collects. You approve and reply yourself. Sort by first day to catch clashes. A few days off for a course fits a training registration form, and a work trip fits a travel request form. For a longer break, see the leave of absence form. More in forms for HR and recruiting.

Questions

Does the form approve or deny requests?

No. It collects requests. You decide and tell people yourself, because the form does not send email to the person who filled it in.

How do I avoid two people being away together?

Download the CSV, sort by first_day_off and compare overlaps by team before you approve. A shared sheet of approved dates makes clashes easy to spot.

Can it handle long or medical leave?

This form is for short time off. For a longer absence, use the leave of absence form, which adds cover, contact preferences and a return plan.

Try the form

Live demo ยท nothing is saved

Ask for time off

Tell us your dates and who will cover. We will reply to confirm.

Type of time off (required)
Whole or half days?
Can we reach you while you are away?

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": "Ask for time off",
  "description": "Tell us your dates and who will cover. We will reply to confirm.",
  "fields": [
    {
      "id": "employee_name",
      "label": "Your name",
      "type": "short_text",
      "required": true,
      "max_length": 150
    },
    {
      "id": "work_email",
      "label": "Work email",
      "type": "email",
      "required": true
    },
    {
      "id": "leave_type",
      "label": "Type of time off",
      "type": "single_choice",
      "required": true,
      "options": [
        "Vacation",
        "Sick day",
        "Personal day",
        "Study day",
        "Other"
      ]
    },
    {
      "id": "first_day_off",
      "label": "First day away",
      "type": "date",
      "required": true
    },
    {
      "id": "last_day_off",
      "label": "Last day away",
      "type": "date",
      "required": true
    },
    {
      "id": "day_portions",
      "label": "Whole or half days?",
      "type": "single_choice",
      "options": [
        "Whole days",
        "Half day at the start",
        "Half day at the end",
        "Half days at both ends"
      ]
    },
    {
      "id": "working_days_off",
      "label": "Number of working days off",
      "type": "number",
      "min": 0.5,
      "max": 60
    },
    {
      "id": "cover_colleague",
      "label": "Who will cover your work?",
      "type": "short_text",
      "max_length": 150
    },
    {
      "id": "finish_before",
      "label": "Anything that must be finished before you go?",
      "type": "long_text",
      "max_length": 800
    },
    {
      "id": "reachability",
      "label": "Can we reach you while you are away?",
      "type": "single_choice",
      "options": [
        "No, I will be offline",
        "Only for emergencies",
        "Yes, I will check in"
      ]
    },
    {
      "id": "request_note",
      "label": "Anything else?",
      "type": "long_text",
      "max_length": 800
    }
  ]
}

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":"Ask for time off","description":"Tell us your dates and who will cover. We will reply to confirm.","fields":[{"id":"employee_name","label":"Your name","type":"short_text","required":true,"max_length":150},{"id":"work_email","label":"Work email","type":"email","required":true},{"id":"leave_type","label":"Type of time off","type":"single_choice","required":true,"options":["Vacation","Sick day","Personal day","Study day","Other"]},{"id":"first_day_off","label":"First day away","type":"date","required":true},{"id":"last_day_off","label":"Last day away","type":"date","required":true},{"id":"day_portions","label":"Whole or half days?","type":"single_choice","options":["Whole days","Half day at the start","Half day at the end","Half days at both ends"]},{"id":"working_days_off","label":"Number of working days off","type":"number","min":0.5,"max":60},{"id":"cover_colleague","label":"Who will cover your work?","type":"short_text","max_length":150},{"id":"finish_before","label":"Anything that must be finished before you go?","type":"long_text","max_length":800},{"id":"reachability","label":"Can we reach you while you are away?","type":"single_choice","options":["No, I will be offline","Only for emergencies","Yes, I will check in"]},{"id":"request_note","label":"Anything else?","type":"long_text","max_length":800}]}'

JSON definition

json
{
  "title": "Ask for time off",
  "description": "Tell us your dates and who will cover. We will reply to confirm.",
  "fields": [
    {
      "id": "employee_name",
      "label": "Your name",
      "type": "short_text",
      "required": true,
      "max_length": 150
    },
    {
      "id": "work_email",
      "label": "Work email",
      "type": "email",
      "required": true
    },
    {
      "id": "leave_type",
      "label": "Type of time off",
      "type": "single_choice",
      "required": true,
      "options": [
        "Vacation",
        "Sick day",
        "Personal day",
        "Study day",
        "Other"
      ]
    },
    {
      "id": "first_day_off",
      "label": "First day away",
      "type": "date",
      "required": true
    },
    {
      "id": "last_day_off",
      "label": "Last day away",
      "type": "date",
      "required": true
    },
    {
      "id": "day_portions",
      "label": "Whole or half days?",
      "type": "single_choice",
      "options": [
        "Whole days",
        "Half day at the start",
        "Half day at the end",
        "Half days at both ends"
      ]
    },
    {
      "id": "working_days_off",
      "label": "Number of working days off",
      "type": "number",
      "min": 0.5,
      "max": 60
    },
    {
      "id": "cover_colleague",
      "label": "Who will cover your work?",
      "type": "short_text",
      "max_length": 150
    },
    {
      "id": "finish_before",
      "label": "Anything that must be finished before you go?",
      "type": "long_text",
      "max_length": 800
    },
    {
      "id": "reachability",
      "label": "Can we reach you while you are away?",
      "type": "single_choice",
      "options": [
        "No, I will be offline",
        "Only for emergencies",
        "Yes, I will check in"
      ]
    },
    {
      "id": "request_note",
      "label": "Anything else?",
      "type": "long_text",
      "max_length": 800
    }
  ]
}