Overview
The Easy Employer API provides secure, programmatic access to core features of the Easy Employer platform. It enables integration with HR, payroll, rostering, and other third-party systems for automating data flow and business processes.
This guide provides a high-level introduction to using the Easy Employer API, including authentication, usage, endpoint categories, and key considerations.
Related Articles
Contents
- Overview
- Related Articles
- Authentication
- API Base URL
- API Categories
- Sample Request and Response
- Error Handling
- Support
- Ability API
- Appointment API
- Availability API
- Award API
- Childcare API
- Cost API
- Custom Entity API
- Entitlement API
- Group API
- Leave API
- Pay Condition API
- Payroll API
- Role API
- Roster API
- Rule API
- Settings API
- Shift API
- Task API
- Timesheet API
- User API
- Webhook API
Authentication
The Easy Employer API uses Basic Authentication. Include your API credentials encoded in Base64 within the request header. All requests must also specify the desired response format using the Accept header.
Authorization: Basic BASE64_ENCODED_USERNAME_AND_PASSWORD Accept: application/json
Contact Easy Employer Support to obtain your credentials. Never share or expose these credentials publicly.
API Base URL
Production: https://secure.easyemployer.com/ Sandbox: https://sandbox.easyemployer.com/ UAT: https://uat.easyemployer.com/
API Categories
Endpoints are grouped by functional category. Common categories include:
- User: Create, update, deactivate users and access user profiles.
- Appointment: Manage appointments, cancellations, deliveries, and status.
- Custom Entity: Retrieve and manage entities like clients, services, and funding schemes.
- Group: Access organisational structure, areas, and roles.
- Roster: Manage roster shifts, templates, communications, and costing.
- Timesheet: Finalise and retrieve timesheet data for payroll processing.
- Ability: View and update employee qualifications and links.
- Webhook: Configure webhook subscriptions and receive push events.
- Childcare: Manage attendance and related records for childcare environments.
Sample Request and Response
Example: Get a list of users
GET /api/2/users?status=1 HTTP/1.1 Host: secure.easyemployer.com Authorization: Bearer YOUR_API_TOKEN_HERE
Response:
{
"users": [
{
"user_id": 163,
"export_code": "User1",
"first_name": "John",
"surname": "Doe",
"status": 1
}
]
}Error Handling
NOTE: API errors return standard HTTP codes. Common error types include:
- 400: Bad request – check parameters and structure
- 401: Unauthorized – invalid or missing token
- 403: Forbidden – token lacks permissions
- 404: Not found – invalid resource reference
- 500: Server error – contact support
Support
If you encounter issues using the API, log a support ticket with full request and response examples.
Last updated: 2025-07-11
Ability API
Endpoints for the ability category:
-
GET
/org/{org}/ability— Get all abilities -
POST
/org/{org}/ability— Create an ability -
PUT
/org/{org}/ability/{id}— Update an ability -
GET
/org/{org}/user_ability/{user_ability_id}— Get a user's ability -
PUT
/org/{org}/user_ability/{user_ability_id}— Update a user's ability -
GET
/org/{org}/user_ability— Get the links between users and abilities- Query string parameters
- Filters
- Examples
date_last_modified|not=1746007782date_last_modified|in=1746007782,1746008888,1746009999date_last_modified|null=truedate_last_modified|gt=1746007782date_last_modified|gte=1746007782date_last_modified|lt=1746007782date_last_modified|lte=1746007782date_last_modified|eq=1746007782
- Operators
not(not equal)in(in list)not_in(not in list)null(is null)not_null(is not null)gt(greater than)gte(greater than or equal)lt(less than)lte(less than or equal)
- Examples
- Filters
- Query string parameters
-
POST
/org/{org}/user_ability— Add a user's ability.
Appointment API
Endpoints for the appointment category:
-
GET
/api/1/appointments— Get appointments -
PUT
/api/1/appointments— Update one or more appointments -
POST
/api/1/appointments— Create one or more appointments -
DELETE
/api/1/appointments— Delete one or more appointments in an organisation -
GET
/api/1/appointments/regions— Get a list of all the appointment regions in an organisation -
PUT
/api/1/appointments/{id}/cancel— Mark a single appointment as cancelled -
PUT
/api/1/appointments/{id}/uncancel— Remove cancelled status from a single appointment -
PUT
/api/1/appointments/{id}/deliver— Mark a single appointment as delivered -
PUT
/api/1/appointments/{id}/undeliver— Remove delivered status from a single appointment -
GET
/api/1/appointment_actual_shifts— Get actual clocked shifts for appointments -
PUT
/api/1/appointment_actual_shifts— Update actual clocked shifts for appointments -
POST
/api/1/appointment_actual_shifts— Create actual clocked shifts for appointments -
GET
/api/1/billing_item_outcomes— Get Billing item outcomes -
PUT
/api/1/billing_item_outcomes— Update a Billing item outcome -
POST
/api/1/billing_item_outcomes— Create a Billing item outcome
Availability API
Endpoints for the availability category:
-
GET
/api/1/user/{user_id}/availability— Get a user's availability -
PUT
/api/1/user/{user_id}/availability— Create a user availability
Award API
Endpoints for the award category:
-
GET
/api/2/awards— Get awards
Childcare API
Endpoints for the childcare category:
-
GET
/api/2/child_attendance/{child_attandance_id}— Get child attendance -
GET
/api/2/child_attendance— Get child attendances -
PUT
/api/2/child_attendance— Update child attendances -
POST
/api/2/child_attendance— Create child attendances -
DELETE
/api/2/child_attendance— Delete child attendances
Cost API
Endpoints for the cost category:
-
POST
/api/2/shifts/costing— Shift costing -
PUT
/api/1/costs/assigned-roster-shifts/remote-period— Get roster shift costs -
GET
/org/{org}/cost— Get period costs-
Query string parameters
-
Data return
-
page- page of results to fetch -
per_page- results to fetch per page -
origin_date_start|gte- start of the shift which created this cost, greater than or equal to this value -
origin_date_start|lte- start of the shift which created this cost, less than this value -
period- filter to a type of period: r for roster costs, rt for roster template costs, and t for timesheet costs -
group_id|in- filter to groups, e.g. group_id|in=31,29 - Sorting
-
sort_order- e.g. origin_date_start to sort the data return based on the date start -
sort_order_dir- asc or desc - the order of the data returned
-
-
cost_hours|gte- e.g. 1, the return data will only return cost records with hours greather than or equal to 1 -
include[leave_type]- to include the leave type for the leave shift
-
-
Filters
-
Examples
date_last_modified|not=1746007782date_last_modified|in=1746007782,1746008888,1746009999date_last_modified|null=truedate_last_modified|gt=1746007782date_last_modified|gte=1746007782date_last_modified|lt=1746007782date_last_modified|lte=1746007782date_last_modified|eq=1746007782-
group[site_name] = siteNamefilters the data based on the site_name located within the groups nested object,include[group]data return must be included to be able to filter by site_name. Only a single site filter is supported
-
Operators
not(not equal)in(in list)not_in(not in list)null(is null)not_null(is not null)gt(greater than)gte(greater than or equal)lt(less than)lte(less than or equal)
-
Examples
-
Exclude
-
without_permissions = 1- excludes permissions being returned
-
-
Data return
-
Query string parameters
-
GET
/api/1/costs/real-time— Get realtime costs
Custom Entity API
Endpoints for the custom entity category:
-
GET
/org/{org}/custom_entity_type— Get custom entity types -
POST
/org/{org}/custom_entity_type— Create a custom entity type -
GET
/org/{org}/custom_entity_type/{id}— Get a custom entity type -
GET
/org/{org}/cet/{custom_entity_type_name}— Get all custom entities in a type -
POST
/org/{org}/cet/{custom_entity_type_name}— Create a new custom entity -
GET
/org/{org}/cet/{custom_entity_type_name}/{id}— Get a custom entity -
PUT
/org/{org}/cet/{custom_entity_type_name}/{id}— Update a custom entity -
POST
/org/{org}/cet/{id}/groups— Update group allowed/disallowed lists -
POST
/org/{org}/cet/{id}/users— Update user allowed/disallowed lists -
POST
/org/{org}/cet/{id}/entities— Update custom entity allowed/disallowed lists -
GET
/api/1/custom_entity/{custom_entity_id}/ability— Get all abilities for a custom entity -
POST
/api/1/custom_entity/{custom_entity_id}/ability— Set abilities for a custom entity -
DELETE
/api/1/custom_entity/{custom_entity_id}/ability/{ability_id}— Remove an ability from a custom entity
Entitlement API
Endpoints for the entitlement category:
-
GET
/api/1/user_entitlement— Get entitlement balances -
PUT
/api/1/user_entitlement/balances— Update entitlement balances- Example JSON body
"balances": [ { "user_id": 1234, "entitlement_code": "rec", "amount": 55.8987 }, { "user_id": 1234, "entitlement_code": "lsl", "amount": 5.8962 }, { "user_id": 1234, "entitlement_code": "pc", "amount": 17.6124 }, { "user_id": 1111, "entitlement_code": "rec", "amount": 24.4657 }, { "user_id": 1111, "entitlement_code": "pc", "amount": 13.2589 } ] }
- Example JSON body
-
GET
/api/1/user_entitlement/projection— Get entitlement projection.
Group API
Endpoints for the group category:
-
GET
/api/1/group— Get all groups -
PUT
/api/1/group/{id}— Update a group external reference -
GET
/api/2/group/{id}/ability— Get all abilities for a group -
POST
/api/2/group/{id}/ability— Set abilities for a group -
PUT
/api/2/group/{id}/ability/{ability_id}— Update requirement of an ability for group -
DELETE
/api/2/group/{id}/ability/{ability_id}— Remove an ability from a group -
GET
/api/1/user_group— No summary provided. -
POST
/api/1/user_group— No summary provided. -
DELETE
/api/1/user_group— No summary provided. -
GET
/org/{org}/user_group/{id}— No summary provided. -
PUT
/org/{org}/user_group/{id}— No summary provided.
Leave API
Endpoints for the leave category:
-
GET
/org/{org}/leave_shift— Get all leave shifts-
Query string parameters
-
Data return
-
page- page of results to fetch -
per_page- results to fetch per page -
status- filter for active (1) or deleted (0) -
date_start|gte- the start date of the shift, greater than or equal to this value -
date_end|lte- the end date of the shifts, less than or equal to this value -
include[group]- include details of the group the shift is rostered to in the response -
include[roles] - include the custom entities associated with this shift in the response - Sorting
-
sort_order- e.g. date_start to sort the data return based on the date start -
sort_order_dir- asc or desc - the order of the data returned
-
-
calculated_length|gte- e.g. 1, the return data will not return and 0 length shfits -
include[leave_type]- to include the leave type for the leave shift
-
-
Filters
-
Examples
date_last_modified|not=1746007782date_last_modified|in=1746007782,1746008888,1746009999date_last_modified|null=truedate_last_modified|gt=1746007782date_last_modified|gte=1746007782date_last_modified|lt=1746007782date_last_modified|lte=1746007782date_last_modified|eq=1746007782-
group[site_name] = siteNamefilters the data based on the site_name located within the groups nested object,include[group]data return must be included to be able to filter by site_name. Only a single site filter is supported
-
Operators
not(not equal)in(in list)not_in(not in list)null(is null)not_null(is not null)gt(greater than)gte(greater than or equal)lt(less than)lte(less than or equal)
-
Examples
-
Exclude
-
without_permissions = 1- excludes permissions being returned from the assigned_roster_shifts object -
group[without_permissions] = 1- excludes permissions being returned from the group nested object
-
-
Data return
-
Query string parameters
-
PUT
/org/{org}/leave/{id}— Update a leave request -
DELETE
/org/{org}/leave/{id}— Delete a leave request -
GET
/org/{org}/leave— Get all leave- Example: {{baseUrl}}org/{{orgId}}/leave?user_id={{userId}}&status=1&date_start|gte=1753192800&date_end|lte=1755871200&per_page=100&page=1&sort_order=date_start&sort_order_dir=asc
-
POST
/org/{org}/leave— Create a leave request -
GET
/org/{org}/leave_type— Get all leave types- Example: {{baseUrl}}org/{{orgId}}/leave_type?user_id={{userId}}&include[entitlement]=1&include[entitlement_balance]=1&per_page=100&page=1
Pay Condition API
Endpoints for the pay condition category:
-
GET
/api/1/user/{user_id}/pay-conditions— Get pay conditions -
PUT
/api/1/user/{user_id}/pay-conditions— Update pay conditions -
GET
/api/1/shift/condition_sets— Get condition sets
Payroll API
Endpoints for the payroll category:
-
GET
/api/2/payroll— Get payroll file
Role API
Endpoints for the role category:
-
GET
/api/2/roles— Get roles (v2) -
GET
/org/{org}/role/{id}— Get a role -
PUT
/org/{org}/role/{id}— Update a role -
POST
/org/{org}/role— Create a role -
GET
/api/2/role/{id}/ability— Get all abilities for a role -
POST
/api/2/role/{id}/ability— Set abilities for a role -
PUT
/api/2/role/{id}/ability/{ability_id}— Update requirement of an ability for role -
DELETE
/api/2/role/{id}/ability/{ability_id}— Remove an ability from a role
Roster API
Endpoints for the roster category:
-
GET
/org/{org}/assigned_roster_shift/{shift_id}— Get a roster shift -
PUT
/org/{org}/assigned_roster_shift/{shift_id}— Update a roster shift -
GET
/org/{org}/assigned_roster_shift— Get roster shifts- Query string parameters
- Data return
-
page- page of results to fetch -
per_page- results to fetch per page -
status- filter for active (1) or deleted (0) -
date_start|gte- the start date of the shift, greater than or equal to this value -
date_end|lte- the end date of the shifts, less than or equal to this value -
include[group]- include details of the group the shift is rostered to in the response -
include[roles] - include the custom entities associated with this shift in the response
-
- Filters
- Examples
date_last_modified|not=1746007782date_last_modified|in=1746007782,1746008888,1746009999date_last_modified|null=truedate_last_modified|gt=1746007782date_last_modified|gte=1746007782date_last_modified|lt=1746007782date_last_modified|lte=1746007782date_last_modified|eq=1746007782-
group[site_name] = siteNamefilters the data based on the site_name located within the groups nested object,include[group]data return must be included to be able to filter by site_name. Only a single site filter is supported
- Operators
not(not equal)in(in list)not_in(not in list)null(is null)not_null(is not null)gt(greater than)gte(greater than or equal)lt(less than)lte(less than or equal)
- Examples
- Exclude
-
without_permissions = 1- excludes permissions being returned from the assigned_roster_shifts object -
group[without_permissions] = 1- excludes permissions being returned from the group nested object
-
- Data return
- Query string parameters
-
POST
/org/{org}/assigned_roster_shift— Create a roster shift -
GET
/org/{org}/unassigned_roster_shift/{shift_id}— Get a roster unassigned shift -
GET
/org/{org}/unassigned_roster_shift— Get roster unassigned shifts -
PUT
/api/1/assigned_roster_shift/confirm— Confirm shift -
PUT
/api/1/assigned_roster_shift/open— Open shift -
GET
/api/1/employee/suitable/appointment— Get suitable users
Rule API
Endpoints for the rule category:
-
GET
/api/1/rules— Get Rules
Settings API
Endpoints for the settings category:
-
GET
/org/{org}/settings— Get settings
Shift API
Endpoints for the shift category:
-
POST
/api/2/shifts— Create shift -
PUT
/api/2/shifts/communication/{shift_communication_id}— Update shift communication
Task API
Endpoints for the task category:
-
GET
/api/2/task/actual/{actual_task_id}— Get actual task -
PUT
/api/2/task/actual/{actual_task_id}— Update an actual task -
GET
/api/2/task/actual— Get actual tasks -
PUT
/api/2/task/actual— Update actual tasks -
POST
/api/2/task/actual— Create actual tasks
Timesheet API
Endpoints for the timesheet category:
Get timesheet (actual) shifts
-
GET
/org/{org}/actual_shift-
Example URL
- {{baseUrl}}org/{{orgId}}/actual_shift?user_id={{userId}}&include[group]=1&include[roles]=1&status=1&date_start|gte=1771506010&per_page=0&page=1&include[actual_shift_breaks]=1&sort_order=date_start&sort_order_dir=asc&include[available_breaks]=1
-
Query string parameters
-
Data return
-
page- page of results to fetch -
per_page- results to fetch per page -
status- filter for active (1) or deleted (0) -
date_start|gte- the start date of the shift, greater than or equal to this value -
date_end|lte- the end date of the shifts, less than or equal to this value -
include[group]- include details of the group of the shift -
include[roles] - include the custom entities -
include[actual_shift_breaks] - include the breaks - Sorting
-
sort_order- e.g. date_start to sort the data return based on the date start -
sort_order_dir- asc or desc - the order of the data returned
-
-
calculated_length|gte- e.g. 1, the return data will not return and 0 length shifts
-
-
Filters
-
Examples
date_last_modified|not=1746007782date_last_modified|in=1746007782,1746008888,1746009999date_last_modified|null=truedate_last_modified|gt=1746007782date_last_modified|gte=1746007782date_last_modified|lt=1746007782date_last_modified|lte=1746007782date_last_modified|eq=1746007782-
group[site_name] = siteNamefilters the data based on the site_name located within the groups nested object,include[group]data return must be included to be able to filter by site_name. Only a single site filter is supported
-
Operators
not(not equal)in(in list)not_in(not in list)null(is null)not_null(is not null)gt(greater than)gte(greater than or equal)lt(less than)lte(less than or equal)
-
Examples
-
Exclude
-
without_permissions = 1- excludes permissions being returned from the actual_shifts object - this can speed up data return -
group[without_permissions] = 1- excludes permissions being returned from the group nested object
-
-
Data return
-
Example URL
-
PUT
/api/1/actual-shifts/import— Import a timesheet -
POST
/api/1/actual-shifts/clock-on— Clock On API Endpoint- Example:
- URL: {{baseUrl}}org/{{orgId}}/actual_shift/clock_on?include[assigned_roster_shift]=1
- JSON body:
- {"group_id": {{groupId}},"user_id": {{userId}},"date_start": 1754218463,"location": {"latitude": -37.8368536,"longitude": 144.9470276,"altitude": 8.40000057220459,"accuracy": 11.554,"timestamp": 1754195333},"time_zone": "Australia/Sydney"}
- URL: {{baseUrl}}org/{{orgId}}/actual_shift/clock_on?include[assigned_roster_shift]=1
- Example:
-
PUT
/api/1/actual-shifts/clock-off— Clock Off API Endpoint -
POST
/api/1/actual_shift/break/clock_on— Shift break clock on -
PUT
/api/1/actual_shift/break/clock_off— Shift break clock off -
GET
/api/1/actual_shift/{actual_shift_original_id}— Get a timesheet shift -
PUT
/api/1/actual_shift/{actual_shift_original_id}— Update a timesheet shift
User API
Endpoints for the user category:
-
GET
/api/2/users— Get users (v2)- Query string parameters
- Include
include="personal_details","contact_details","communication","emergency_contact","employment","role_groups","pay_conditions"]
- Filters
- Examples:
filter={"active":{"in":[false,true]}}filter={"active":{"eq":false}}filter={"active":{"eq":true}}filter={"date_last_modified":{"gt":1752760800},"active":{"eq":false}}
- Operators
-
gt(greater than) -
gte(greater than or equal) -
lt(less than) -
lte(less than or equal) -
eq(equals)
-
- Examples:
- Include
- Query string parameters
-
PUT
/api/2/users— Update one or more users (v2) -
POST
/api/2/users— Create one or more users (v2) -
POST
/api/2/users/terminate— Terminate one or more users (v2) -
POST
/api/2/users/deactivate— Deactivate one or more users (v2) -
POST
/api/2/users/activate— Activate one or more users (v2) -
GET
/api/1/user— Get all users -
POST
/api/1/user— Create a user -
GET
/api/1/user/{user_id}— Get a user -
PUT
/api/1/user/{user_id}— Update a user -
GET
/org/{org}/user_ability/{user_ability_id}— Get a user's ability -
PUT
/org/{org}/user_ability/{user_ability_id}— Update a user's ability -
GET
/org/{org}/user_ability— Get the links between users and abilities -
POST
/org/{org}/user_ability— Add a user's ability. -
GET
/api/1/user/{user_id}/availability— Get a user's availability -
PUT
/api/1/user/{user_id}/availability— Create a user availability -
GET
/api/1/user_entitlement— Get entitlement balances -
PUT
/api/1/user_entitlement/balances— Update entitlement balances -
GET
/api/1/user_entitlement/projection— Get entitlement projection. -
GET
/api/1/user_group— No summary provided. -
POST
/api/1/user_group— No summary provided. -
DELETE
/api/1/user_group— No summary provided. -
GET
/org/{org}/user_group/{id}— No summary provided. -
PUT
/org/{org}/user_group/{id}— No summary provided. -
GET
/api/1/user/{user_id}/pay-conditions— Get pay conditions -
PUT
/api/1/user/{user_id}/pay-conditions— Update pay conditions -
GET
/api/1/shift/condition_sets— Get condition sets
Webhook API
Endpoints for the webhook category:
-
GET
/api/2/webhooks— Get webhooks -
PUT
/api/2/webhooks— Update one or more webhooks -
POST
/api/2/webhooks— Create one or more webhooks -
GET
/api/2/webhooks/{id}— Get webhook -
PUT
/api/2/webhooks/enable/{id}— Enable webhook -
PUT
/api/2/webhooks/disable/{id}— Disable webhook