Docs API Reference Calculate Pay

Calculate Pay

Calculate the minimum award pay for a single shift.

POST /api/v1/calculate-pay

Request body

FieldTypeRequiredDefaultDescription
award_codestringYesModern Award code (e.g. MA000009)
classification_codestringYesClassification level (e.g. HI1, L2Y1, RE3)
employment_typestringYesfull_time, part_time, or casual
worker_typestringNonon_shiftworkernon_shiftworker or shiftworker
work_datestring (date)YesYYYY-MM-DD format
is_public_holidaybooleanNofalseWhether the shift falls on a public holiday
start_timestringNoShift start time HH:MM (24h). Provide with end_time.
end_timestringNoShift end time HH:MM (24h). Provide with start_time.
unpaid_break_minutesintegerNo0Minutes of unpaid break during the shift
total_hours_workednumberNoAlternative to start/end time — specify hours directly
hours_already_worked_todaynumberNo0Hours already worked earlier in the day
hours_already_worked_this_weeknumberNo0Hours already worked this week (triggers weekly overtime)
is_first_aid_officerbooleanNofalseWhether first aid allowance applies
requires_laundry_allowancebooleanNofalseWhether laundry allowance applies
is_meal_allowance_triggeredbooleanNofalseWhether meal allowance applies
additional_allowancesobjectNo{}Additional allowance flags as key-value pairs

Hours input

Provide either:

  • start_time + end_time + unpaid_break_minutes — the engine calculates hours worked
  • total_hours_worked — you provide the total directly

If both are provided, total_hours_worked takes precedence.

Example request

curl -X POST /api/v1/calculate-pay \
  -H "Authorization: Bearer ak_KEY:sk_SECRET" \
  -H "Content-Type: application/json" \
  -d '{
    "award_code": "MA000009",
    "classification_code": "HI1",
    "employment_type": "full_time",
    "work_date": "2026-03-16",
    "start_time": "09:00",
    "end_time": "17:00",
    "unpaid_break_minutes": 30,
    "is_first_aid_officer": false
  }'

Response

FieldTypeDescription
award_codestringEcho of input award code
classification_codestringEcho of input classification
employment_typestringEcho of input employment type
work_datestringEcho of input date
day_of_weekstringResolved day name (e.g. Monday, Saturday)
is_public_holidaybooleanEcho of input
gross_paynumberTotal minimum pay for the shift
ordinary_earningsnumberOrdinary hours earnings
overtime_earningsnumberOvertime earnings
penalty_earningsnumberPenalty rate earnings
allowance_totalnumberTotal allowances
rate_derivationobjectHow the hourly rate was derived from the weekly rate
hours_breakdownobjectHow hours were split into ordinary, overtime, and penalty
pay_componentsarrayItemised pay components with hours, rate, multiplier, and amount
allowancesarrayItemised allowances
calculation_notesarrayExplanatory notes about the calculation
warningsarrayEngine warnings (e.g. shift exceeds daily maximum)

rate_derivation object

FieldTypeDescription
weekly_ratenumberCanonical weekly rate from Schedule B
ordinary_hours_per_weeknumberStandard hours per week (e.g. 38)
base_hourly_ratenumberweekly_rate / ordinary_hours_per_week
casual_loading_percentnumber or nullCasual loading percentage (e.g. 25.0)
effective_hourly_ratenumberRate used for calculation (includes casual loading if applicable)
derivation_formulastringHuman-readable formula

pay_components array items

FieldTypeDescription
component_typestringordinary, overtime_150, overtime_200, penalty, etc.
descriptionstringHuman-readable description
hoursnumberHours for this component
ratenumberHourly rate applied
multipliernumberRate multiplier (e.g. 1.5 for time-and-a-half)
amountnumberDollar amount for this component
sourcesarrayAward clause references for traceability

Example response

{
  "award_code": "MA000009",
  "classification_code": "HI1",
  "employment_type": "full_time",
  "work_date": "2026-03-16",
  "day_of_week": "Monday",
  "is_public_holiday": false,
  "gross_pay": 192.22,
  "ordinary_earnings": 192.22,
  "overtime_earnings": 0.0,
  "penalty_earnings": 0.0,
  "allowance_total": 0.0,
  "rate_derivation": {
    "weekly_rate": 973.90,
    "ordinary_hours_per_week": 38.0,
    "base_hourly_rate": 25.6289,
    "effective_hourly_rate": 25.6289,
    "derivation_formula": "973.90 / 38.0 = $25.6289/hr"
  },
  "hours_breakdown": {
    "total_worked_hours": 7.5,
    "unpaid_break_minutes": 30,
    "ordinary_hours": 7.5,
    "overtime_hours_150": 0.0,
    "overtime_hours_200": 0.0
  },
  "pay_components": [
    {
      "component_type": "ordinary",
      "description": "Ordinary hours at base rate",
      "hours": 7.5,
      "rate": 25.6289,
      "multiplier": 1.0,
      "amount": 192.22,
      "sources": [
        {
          "clause_number": "16",
          "clause_title": "Minimum rates",
          "rule_table": "award_base_pay_rates",
          "rule_id": 42
        }
      ]
    }
  ],
  "allowances": [],
  "calculation_notes": [],
  "warnings": []
}

Errors

StatusCause
400Invalid request body (missing required fields, invalid values)
404Award code not found or not calculation-enabled
401Invalid or missing API credentials
429Rate limit exceeded