On-call hours

If you pay people to be on call — or want to — you need numbers both sides trust. The on-call hours report turns your rotation history into a business vs after-hours split per person, with a CSV export that drops straight into payroll. No spreadsheets maintained by hand, no arguments about who covered the weekend.

Before you start
  • At least one schedule with rotation history, per Schedules & escalations. The report reads what actually happened, so it needs time to have passed.
  • Admin access to open the Reports page.
  1. Run the report

    Open Reports in the admin console and pick On-call hours. Set a date range — a pay period, a month, a quarter — and optionally filter to a single schedule if you pay teams separately. The report reconstructs who was on call for every hour in the range from the rotation history.

  2. Read the business vs after-hours split

    Every on-call hour falls into one of two buckets. Business hours are 09:00–17:00, Monday through Friday, in the schedule's own timezone. Everything else — nights, weekends, holidays — counts as after-hours. Each person's row shows both totals for the range, so you can price them differently: a flat stipend for business-hours coverage, a higher rate for the hours that cost real sleep.

    The split is computed in the schedule's timezone, not UTC, and it's DST-safe: a 25-hour November Sunday and a 23-hour March Sunday both come out right, because the math follows the local clock, not elapsed wall time.

    Note

    Each schedule uses its own timezone for the split. If two teams on opposite coasts share a payroll, run the report once per schedule rather than merging them first — the bucket boundaries are local, as they should be.

  3. Export CSV for payroll

    Export CSV gives you one row per person per period with the business and after-hours totals. Hand it to payroll as-is, or import it into whatever comp system you use. The export is formula-injection safe — cells starting with =, +, -, or @ are neutralized — so opening it in Excel or Google Sheets can't execute anything smuggled in via usernames or schedule names.

    Tip

    Export on a fixed cadence that matches your pay period — same day, same range convention. The report is derived from rotation history, so a re-run of the same range always produces the same numbers. That reproducibility is what makes the on-call pay program auditable.

  4. Pull it from the API

    Everything the page does is available over HTTP, so payroll tooling can fetch the numbers on its own schedule:

    curl "https://api.ops-ping.com/v2/reports/on-call-hours?from=2026-08-01&to=2026-08-31" \
      -H "Authorization: OpsPingKey YOUR_API_KEY"

    Add &format=csv to get the same formula-injection-safe CSV the console exports, byte for byte. from and to are inclusive dates. See the API reference for the full field list.