> For clean Markdown of any page, append .md to the page URL.
> For a complete documentation index, see https://docs.a1.uk.astutepayroll.in/llms.txt.
> For AI client integration (Claude Code, Cursor, etc.), connect to the MCP server at https://docs.a1.uk.astutepayroll.in/_mcp/server.

# Create Employee

POST {{baseUrl}}/draft-employee/create-from-draft-employee
Content-Type: application/json

Create a new employee with personal details and engagement/job configuration.

Reference: https://docs.a1.uk.astutepayroll.in/api-reference/employee/create-employee

## Authentication

- `Authorization` header (bearer token, required) — Bearer authentication of the form `Bearer <token>`, where token is your auth token.

## Request

### Headers

- `vnd.a1.tenant-id` (string, optional) — Tenant identifier for multi-tenant environments

### Body (application/json)

This endpoint expects an EmployeeCreate.

- `personalDetails` (EmployeeCreatePersonalDetails, required) — Personal details of the employee
- `engagement` (list of EmployeeCreateEngagementItems, required) — Engagement and job assignment details. Exactly one engagement.

## Response

### 201

Request processed

- `id` (string, optional) — User id of the new employee (not a UUID), used by Get Employee and the update endpoints
- `status` (enum, optional) — The employee was created and activated
  - Allowed values: `SUCCESS`
- `message` (string, optional)

## Errors

### 400 Bad Request Error

Bad Request — validation error; nothing was created

- `any`

### 409 Conflict Error

Conflict — the primary email is already taken; nothing was created

- `any`

### 422 Unprocessable Entity Error

Unprocessable — a draft employee was created but could not be activated

- `any`

## Types

### EmployeeCreatePersonalDetails

Personal details of the employee

- `nameFirst` (string, required) — First name
- `nameLast` (string, required) — Last name
- `dateOfBirth` (date, required) — Date of birth (ISO 8601)
- `gender` (enum, required) — Gender
  - Allowed values: `MALE`, `FEMALE`, `NOT_STATED`
- `contact` (EmployeeCreatePersonalDetailsContact, required) — Contact details
- `nameTitle` (string, optional) — Title (e.g. Mr, Mrs, Ms, Dr)
- `nameMiddle` (string, optional) — Middle name
- `nameKnownAs` (string, optional) — Preferred name
- `maritalStatus` (enum, optional) — Marital status
  - Allowed values: `SINGLE`, `MARRIED`, `DIVORCED`, `WIDOWED`, `CIVIL_PARTNERSHIP`, `UNKNOWN`
- `postalAddress` (EmployeeCreatePersonalDetailsPostalAddress, optional) — Postal address

### EmployeeCreateEngagementItems

- `payrollCompanyId` (string, required) — UUID of the payroll company
- `permissionGroup` (string, required) — Permission group for the engagement
- `payType` (enum, required) — Pay type
  - Allowed values: `PAYE`, `SUBCONTRACTOR`
- `payTypeId` (integer, required) — Pay type ID
- `engagementType` (enum, required) — Engagement type. Required unless payType is SUBCONTRACTOR.
  - Allowed values: `FULL_TIME`, `CASUAL`, `PART_TIME`, `LABOUR_HIRE`
- `startDate` (date, required) — Engagement start date (ISO 8601)
- `fulltimeWork` (string, required) — Full-time work schedule description
- `job` (list of EmployeeCreateEngagementItemsJobItems, required) — Job assignment within this engagement. Exactly one job.
- `payCycleId` (string, optional) — UUID of the pay cycle
- `terminationDate` (date, optional) — Termination date if applicable
- `terminationReason` (string, optional) — Reason for termination

### EmployeeCreatePersonalDetailsContact

Contact details

- `primaryEmail` (string, required) — Primary email address. Must not be used by another user.
- `payslipEmail` (string, optional) — Email address for payslip delivery
- `phone` (EmployeeCreatePersonalDetailsContactPhone, optional) — Phone number
- `mobile` (EmployeeCreatePersonalDetailsContactMobile, optional) — Mobile number

### EmployeeCreatePersonalDetailsPostalAddress

Postal address

- `line1` (string, optional)
- `line2` (string, optional)
- `townCity` (string, optional)
- `country` (string, optional)
- `foreignCountry` (string, optional) — Country name when `country` is `OutsideUK`
- `postcode` (string, optional)
- `state` (string, optional)

### EmployeeCreateEngagementItemsJobItems

- `workplaceId` (integer, required) — Workplace ID
- `primaryApproverId` (string, required) — UUID of the primary approver
- `timesheetType` (string, required) — Timesheet type
- `timesheetLength` (string, required) — Timesheet period length. Required when timesheetEnable is true.
- `jobDetails` (EmployeeCreateEngagementItemsJobItemsJobDetails, required) — Job details
- `customerUuid` (string, optional) — UUID of the customer/client
- `secondaryApproverId` (string, optional) — UUID of the secondary approver
- `expenseApproverId` (string, optional) — UUID of the expense approver
- `enableLeave` (boolean, optional) — Whether leave is enabled for this job
- `enableExpenses` (boolean, optional) — Whether expenses are enabled for this job
- `payFrequency` (string, optional) — Pay frequency
- `timesheetEnable` (boolean, optional) — Whether timesheets are enabled
- `timesheetStart` (string, optional) — Timesheet start day (name or 0-based index)
- `variableTimesheet` (boolean, optional) — Whether variable timesheets are allowed
- `splitShifts` (boolean, optional) — Whether split shifts are allowed
- `timesheetForPayroll` (boolean, optional) — Whether timesheets feed into payroll
- `rateCard` (string, optional) — Rate card reference
- `ruleGroup` (string, optional) — Rule group reference
- `companyUuid` (string, optional) — UUID of the company for this job
- `billingGroupUuid` (string, optional) — UUID of the billing group
- `glGroupUuid` (string, optional) — UUID of the GL group
- `payRates` (list of EmployeeCreateEngagementItemsJobItemsPayRatesItems, optional) — Dated pay rate, on-cost and charge rate for the job, one entry per rate. Entries without `startDate` are skipped. The rate in effect today becomes the job's current rate.

### EmployeeCreatePersonalDetailsContactPhone

Phone number

- `countryCode` (string, optional)
- `number` (string, optional)

### EmployeeCreatePersonalDetailsContactMobile

Mobile number

- `countryCode` (string, optional)
- `number` (string, optional)

### EmployeeCreateEngagementItemsJobItemsJobDetails

Job details

- `title` (string, required) — Job title
- `startDate` (date, required) — Job start date (ISO 8601). Not the start date of the pay rates, which is set on each `payRates[].startDate`.
- `finishDate` (date, optional) — Job end date (ISO 8601)

### EmployeeCreateEngagementItemsJobItemsPayRatesItems

- `rateType` (enum, required) — `PAY_RATE` (pay rate), `PAY_ONCOST` (on-cost) or `CHARGE_RATE` (charge rate)
  - Allowed values: `PAY_RATE`, `PAY_ONCOST`, `CHARGE_RATE`
- `rate` (double, required) — Rate amount
- `startDate` (date, required) — Date this rate takes effect. Separate from the job start date (`jobDetails.startDate`); it must be on or after it.
- `endDate` (date, optional, nullable) — Date the rate ends. Must not be earlier than `startDate`.

## Examples

**Request**

```json
{
  "personalDetails": {
    "nameFirst": "John",
    "nameLast": "Doe",
    "dateOfBirth": "2004-02-01",
    "gender": "MALE",
    "contact": {
      "primaryEmail": "john.doe@example.com",
      "phone": {
        "countryCode": "91",
        "number": "7878009686"
      },
      "mobile": {
        "countryCode": "91",
        "number": "7878009686"
      }
    },
    "nameTitle": "Mr",
    "nameMiddle": "A",
    "nameKnownAs": "Johnny"
  },
  "engagement": [
    {
      "payrollCompanyId": "a169f209-b362-4a01-add2-c7bd7f0be6cb",
      "permissionGroup": "Contingent",
      "payType": "PAYE",
      "payTypeId": 0,
      "engagementType": "CASUAL",
      "startDate": "2026-02-01",
      "fulltimeWork": "Mon-Fri (40 hours) - Hourly",
      "job": [
        {
          "workplaceId": 1,
          "primaryApproverId": "d7524879-953e-4788-b279-4f780973078e",
          "timesheetType": "Hourly",
          "timesheetLength": "Weekly",
          "jobDetails": {
            "title": "Software Engineer",
            "startDate": "2026-02-01",
            "timesheetStartDate": "2026-02-01"
          },
          "customerUuid": "68b527c6-b331-453e-a06f-cab8d9bc1ccf",
          "enableLeave": true,
          "timesheetEnable": true,
          "timesheetStart": "6",
          "variableTimesheet": true,
          "splitShifts": true,
          "timesheetForPayroll": true,
          "payRates": [
            {
              "rateType": "PAY_RATE",
              "rate": 25.5,
              "startDate": "2026-02-01"
            },
            {
              "rateType": "PAY_ONCOST",
              "rate": 3.2,
              "startDate": "2026-02-01"
            },
            {
              "rateType": "CHARGE_RATE",
              "rate": 35,
              "startDate": "2026-02-01"
            }
          ]
        }
      ],
      "payCycleId": "5cc42cbb-8443-47b4-8f82-66c0f4994f83"
    }
  ]
}
```

**Response**

```json
{
  "id": "axgZDy2kxi6mbvC9sNDL5dMs",
  "status": "SUCCESS",
  "message": "success"
}
```

**SDK Code**

```python
import requests

url = "https://{{baseurl}}/draft-employee/create-from-draft-employee"

payload = {
    "personalDetails": {
        "nameFirst": "John",
        "nameLast": "Doe",
        "dateOfBirth": "2004-02-01",
        "gender": "MALE",
        "contact": {
            "primaryEmail": "john.doe@example.com",
            "phone": {
                "countryCode": "91",
                "number": "7878009686"
            },
            "mobile": {
                "countryCode": "91",
                "number": "7878009686"
            }
        },
        "nameTitle": "Mr",
        "nameMiddle": "A",
        "nameKnownAs": "Johnny"
    },
    "engagement": [
        {
            "payrollCompanyId": "a169f209-b362-4a01-add2-c7bd7f0be6cb",
            "permissionGroup": "Contingent",
            "payType": "PAYE",
            "payTypeId": 0,
            "engagementType": "CASUAL",
            "startDate": "2026-02-01",
            "fulltimeWork": "Mon-Fri (40 hours) - Hourly",
            "job": [
                {
                    "workplaceId": 1,
                    "primaryApproverId": "d7524879-953e-4788-b279-4f780973078e",
                    "timesheetType": "Hourly",
                    "timesheetLength": "Weekly",
                    "jobDetails": {
                        "title": "Software Engineer",
                        "startDate": "2026-02-01",
                        "timesheetStartDate": "2026-02-01"
                    },
                    "customerUuid": "68b527c6-b331-453e-a06f-cab8d9bc1ccf",
                    "enableLeave": True,
                    "timesheetEnable": True,
                    "timesheetStart": "6",
                    "variableTimesheet": True,
                    "splitShifts": True,
                    "timesheetForPayroll": True,
                    "payRates": [
                        {
                            "rateType": "PAY_RATE",
                            "rate": 25.5,
                            "startDate": "2026-02-01"
                        },
                        {
                            "rateType": "PAY_ONCOST",
                            "rate": 3.2,
                            "startDate": "2026-02-01"
                        },
                        {
                            "rateType": "CHARGE_RATE",
                            "rate": 35,
                            "startDate": "2026-02-01"
                        }
                    ]
                }
            ],
            "payCycleId": "5cc42cbb-8443-47b4-8f82-66c0f4994f83"
        }
    ]
}
headers = {
    "Authorization": "Bearer <token>",
    "Content-Type": "application/json"
}

response = requests.post(url, json=payload, headers=headers)

print(response.json())
```

```javascript
const url = 'https://{{baseurl}}/draft-employee/create-from-draft-employee';
const options = {
  method: 'POST',
  headers: {Authorization: 'Bearer <token>', 'Content-Type': 'application/json'},
  body: '{"personalDetails":{"nameFirst":"John","nameLast":"Doe","dateOfBirth":"2004-02-01","gender":"MALE","contact":{"primaryEmail":"john.doe@example.com","phone":{"countryCode":"91","number":"7878009686"},"mobile":{"countryCode":"91","number":"7878009686"}},"nameTitle":"Mr","nameMiddle":"A","nameKnownAs":"Johnny"},"engagement":[{"payrollCompanyId":"a169f209-b362-4a01-add2-c7bd7f0be6cb","permissionGroup":"Contingent","payType":"PAYE","payTypeId":0,"engagementType":"CASUAL","startDate":"2026-02-01","fulltimeWork":"Mon-Fri (40 hours) - Hourly","job":[{"workplaceId":1,"primaryApproverId":"d7524879-953e-4788-b279-4f780973078e","timesheetType":"Hourly","timesheetLength":"Weekly","jobDetails":{"title":"Software Engineer","startDate":"2026-02-01","timesheetStartDate":"2026-02-01"},"customerUuid":"68b527c6-b331-453e-a06f-cab8d9bc1ccf","enableLeave":true,"timesheetEnable":true,"timesheetStart":"6","variableTimesheet":true,"splitShifts":true,"timesheetForPayroll":true,"payRates":[{"rateType":"PAY_RATE","rate":25.5,"startDate":"2026-02-01"},{"rateType":"PAY_ONCOST","rate":3.2,"startDate":"2026-02-01"},{"rateType":"CHARGE_RATE","rate":35,"startDate":"2026-02-01"}]}],"payCycleId":"5cc42cbb-8443-47b4-8f82-66c0f4994f83"}]}'
};

try {
  const response = await fetch(url, options);
  const data = await response.json();
  console.log(data);
} catch (error) {
  console.error(error);
}
```

```go
package main

import (
	"fmt"
	"strings"
	"net/http"
	"io"
)

func main() {

	url := "https://{{baseurl}}/draft-employee/create-from-draft-employee"

	payload := strings.NewReader("{\n  \"personalDetails\": {\n    \"nameFirst\": \"John\",\n    \"nameLast\": \"Doe\",\n    \"dateOfBirth\": \"2004-02-01\",\n    \"gender\": \"MALE\",\n    \"contact\": {\n      \"primaryEmail\": \"john.doe@example.com\",\n      \"phone\": {\n        \"countryCode\": \"91\",\n        \"number\": \"7878009686\"\n      },\n      \"mobile\": {\n        \"countryCode\": \"91\",\n        \"number\": \"7878009686\"\n      }\n    },\n    \"nameTitle\": \"Mr\",\n    \"nameMiddle\": \"A\",\n    \"nameKnownAs\": \"Johnny\"\n  },\n  \"engagement\": [\n    {\n      \"payrollCompanyId\": \"a169f209-b362-4a01-add2-c7bd7f0be6cb\",\n      \"permissionGroup\": \"Contingent\",\n      \"payType\": \"PAYE\",\n      \"payTypeId\": 0,\n      \"engagementType\": \"CASUAL\",\n      \"startDate\": \"2026-02-01\",\n      \"fulltimeWork\": \"Mon-Fri (40 hours) - Hourly\",\n      \"job\": [\n        {\n          \"workplaceId\": 1,\n          \"primaryApproverId\": \"d7524879-953e-4788-b279-4f780973078e\",\n          \"timesheetType\": \"Hourly\",\n          \"timesheetLength\": \"Weekly\",\n          \"jobDetails\": {\n            \"title\": \"Software Engineer\",\n            \"startDate\": \"2026-02-01\",\n            \"timesheetStartDate\": \"2026-02-01\"\n          },\n          \"customerUuid\": \"68b527c6-b331-453e-a06f-cab8d9bc1ccf\",\n          \"enableLeave\": true,\n          \"timesheetEnable\": true,\n          \"timesheetStart\": \"6\",\n          \"variableTimesheet\": true,\n          \"splitShifts\": true,\n          \"timesheetForPayroll\": true,\n          \"payRates\": [\n            {\n              \"rateType\": \"PAY_RATE\",\n              \"rate\": 25.5,\n              \"startDate\": \"2026-02-01\"\n            },\n            {\n              \"rateType\": \"PAY_ONCOST\",\n              \"rate\": 3.2,\n              \"startDate\": \"2026-02-01\"\n            },\n            {\n              \"rateType\": \"CHARGE_RATE\",\n              \"rate\": 35,\n              \"startDate\": \"2026-02-01\"\n            }\n          ]\n        }\n      ],\n      \"payCycleId\": \"5cc42cbb-8443-47b4-8f82-66c0f4994f83\"\n    }\n  ]\n}")

	req, _ := http.NewRequest("POST", url, payload)

	req.Header.Add("Authorization", "Bearer <token>")
	req.Header.Add("Content-Type", "application/json")

	res, _ := http.DefaultClient.Do(req)

	defer res.Body.Close()
	body, _ := io.ReadAll(res.Body)

	fmt.Println(res)
	fmt.Println(string(body))

}
```

```ruby
require 'uri'
require 'net/http'

url = URI("https://{{baseurl}}/draft-employee/create-from-draft-employee")

http = Net::HTTP.new(url.host, url.port)
http.use_ssl = true

request = Net::HTTP::Post.new(url)
request["Authorization"] = 'Bearer <token>'
request["Content-Type"] = 'application/json'
request.body = "{\n  \"personalDetails\": {\n    \"nameFirst\": \"John\",\n    \"nameLast\": \"Doe\",\n    \"dateOfBirth\": \"2004-02-01\",\n    \"gender\": \"MALE\",\n    \"contact\": {\n      \"primaryEmail\": \"john.doe@example.com\",\n      \"phone\": {\n        \"countryCode\": \"91\",\n        \"number\": \"7878009686\"\n      },\n      \"mobile\": {\n        \"countryCode\": \"91\",\n        \"number\": \"7878009686\"\n      }\n    },\n    \"nameTitle\": \"Mr\",\n    \"nameMiddle\": \"A\",\n    \"nameKnownAs\": \"Johnny\"\n  },\n  \"engagement\": [\n    {\n      \"payrollCompanyId\": \"a169f209-b362-4a01-add2-c7bd7f0be6cb\",\n      \"permissionGroup\": \"Contingent\",\n      \"payType\": \"PAYE\",\n      \"payTypeId\": 0,\n      \"engagementType\": \"CASUAL\",\n      \"startDate\": \"2026-02-01\",\n      \"fulltimeWork\": \"Mon-Fri (40 hours) - Hourly\",\n      \"job\": [\n        {\n          \"workplaceId\": 1,\n          \"primaryApproverId\": \"d7524879-953e-4788-b279-4f780973078e\",\n          \"timesheetType\": \"Hourly\",\n          \"timesheetLength\": \"Weekly\",\n          \"jobDetails\": {\n            \"title\": \"Software Engineer\",\n            \"startDate\": \"2026-02-01\",\n            \"timesheetStartDate\": \"2026-02-01\"\n          },\n          \"customerUuid\": \"68b527c6-b331-453e-a06f-cab8d9bc1ccf\",\n          \"enableLeave\": true,\n          \"timesheetEnable\": true,\n          \"timesheetStart\": \"6\",\n          \"variableTimesheet\": true,\n          \"splitShifts\": true,\n          \"timesheetForPayroll\": true,\n          \"payRates\": [\n            {\n              \"rateType\": \"PAY_RATE\",\n              \"rate\": 25.5,\n              \"startDate\": \"2026-02-01\"\n            },\n            {\n              \"rateType\": \"PAY_ONCOST\",\n              \"rate\": 3.2,\n              \"startDate\": \"2026-02-01\"\n            },\n            {\n              \"rateType\": \"CHARGE_RATE\",\n              \"rate\": 35,\n              \"startDate\": \"2026-02-01\"\n            }\n          ]\n        }\n      ],\n      \"payCycleId\": \"5cc42cbb-8443-47b4-8f82-66c0f4994f83\"\n    }\n  ]\n}"

response = http.request(request)
puts response.read_body
```

```java
import com.mashape.unirest.http.HttpResponse;
import com.mashape.unirest.http.Unirest;

HttpResponse<String> response = Unirest.post("https://{{baseurl}}/draft-employee/create-from-draft-employee")
  .header("Authorization", "Bearer <token>")
  .header("Content-Type", "application/json")
  .body("{\n  \"personalDetails\": {\n    \"nameFirst\": \"John\",\n    \"nameLast\": \"Doe\",\n    \"dateOfBirth\": \"2004-02-01\",\n    \"gender\": \"MALE\",\n    \"contact\": {\n      \"primaryEmail\": \"john.doe@example.com\",\n      \"phone\": {\n        \"countryCode\": \"91\",\n        \"number\": \"7878009686\"\n      },\n      \"mobile\": {\n        \"countryCode\": \"91\",\n        \"number\": \"7878009686\"\n      }\n    },\n    \"nameTitle\": \"Mr\",\n    \"nameMiddle\": \"A\",\n    \"nameKnownAs\": \"Johnny\"\n  },\n  \"engagement\": [\n    {\n      \"payrollCompanyId\": \"a169f209-b362-4a01-add2-c7bd7f0be6cb\",\n      \"permissionGroup\": \"Contingent\",\n      \"payType\": \"PAYE\",\n      \"payTypeId\": 0,\n      \"engagementType\": \"CASUAL\",\n      \"startDate\": \"2026-02-01\",\n      \"fulltimeWork\": \"Mon-Fri (40 hours) - Hourly\",\n      \"job\": [\n        {\n          \"workplaceId\": 1,\n          \"primaryApproverId\": \"d7524879-953e-4788-b279-4f780973078e\",\n          \"timesheetType\": \"Hourly\",\n          \"timesheetLength\": \"Weekly\",\n          \"jobDetails\": {\n            \"title\": \"Software Engineer\",\n            \"startDate\": \"2026-02-01\",\n            \"timesheetStartDate\": \"2026-02-01\"\n          },\n          \"customerUuid\": \"68b527c6-b331-453e-a06f-cab8d9bc1ccf\",\n          \"enableLeave\": true,\n          \"timesheetEnable\": true,\n          \"timesheetStart\": \"6\",\n          \"variableTimesheet\": true,\n          \"splitShifts\": true,\n          \"timesheetForPayroll\": true,\n          \"payRates\": [\n            {\n              \"rateType\": \"PAY_RATE\",\n              \"rate\": 25.5,\n              \"startDate\": \"2026-02-01\"\n            },\n            {\n              \"rateType\": \"PAY_ONCOST\",\n              \"rate\": 3.2,\n              \"startDate\": \"2026-02-01\"\n            },\n            {\n              \"rateType\": \"CHARGE_RATE\",\n              \"rate\": 35,\n              \"startDate\": \"2026-02-01\"\n            }\n          ]\n        }\n      ],\n      \"payCycleId\": \"5cc42cbb-8443-47b4-8f82-66c0f4994f83\"\n    }\n  ]\n}")
  .asString();
```

```php
<?php
require_once('vendor/autoload.php');

$client = new \GuzzleHttp\Client();

$response = $client->request('POST', 'https://{{baseurl}}/draft-employee/create-from-draft-employee', [
  'body' => '{
  "personalDetails": {
    "nameFirst": "John",
    "nameLast": "Doe",
    "dateOfBirth": "2004-02-01",
    "gender": "MALE",
    "contact": {
      "primaryEmail": "john.doe@example.com",
      "phone": {
        "countryCode": "91",
        "number": "7878009686"
      },
      "mobile": {
        "countryCode": "91",
        "number": "7878009686"
      }
    },
    "nameTitle": "Mr",
    "nameMiddle": "A",
    "nameKnownAs": "Johnny"
  },
  "engagement": [
    {
      "payrollCompanyId": "a169f209-b362-4a01-add2-c7bd7f0be6cb",
      "permissionGroup": "Contingent",
      "payType": "PAYE",
      "payTypeId": 0,
      "engagementType": "CASUAL",
      "startDate": "2026-02-01",
      "fulltimeWork": "Mon-Fri (40 hours) - Hourly",
      "job": [
        {
          "workplaceId": 1,
          "primaryApproverId": "d7524879-953e-4788-b279-4f780973078e",
          "timesheetType": "Hourly",
          "timesheetLength": "Weekly",
          "jobDetails": {
            "title": "Software Engineer",
            "startDate": "2026-02-01",
            "timesheetStartDate": "2026-02-01"
          },
          "customerUuid": "68b527c6-b331-453e-a06f-cab8d9bc1ccf",
          "enableLeave": true,
          "timesheetEnable": true,
          "timesheetStart": "6",
          "variableTimesheet": true,
          "splitShifts": true,
          "timesheetForPayroll": true,
          "payRates": [
            {
              "rateType": "PAY_RATE",
              "rate": 25.5,
              "startDate": "2026-02-01"
            },
            {
              "rateType": "PAY_ONCOST",
              "rate": 3.2,
              "startDate": "2026-02-01"
            },
            {
              "rateType": "CHARGE_RATE",
              "rate": 35,
              "startDate": "2026-02-01"
            }
          ]
        }
      ],
      "payCycleId": "5cc42cbb-8443-47b4-8f82-66c0f4994f83"
    }
  ]
}',
  'headers' => [
    'Authorization' => 'Bearer <token>',
    'Content-Type' => 'application/json',
  ],
]);

echo $response->getBody();
```

```csharp
using RestSharp;

var client = new RestClient("https://{{baseurl}}/draft-employee/create-from-draft-employee");
var request = new RestRequest(Method.POST);
request.AddHeader("Authorization", "Bearer <token>");
request.AddHeader("Content-Type", "application/json");
request.AddParameter("application/json", "{\n  \"personalDetails\": {\n    \"nameFirst\": \"John\",\n    \"nameLast\": \"Doe\",\n    \"dateOfBirth\": \"2004-02-01\",\n    \"gender\": \"MALE\",\n    \"contact\": {\n      \"primaryEmail\": \"john.doe@example.com\",\n      \"phone\": {\n        \"countryCode\": \"91\",\n        \"number\": \"7878009686\"\n      },\n      \"mobile\": {\n        \"countryCode\": \"91\",\n        \"number\": \"7878009686\"\n      }\n    },\n    \"nameTitle\": \"Mr\",\n    \"nameMiddle\": \"A\",\n    \"nameKnownAs\": \"Johnny\"\n  },\n  \"engagement\": [\n    {\n      \"payrollCompanyId\": \"a169f209-b362-4a01-add2-c7bd7f0be6cb\",\n      \"permissionGroup\": \"Contingent\",\n      \"payType\": \"PAYE\",\n      \"payTypeId\": 0,\n      \"engagementType\": \"CASUAL\",\n      \"startDate\": \"2026-02-01\",\n      \"fulltimeWork\": \"Mon-Fri (40 hours) - Hourly\",\n      \"job\": [\n        {\n          \"workplaceId\": 1,\n          \"primaryApproverId\": \"d7524879-953e-4788-b279-4f780973078e\",\n          \"timesheetType\": \"Hourly\",\n          \"timesheetLength\": \"Weekly\",\n          \"jobDetails\": {\n            \"title\": \"Software Engineer\",\n            \"startDate\": \"2026-02-01\",\n            \"timesheetStartDate\": \"2026-02-01\"\n          },\n          \"customerUuid\": \"68b527c6-b331-453e-a06f-cab8d9bc1ccf\",\n          \"enableLeave\": true,\n          \"timesheetEnable\": true,\n          \"timesheetStart\": \"6\",\n          \"variableTimesheet\": true,\n          \"splitShifts\": true,\n          \"timesheetForPayroll\": true,\n          \"payRates\": [\n            {\n              \"rateType\": \"PAY_RATE\",\n              \"rate\": 25.5,\n              \"startDate\": \"2026-02-01\"\n            },\n            {\n              \"rateType\": \"PAY_ONCOST\",\n              \"rate\": 3.2,\n              \"startDate\": \"2026-02-01\"\n            },\n            {\n              \"rateType\": \"CHARGE_RATE\",\n              \"rate\": 35,\n              \"startDate\": \"2026-02-01\"\n            }\n          ]\n        }\n      ],\n      \"payCycleId\": \"5cc42cbb-8443-47b4-8f82-66c0f4994f83\"\n    }\n  ]\n}", ParameterType.RequestBody);
IRestResponse response = client.Execute(request);
```

```swift
import Foundation

let headers = [
  "Authorization": "Bearer <token>",
  "Content-Type": "application/json"
]
let parameters = [
  "personalDetails": [
    "nameFirst": "John",
    "nameLast": "Doe",
    "dateOfBirth": "2004-02-01",
    "gender": "MALE",
    "contact": [
      "primaryEmail": "john.doe@example.com",
      "phone": [
        "countryCode": "91",
        "number": "7878009686"
      ],
      "mobile": [
        "countryCode": "91",
        "number": "7878009686"
      ]
    ],
    "nameTitle": "Mr",
    "nameMiddle": "A",
    "nameKnownAs": "Johnny"
  ],
  "engagement": [
    [
      "payrollCompanyId": "a169f209-b362-4a01-add2-c7bd7f0be6cb",
      "permissionGroup": "Contingent",
      "payType": "PAYE",
      "payTypeId": 0,
      "engagementType": "CASUAL",
      "startDate": "2026-02-01",
      "fulltimeWork": "Mon-Fri (40 hours) - Hourly",
      "job": [
        [
          "workplaceId": 1,
          "primaryApproverId": "d7524879-953e-4788-b279-4f780973078e",
          "timesheetType": "Hourly",
          "timesheetLength": "Weekly",
          "jobDetails": [
            "title": "Software Engineer",
            "startDate": "2026-02-01",
            "timesheetStartDate": "2026-02-01"
          ],
          "customerUuid": "68b527c6-b331-453e-a06f-cab8d9bc1ccf",
          "enableLeave": true,
          "timesheetEnable": true,
          "timesheetStart": "6",
          "variableTimesheet": true,
          "splitShifts": true,
          "timesheetForPayroll": true,
          "payRates": [
            [
              "rateType": "PAY_RATE",
              "rate": 25.5,
              "startDate": "2026-02-01"
            ],
            [
              "rateType": "PAY_ONCOST",
              "rate": 3.2,
              "startDate": "2026-02-01"
            ],
            [
              "rateType": "CHARGE_RATE",
              "rate": 35,
              "startDate": "2026-02-01"
            ]
          ]
        ]
      ],
      "payCycleId": "5cc42cbb-8443-47b4-8f82-66c0f4994f83"
    ]
  ]
] as [String : Any]

let postData = JSONSerialization.data(withJSONObject: parameters, options: [])

let request = NSMutableURLRequest(url: NSURL(string: "https://{{baseurl}}/draft-employee/create-from-draft-employee")! as URL,
                                        cachePolicy: .useProtocolCachePolicy,
                                    timeoutInterval: 10.0)
request.httpMethod = "POST"
request.allHTTPHeaderFields = headers
request.httpBody = postData as Data

let session = URLSession.shared
let dataTask = session.dataTask(with: request as URLRequest, completionHandler: { (data, response, error) -> Void in
  if (error != nil) {
    print(error as Any)
  } else {
    let httpResponse = response as? HTTPURLResponse
    print(httpResponse)
  }
})

dataTask.resume()
```