For everyone

Search

API

Welcome to the EMS360 export API documentation.

The EMS360 export API provides a simple way to access school data stored in the EMS360 cloud using standard HTTP requests. It is designed for systems that need to securely connect to EMS360, retrieve specific data, and exchange information between platforms.

You can export data from several parts of the system, including:

  • Time and attendance.

  • Activities, Camps and Excursions (ACE).

  • Accreditations.

  • Professional learning events.

Making a request

All export requests are made to the following URL:

https://app.ems360.com.au/export/asJson
https://app.ems360.com.au/export/asJson
https://app.ems360.com.au/export/asJson

Requests should be sent as a GET request.

Authentication

To use the EMS360 Export API, you will need a username and password from EMS Support.

Authentication is handled using the custom EMS360EXPORT request header. The header value must be a Base64-encoded string in the format:

username:password
username:password
username:password

A cURL request might look like this:

curl "https://app.ems360.com.au/export/asJson?startDate=20260401&endDate=20260430&exportType=LEAVE" \
  -H "EMS360EXPORT: BASE64_ENCODED_USERNAME_PASSWORD"
curl "https://app.ems360.com.au/export/asJson?startDate=20260401&endDate=20260430&exportType=LEAVE" \
  -H "EMS360EXPORT: BASE64_ENCODED_USERNAME_PASSWORD"
curl "https://app.ems360.com.au/export/asJson?startDate=20260401&endDate=20260430&exportType=LEAVE" \
  -H "EMS360EXPORT: BASE64_ENCODED_USERNAME_PASSWORD"

Date format

All request dates must use the YYYYMMDD format.

Examples:

  • 20260401

  • 20260430

Response dates

Response dates vary by export type.

  • LEAVE and ABSENCE return API-style date values in YYYY-MM-DD format.

  • TILO, EXTRAHOURS, and WFH currently return raw database date or datetime values.

Request parameters

Name

Type

Required

Description

startDate

string

Yes

Start date in YYYYMMDD format.

endDate

string

Yes

End date in YYYYMMDD format.

exportType

string

Yes

The export type to return.

Supported export types

All exported data is returned for the specified date range.

exportType value

Description

LEAVE

All staff on leave.

ABSENCE

All staff that are absent.

TILO

Staff time in lieu and overtime.

EXTRAHOURS

Staff extra hours.

WFH

Staff working remotely.

LEAVESTAFF

Combined data for staff on leave or absent.

STAFFOUT

All staff who are out today. startDate and endDate must be the same.

ACE

Details associated with Activities, Camps and Excursions events. E.g. name, description, location, costs etc.

PDSTAFF

All staff attending professional learning events.

PDCOSTS

All professional learning event costings.

PDATTENDED

All staff who have attended professional learning events.

Error responses

Condition

Example response

Missing or invalid startDate

start date parameter not present or invalid

Missing or invalid endDate

end date parameter not present or invalid

Missing or invalid exportType

export type parameter not present or invalid

Missing EMS360EXPORT header

header is not present

Invalid export credentials

username/password is invalid

SQL date range over 365 days

{"msg":"Date range must be less than 365 days"}

LEAVE

This export returns leave records for the requested date range. The response structure depends on whether the site uses one-stage or two-stage leave approval.

One-stage LEAVE

Response body
json{
  "success": true,
  "data": [
    {
      "leaveStatus": "Approved",
      "certificateProvided": true,
      "certificateVerified": "2026-04-10",
      "leaveManagerActioned": true,
      "payrollActioned": false,
      "organiserActioned": true,
      "firstName": "Jane",
      "lastName": "Smith",
      "startDate": "2026-05-12",
      "endDate": "2026-05-14",
      "startTime": "09:00",
      "endTime": "17:00",
      "duration": "All Day",
      "category": "Annual Leave",
      "approver": "John Brown",
      "approvedOn": "2026-04-15",
      "rejectedOn": null,
      "requestDate": "2026-04-01",
      "employeeId": "EMP001",
      "noLeaveDeduction": false,
      "daysNoticeGiven": 41,
      "submissionToApproval": 14,
      "submissionToRejection": null
    }
  ]
}
json{
  "success": true,
  "data": [
    {
      "leaveStatus": "Approved",
      "certificateProvided": true,
      "certificateVerified": "2026-04-10",
      "leaveManagerActioned": true,
      "payrollActioned": false,
      "organiserActioned": true,
      "firstName": "Jane",
      "lastName": "Smith",
      "startDate": "2026-05-12",
      "endDate": "2026-05-14",
      "startTime": "09:00",
      "endTime": "17:00",
      "duration": "All Day",
      "category": "Annual Leave",
      "approver": "John Brown",
      "approvedOn": "2026-04-15",
      "rejectedOn": null,
      "requestDate": "2026-04-01",
      "employeeId": "EMP001",
      "noLeaveDeduction": false,
      "daysNoticeGiven": 41,
      "submissionToApproval": 14,
      "submissionToRejection": null
    }
  ]
}
json{
  "success": true,
  "data": [
    {
      "leaveStatus": "Approved",
      "certificateProvided": true,
      "certificateVerified": "2026-04-10",
      "leaveManagerActioned": true,
      "payrollActioned": false,
      "organiserActioned": true,
      "firstName": "Jane",
      "lastName": "Smith",
      "startDate": "2026-05-12",
      "endDate": "2026-05-14",
      "startTime": "09:00",
      "endTime": "17:00",
      "duration": "All Day",
      "category": "Annual Leave",
      "approver": "John Brown",
      "approvedOn": "2026-04-15",
      "rejectedOn": null,
      "requestDate": "2026-04-01",
      "employeeId": "EMP001",
      "noLeaveDeduction": false,
      "daysNoticeGiven": 41,
      "submissionToApproval": 14,
      "submissionToRejection": null
    }
  ]
}
Fields

Field

Type

Description

leaveStatus

string

Current leave status.

certificateProvided

boolean

Whether a certificate was provided.

certificateVerified

string(date) or null

Certificate verification date.

leaveManagerActioned

boolean

Leave manager action flag.

payrollActioned

boolean

Payroll action flag.

organiserActioned

boolean

Organiser action flag.

firstName

string

Requester first name.

lastName

string

Requester last name.

startDate

string(date)

Leave start date.

endDate

string(date)

Leave end date.

startTime

string or null

Leave start time.

endTime

string or null

Leave end time.

duration

string or null

Display duration value.

category

string

Leave category.

approver

string or null

Approver name.

approvedOn

string(date) or null

Approval date.

rejectedOn

string(date) or null

Rejection date.

requestDate

string(date) or null

Request submission date.

employeeId

string or null

Employee identifier.

noLeaveDeduction

boolean

No leave deduction flag.

daysNoticeGiven

integer or null

Days from request to leave start.

submissionToApproval

integer or null

Days from request to approval.

submissionToRejection

integer or null

Days from request to rejection.

Two-stage LEAVE

Response body
json{
  "success": true,
  "data": [
    {
      "leaveStatus": "Fully Approved",
      "certificateProvided": true,
      "certificateVerified": "2026-04-10",
      "leaveManagerActioned": true,
      "payrollActioned": false,
      "organiserActioned": true,
      "firstName": "Jane",
      "lastName": "Smith",
      "startDate": "2026-05-12",
      "endDate": "2026-05-14",
      "startTime": "09:00",
      "endTime": "17:00",
      "duration": "All Day",
      "category": "Annual Leave",
      "initialApprover": "Alex Green",
      "initialApprovedOn": "2026-04-08",
      "finalApprover": "John Brown",
      "finalApprovedOn": "2026-04-15",
      "rejectedOn": null,
      "requestDate": "2026-04-01",
      "employeeId": "EMP001",
      "noLeaveDeduction": false,
      "daysNoticeGiven": 41,
      "submissionToInitialApproval": 7,
      "initialApprovalToFinalApproval": 7,
      "submissionToFinalApproval": 14,
      "submissionToRejection": null
    }
  ]
}
json{
  "success": true,
  "data": [
    {
      "leaveStatus": "Fully Approved",
      "certificateProvided": true,
      "certificateVerified": "2026-04-10",
      "leaveManagerActioned": true,
      "payrollActioned": false,
      "organiserActioned": true,
      "firstName": "Jane",
      "lastName": "Smith",
      "startDate": "2026-05-12",
      "endDate": "2026-05-14",
      "startTime": "09:00",
      "endTime": "17:00",
      "duration": "All Day",
      "category": "Annual Leave",
      "initialApprover": "Alex Green",
      "initialApprovedOn": "2026-04-08",
      "finalApprover": "John Brown",
      "finalApprovedOn": "2026-04-15",
      "rejectedOn": null,
      "requestDate": "2026-04-01",
      "employeeId": "EMP001",
      "noLeaveDeduction": false,
      "daysNoticeGiven": 41,
      "submissionToInitialApproval": 7,
      "initialApprovalToFinalApproval": 7,
      "submissionToFinalApproval": 14,
      "submissionToRejection": null
    }
  ]
}
json{
  "success": true,
  "data": [
    {
      "leaveStatus": "Fully Approved",
      "certificateProvided": true,
      "certificateVerified": "2026-04-10",
      "leaveManagerActioned": true,
      "payrollActioned": false,
      "organiserActioned": true,
      "firstName": "Jane",
      "lastName": "Smith",
      "startDate": "2026-05-12",
      "endDate": "2026-05-14",
      "startTime": "09:00",
      "endTime": "17:00",
      "duration": "All Day",
      "category": "Annual Leave",
      "initialApprover": "Alex Green",
      "initialApprovedOn": "2026-04-08",
      "finalApprover": "John Brown",
      "finalApprovedOn": "2026-04-15",
      "rejectedOn": null,
      "requestDate": "2026-04-01",
      "employeeId": "EMP001",
      "noLeaveDeduction": false,
      "daysNoticeGiven": 41,
      "submissionToInitialApproval": 7,
      "initialApprovalToFinalApproval": 7,
      "submissionToFinalApproval": 14,
      "submissionToRejection": null
    }
  ]
}
Fields

Field

Type

Description

leaveStatus

string

Current leave status.

certificateProvided

boolean

Whether a certificate was provided.

certificateVerified

string(date) or null

Certificate verification date.

leaveManagerActioned

boolean

Leave manager action flag.

payrollActioned

boolean

Payroll action flag.

organiserActioned

boolean

Organiser action flag.

firstName

string

Requester first name.

lastName

string

Requester last name.

startDate

string(date)

Leave start date.

endDate

string(date)

Leave end date.

startTime

string or null

Leave start time.

endTime

string or null

Leave end time.

duration

string or null

Display duration value.

category

string

Leave category.

initialApprover

string or null

Initial approver name.

initialApprovedOn

string(date) or null

Initial approval date.

finalApprover

string or null

Final approver name.

finalApprovedOn

string(date) or null

Final approval date.

rejectedOn

string(date) or null

Rejection date.

requestDate

string(date) or null

Request submission date.

employeeId

string or null

Employee identifier.

noLeaveDeduction

boolean

No leave deduction flag.

daysNoticeGiven

integer or null

Days from request to leave start.

submissionToInitialApproval

integer or null

Days from request to initial approval.

initialApprovalToFinalApproval

integer or null

Days between initial and final approval.

submissionToFinalApproval

integer or null

Days from request to final approval.

submissionToRejection

integer or null

Days from request to rejection.

ABSENCE

This export returns absence records for the requested date range.

The reason field is intentionally not included.

Response body
json{
  "success": true,
  "data": [
    {
      "certificateProvided": true,
      "certificateVerified": "2026-04-10",
      "leaveManagerActioned": true,
      "payrollActioned": false,
      "organiserActioned": true,
      "firstName": "Jane",
      "lastName": "Smith",
      "startDate": "2026-05-12",
      "endDate": "2026-05-12",
      "startTime": "09:00",
      "endTime": "17:00",
      "duration": "All Day",
      "category": "Sick Leave",
      "submittedOn": "2026-05-01",
      "employeeId": "EMP001"
    }
  ]
}
json{
  "success": true,
  "data": [
    {
      "certificateProvided": true,
      "certificateVerified": "2026-04-10",
      "leaveManagerActioned": true,
      "payrollActioned": false,
      "organiserActioned": true,
      "firstName": "Jane",
      "lastName": "Smith",
      "startDate": "2026-05-12",
      "endDate": "2026-05-12",
      "startTime": "09:00",
      "endTime": "17:00",
      "duration": "All Day",
      "category": "Sick Leave",
      "submittedOn": "2026-05-01",
      "employeeId": "EMP001"
    }
  ]
}
json{
  "success": true,
  "data": [
    {
      "certificateProvided": true,
      "certificateVerified": "2026-04-10",
      "leaveManagerActioned": true,
      "payrollActioned": false,
      "organiserActioned": true,
      "firstName": "Jane",
      "lastName": "Smith",
      "startDate": "2026-05-12",
      "endDate": "2026-05-12",
      "startTime": "09:00",
      "endTime": "17:00",
      "duration": "All Day",
      "category": "Sick Leave",
      "submittedOn": "2026-05-01",
      "employeeId": "EMP001"
    }
  ]
}
Fields

Field

Type

Description

certificateProvided

boolean

Whether a certificate was provided.

certificateVerified

string(date) or null

Certificate verification date.

leaveManagerActioned

boolean

Leave manager action flag.

payrollActioned

boolean

Payroll action flag.

organiserActioned

boolean

Organiser action flag.

firstName

string

Requester first name.

lastName

string

Requester last name.

startDate

string(date)

Absence start date.

endDate

string(date)

Absence end date.

startTime

string or null

Absence start time.

endTime

string or null

Absence end time.

duration

string or null

Display duration value.

category

string

Absence category.

submittedOn

string(date) or null

Submission date.

employeeId

string or null

Employee identifier.

TILO

This export returns Time In Lieu and Overtime records for the requested date range.

Response body
json{
  "success": true,
  "data": [
    {
      "firstName": "Jane",
      "lastName": "Smith",
      "takeAccrue": "Accrue",
      "overtime": "",
      "timeInLieu": "2:00",
      "date": "2026-04-18 00:00:00",
      "description": "Weekend event support",
      "category": "After Hours Duty",
      "status": "Fully Approved",
      "tiloManagerActioned": true,
      "payrollActioned": false,
      "organiserActioned": true
    }
  ]
}
json{
  "success": true,
  "data": [
    {
      "firstName": "Jane",
      "lastName": "Smith",
      "takeAccrue": "Accrue",
      "overtime": "",
      "timeInLieu": "2:00",
      "date": "2026-04-18 00:00:00",
      "description": "Weekend event support",
      "category": "After Hours Duty",
      "status": "Fully Approved",
      "tiloManagerActioned": true,
      "payrollActioned": false,
      "organiserActioned": true
    }
  ]
}
json{
  "success": true,
  "data": [
    {
      "firstName": "Jane",
      "lastName": "Smith",
      "takeAccrue": "Accrue",
      "overtime": "",
      "timeInLieu": "2:00",
      "date": "2026-04-18 00:00:00",
      "description": "Weekend event support",
      "category": "After Hours Duty",
      "status": "Fully Approved",
      "tiloManagerActioned": true,
      "payrollActioned": false,
      "organiserActioned": true
    }
  ]
}
Fields

Field

Type

Description

firstName

string

Staff first name.

lastName

string

Staff last name.

takeAccrue

string

Either Take or Accrue.

overtime

string

Duration value when the record is overtime, otherwise empty string.

timeInLieu

string

Duration value when the record is time in lieu, otherwise empty string.

date

string(datetime)

Time In Lieu date.

description

string or null

Description text.

category

string

Time In Lieu category.

status

string

One of Awaiting Approval, Initially Approved, Fully Approved, or Declined.

tiloManagerActioned

boolean

TiLO manager action flag.

payrollActioned

boolean

Payroll action flag.

organiserActioned

boolean

Organiser action flag.

Notes

  • status reflects the site’s two-stage Time In Lieu configuration.

  • overtime and timeInLieu are mutually exclusive display fields.

  • date is currently returned as the raw database date/datetime value in the export SQL.

EXTRAHOURS

This export returns Extra Hours records for the requested date range.

Response body
json{
  "success": true,
  "data": [
    {
      "firstName": "Jane",
      "lastName": "Smith",
      "takeAccrue": "Take",
      "extraHours": "1:30",
      "date": "2026-04-22 00:00:00",
      "description": "Exam supervision",
      "status": "Awaiting Approval",
      "leaveManagerActioned": false,
      "organiserActioned": true
    }
  ]
}
json{
  "success": true,
  "data": [
    {
      "firstName": "Jane",
      "lastName": "Smith",
      "takeAccrue": "Take",
      "extraHours": "1:30",
      "date": "2026-04-22 00:00:00",
      "description": "Exam supervision",
      "status": "Awaiting Approval",
      "leaveManagerActioned": false,
      "organiserActioned": true
    }
  ]
}
json{
  "success": true,
  "data": [
    {
      "firstName": "Jane",
      "lastName": "Smith",
      "takeAccrue": "Take",
      "extraHours": "1:30",
      "date": "2026-04-22 00:00:00",
      "description": "Exam supervision",
      "status": "Awaiting Approval",
      "leaveManagerActioned": false,
      "organiserActioned": true
    }
  ]
}
Fields

Field

Type

Description

firstName

string

Staff first name.

lastName

string

Staff last name.

takeAccrue

string

Either Take or Accrue.

extraHours

string

Duration value in H:MM style.

date

string(datetime)

Extra Hours date.

description

string or null

Description text.

status

string

One of Awaiting Approval, Fully Approved, or Declined.

leaveManagerActioned

boolean

Leave manager action flag.

organiserActioned

boolean

Organiser action flag.

Notes

  • EXTRAHOURS does not currently expose a category field in the JSON export.

  • date is currently returned as the raw database date/datetime value in the export SQL.WFH

WFH

This export returns Working Remotely records for the requested date range.

Response body
json{
  "success": true,
  "data": [
    {
      "firstName": "Jane",
      "lastName": "Smith",
      "date": "2026-04-24 00:00:00",
      "startTime": "08:30",
      "endTime": "16:30",
      "duration": "All Day",
      "reason": "Working remotely for planning day",
      "leaveManagerActioned": true,
      "organiserActioned": false
    }
  ]
}
json{
  "success": true,
  "data": [
    {
      "firstName": "Jane",
      "lastName": "Smith",
      "date": "2026-04-24 00:00:00",
      "startTime": "08:30",
      "endTime": "16:30",
      "duration": "All Day",
      "reason": "Working remotely for planning day",
      "leaveManagerActioned": true,
      "organiserActioned": false
    }
  ]
}
json{
  "success": true,
  "data": [
    {
      "firstName": "Jane",
      "lastName": "Smith",
      "date": "2026-04-24 00:00:00",
      "startTime": "08:30",
      "endTime": "16:30",
      "duration": "All Day",
      "reason": "Working remotely for planning day",
      "leaveManagerActioned": true,
      "organiserActioned": false
    }
  ]
}
Field

Field

Type

Description

firstName

string

Staff first name.

lastName

string

Staff last name.

date

string(datetime)

Work From Home date.

startTime

string or null

Start time.

endTime

string or null

End time.

duration

string or null

Display duration value.

reason

string or null

Reason for working from home.

leaveManagerActioned

boolean

Leave manager action flag.

organiserActioned

boolean

Organiser action flag.

Notes

  • duration is a display field derived from all-day and additional info values.

  • date is currently returned as the raw database date/datetime value in the export SQL.

LEAVESTAFF

This export returns combined leave and absence records for the requested date range.

Response body
json{
  "success": true,
  "data": [
    {
      "...": "..."
    }
  ]
}
json{
  "success": true,
  "data": [
    {
      "...": "..."
    }
  ]
}
json{
  "success": true,
  "data": [
    {
      "...": "..."
    }
  ]
}
Fields

Field

Type

Description

...

...

Add the final field list for this export.

Notes

  • This export combines records for staff who are on leave or absent.

  • Use the same request date format as the other time-based exports.

STAFFOUT

This export returns staff who are out today.

startDate and endDate must be the same for this export.

Response body
json{
  "success": true,
  "data": [
    {
      "...": "..."
    }
  ]
}
json{
  "success": true,
  "data": [
    {
      "...": "..."
    }
  ]
}
json{
  "success": true,
  "data": [
    {
      "...": "..."
    }
  ]
}
Fields

Field

Type

Description

...

...

Add the final field list for this export.

Notes

  • This export is intended for same-day requests only.

  • Set startDate and endDate to the same value when using STAFFOUT.

ACE

This export returns data associated with Activities, Camps and Excursions (ACE) events.

Response body
json{
  "success": true,
  "data": [
    {
      "...": "..."
    }
  ]
}
json{
  "success": true,
  "data": [
    {
      "...": "..."
    }
  ]
}
json{
  "success": true,
  "data": [
    {
      "...": "..."
    }
  ]
}
Fields

Field

Type

Description

...

...

Add the final field list for this export.

Notes

  • This export includes ACE-related event data for the requested date range.

  • Use the same request structure and authentication as the other exports.PDSTAFF

PDSTAFF

This export returns staff attending professional learning events.

Response body
json{
  "success": true,
  "data": [
    {
      "...": "..."
    }
  ]
}
json{
  "success": true,
  "data": [
    {
      "...": "..."
    }
  ]
}
json{
  "success": true,
  "data": [
    {
      "...": "..."
    }
  ]
}
Fields

Field

Type

Description

...

...

Add the final field list for this export.

Notes

  • This export is for professional learning attendance data.

  • It returns records for staff attending professional learning events within the requested date range.

PDCOSTS

This export returns professional learning event costings.

Response body
json{
  "success": true,
  "data": [
    {
      "...": "..."
    }
  ]
}
json{
  "success": true,
  "data": [
    {
      "...": "..."
    }
  ]
}
json{
  "success": true,
  "data": [
    {
      "...": "..."
    }
  ]
}
Fields

Field

Type

Description

...

...

Add the final field list for this export.

Notes

  • This export is for cost-related data linked to professional learning events.

  • Use it when you need to retrieve costing details for professional learning records.

PDATTENDED

This export returns staff who have attended professional learning events.

Response body
json{
  "success": true,
  "data": [
    {
      "...": "..."
    }
  ]
}
json{
  "success": true,
  "data": [
    {
      "...": "..."
    }
  ]
}
json{
  "success": true,
  "data": [
    {
      "...": "..."
    }
  ]
}
Fields

Field

Type

Description

...

...

Add the final field list for this export.

Notes

  • This export is for completed attendance records.

  • It returns staff who have attended professional learning events in the requested date range.


On this page