A job requisition form for hiring managers

Updated 2026-10-30

A manager says "we need another person" in a meeting. Three weeks later, nobody remembers the grade, the start date or who signed it off. A requisition puts the ask in writing first. I use one link per request and keep every row.

Before the form is open

I decide who may send a request and what "approved budget" means in my company. I also write down the pay grid, so managers pick a range and do not guess.

While it is open

Managers send one request per role. The form asks for the title, the reason, how many people, the contract type, the start date, the skills and the business case, with one box for approved budget.

A manager's AI can handle this. It might ask "What is the job title?" Then "Is this a new role or a replacement?" Then "When should they start?" It shows the answers and sends them only after a yes. See agent-fillable forms.

After it closes

I download the CSV, one row per role. Rows without the budget box ticked go to finance first. The rest go to whoever writes the job post.

When an offer is ready, a job offer response form collects the candidate's answer. Hiring for a kitchen or a floor team? A restaurant job application collects the candidates. More tools are in HR and recruiting forms.

Questions

Can one request cover several identical roles?

Yes. The number of people takes more than one, so five identical roles can be one row. Use separate requests when roles differ in grade, place or skills.

Does this replace my applicant tracking system?

No. It collects the internal ask. Once a request is approved, you open the role in whatever tool you use to post jobs and track candidates.

How do I know a request has budget?

Filter the CSV on `budget_confirmed`. The manager sets that tick box. I still check it with finance before posting, because the form cannot verify it.

Try the form

Live demo ยท nothing is saved

Request a new hire

Send one request for each role. HR and finance read it before a job is posted.

Why are you hiring? (required)
Contract type (required)
Where will they work?

Use the range from your pay grid, not a guess.

Budget for this role is already approved

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 a new hire",
  "description": "Send one request for each role. HR and finance read it before a job is posted.",
  "fields": [
    {
      "id": "requesting_manager",
      "label": "Your name",
      "type": "short_text",
      "required": true,
      "max_length": 150
    },
    {
      "id": "department",
      "label": "Department",
      "type": "short_text",
      "required": true,
      "max_length": 100
    },
    {
      "id": "job_title",
      "label": "Job title you want to hire for",
      "type": "short_text",
      "required": true,
      "max_length": 150
    },
    {
      "id": "hire_reason",
      "label": "Why are you hiring?",
      "type": "single_choice",
      "required": true,
      "options": [
        "New role",
        "Replacing someone who left",
        "Temporary cover",
        "Seasonal peak"
      ]
    },
    {
      "id": "positions_needed",
      "label": "How many people do you need?",
      "type": "number",
      "required": true,
      "min": 1,
      "max": 50
    },
    {
      "id": "employment_type",
      "label": "Contract type",
      "type": "single_choice",
      "required": true,
      "options": [
        "Full time",
        "Part time",
        "Fixed term contract",
        "Internship"
      ]
    },
    {
      "id": "work_setup",
      "label": "Where will they work?",
      "type": "single_choice",
      "options": [
        "On site",
        "Hybrid",
        "Remote"
      ]
    },
    {
      "id": "work_location",
      "label": "City or office",
      "type": "short_text",
      "max_length": 150
    },
    {
      "id": "target_start",
      "label": "Ideal start date",
      "type": "date"
    },
    {
      "id": "pay_range",
      "label": "Pay range you have in mind",
      "type": "short_text",
      "help": "Use the range from your pay grid, not a guess.",
      "max_length": 100
    },
    {
      "id": "reports_to",
      "label": "Who will this person report to?",
      "type": "short_text",
      "max_length": 150
    },
    {
      "id": "must_have_skills",
      "label": "What must the person be able to do?",
      "type": "long_text",
      "required": true,
      "max_length": 1000
    },
    {
      "id": "business_case",
      "label": "Why do we need this hire now?",
      "type": "long_text",
      "required": true,
      "max_length": 1500
    },
    {
      "id": "budget_confirmed",
      "label": "Budget for this role is already approved",
      "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 a new hire","description":"Send one request for each role. HR and finance read it before a job is posted.","fields":[{"id":"requesting_manager","label":"Your name","type":"short_text","required":true,"max_length":150},{"id":"department","label":"Department","type":"short_text","required":true,"max_length":100},{"id":"job_title","label":"Job title you want to hire for","type":"short_text","required":true,"max_length":150},{"id":"hire_reason","label":"Why are you hiring?","type":"single_choice","required":true,"options":["New role","Replacing someone who left","Temporary cover","Seasonal peak"]},{"id":"positions_needed","label":"How many people do you need?","type":"number","required":true,"min":1,"max":50},{"id":"employment_type","label":"Contract type","type":"single_choice","required":true,"options":["Full time","Part time","Fixed term contract","Internship"]},{"id":"work_setup","label":"Where will they work?","type":"single_choice","options":["On site","Hybrid","Remote"]},{"id":"work_location","label":"City or office","type":"short_text","max_length":150},{"id":"target_start","label":"Ideal start date","type":"date"},{"id":"pay_range","label":"Pay range you have in mind","type":"short_text","help":"Use the range from your pay grid, not a guess.","max_length":100},{"id":"reports_to","label":"Who will this person report to?","type":"short_text","max_length":150},{"id":"must_have_skills","label":"What must the person be able to do?","type":"long_text","required":true,"max_length":1000},{"id":"business_case","label":"Why do we need this hire now?","type":"long_text","required":true,"max_length":1500},{"id":"budget_confirmed","label":"Budget for this role is already approved","type":"checkbox"}]}'

JSON definition

json
{
  "title": "Request a new hire",
  "description": "Send one request for each role. HR and finance read it before a job is posted.",
  "fields": [
    {
      "id": "requesting_manager",
      "label": "Your name",
      "type": "short_text",
      "required": true,
      "max_length": 150
    },
    {
      "id": "department",
      "label": "Department",
      "type": "short_text",
      "required": true,
      "max_length": 100
    },
    {
      "id": "job_title",
      "label": "Job title you want to hire for",
      "type": "short_text",
      "required": true,
      "max_length": 150
    },
    {
      "id": "hire_reason",
      "label": "Why are you hiring?",
      "type": "single_choice",
      "required": true,
      "options": [
        "New role",
        "Replacing someone who left",
        "Temporary cover",
        "Seasonal peak"
      ]
    },
    {
      "id": "positions_needed",
      "label": "How many people do you need?",
      "type": "number",
      "required": true,
      "min": 1,
      "max": 50
    },
    {
      "id": "employment_type",
      "label": "Contract type",
      "type": "single_choice",
      "required": true,
      "options": [
        "Full time",
        "Part time",
        "Fixed term contract",
        "Internship"
      ]
    },
    {
      "id": "work_setup",
      "label": "Where will they work?",
      "type": "single_choice",
      "options": [
        "On site",
        "Hybrid",
        "Remote"
      ]
    },
    {
      "id": "work_location",
      "label": "City or office",
      "type": "short_text",
      "max_length": 150
    },
    {
      "id": "target_start",
      "label": "Ideal start date",
      "type": "date"
    },
    {
      "id": "pay_range",
      "label": "Pay range you have in mind",
      "type": "short_text",
      "help": "Use the range from your pay grid, not a guess.",
      "max_length": 100
    },
    {
      "id": "reports_to",
      "label": "Who will this person report to?",
      "type": "short_text",
      "max_length": 150
    },
    {
      "id": "must_have_skills",
      "label": "What must the person be able to do?",
      "type": "long_text",
      "required": true,
      "max_length": 1000
    },
    {
      "id": "business_case",
      "label": "Why do we need this hire now?",
      "type": "long_text",
      "required": true,
      "max_length": 1500
    },
    {
      "id": "budget_confirmed",
      "label": "Budget for this role is already approved",
      "type": "checkbox"
    }
  ]
}