Roster metrics
Needs: Roster, Read
Returns metrics for shifts starting in a period: counts by status, service, staff and client hours, completed and cancelled hours, unassigned (open) shifts, overdue shifts not checked out, overtime, broken shifts, completed shifts with no billing, unique clients and staff, average shift length and cancellation rate.
Note:
service_hoursleaves out cancelled shifts.staff_hoursandclient_hoursmultiply by the people on each shift.completed_unbilledcounts completed shifts with no billing entries. The figures shown are an example.
curl -X GET "https://app.imploy.com.au/api/integrations/v1/shifts/metrics?from=example_string&to=example_string&client_id=123&staff_id=123&group_by=example_string" \
-H "Content-Type: application/json" \
-H "Authorization: Bearer YOUR_API_TOKEN"
import requests
import json
url = "https://app.imploy.com.au/api/integrations/v1/shifts/metrics?from=example_string&to=example_string&client_id=123&staff_id=123&group_by=example_string"
headers = {
"Content-Type": "application/json",
"Authorization": "Bearer YOUR_API_TOKEN"
}
response = requests.get(url, headers=headers)
print(response.json())
const response = await fetch("https://app.imploy.com.au/api/integrations/v1/shifts/metrics?from=example_string&to=example_string&client_id=123&staff_id=123&group_by=example_string", {
method: "GET",
headers: {
"Content-Type": "application/json",
"Authorization": "Bearer YOUR_API_TOKEN"
}
});
const data = await response.json();
console.log(data);
package main
import (
"fmt"
"net/http"
)
func main() {
req, err := http.NewRequest("GET", "https://app.imploy.com.au/api/integrations/v1/shifts/metrics?from=example_string&to=example_string&client_id=123&staff_id=123&group_by=example_string", nil)
if err != nil {
panic(err)
}
req.Header.Set("Content-Type", "application/json")
req.Header.Set("Authorization", "Bearer YOUR_API_TOKEN")
client := &http.Client{}
resp, err := client.Do(req)
if err != nil {
panic(err)
}
defer resp.Body.Close()
fmt.Println("Response Status:", resp.Status)
}
require 'net/http'
require 'json'
uri = URI('https://app.imploy.com.au/api/integrations/v1/shifts/metrics?from=example_string&to=example_string&client_id=123&staff_id=123&group_by=example_string')
http = Net::HTTP.new(uri.host, uri.port)
http.use_ssl = true
request = Net::HTTP::Get.new(uri)
request['Content-Type'] = 'application/json'
request['Authorization'] = 'Bearer YOUR_API_TOKEN'
response = http.request(request)
puts response.body
{
"period": {
"from": "2026-03-01",
"to": "2026-03-31"
},
"totals": {
"shifts": 120,
"single_shifts": 110,
"group_shifts": 10,
"service_hours": 480.5,
"staff_hours": 520,
"client_hours": 540,
"completed_hours": 300,
"cancelled_hours": 12,
"unassigned_shifts": 4,
"unassigned_hours": 16,
"overdue_not_completed": 2,
"overtime_hours": 3.5,
"broken_shifts": 1,
"completed_unbilled": 0,
"unique_clients": 38,
"unique_staff": 21,
"average_shift_hours": 4.2,
"cancellation_rate_percent": 3.3
},
"by_status": {
"completed": {
"shifts": 70,
"hours": 300
}
},
"breakdown": [
{
"key": "2026-03-02",
"shifts": 30,
"hours": 120,
"completed_hours": 80,
"cancelled_shifts": 1
}
]
}
{
"message": "Invalid or expired access token."
}
{
"message": "Access token does not permit this action."
}
{
"message": "Too many requests."
}
/shifts/metrics
Target server for requests. Edit to use your own host.
An organisation access token that starts with imp_at_. Send it as Authorization: Bearer imp_at_XXXX.
imp_at_. Send it as Authorization: Bearer imp_at_XXXX.Start date, YYYY-MM-DD.
End date, up to 92 days after from. Defaults to the end of the month of from.
Only this client.
Only shifts assigned to this staff member.
An optional breakdown (top 50): client, staff, service, week or month.
Request Preview
Response
Response will appear here after sending the request
Authentication
Bearer token. An organisation access token that starts with imp_at_. Send it as Authorization: Bearer imp_at_XXXX.
Query Parameters
Start date, YYYY-MM-DD.
End date, up to 92 days after from. Defaults to the end of the month of from.
Only this client.
Only shifts assigned to this staff member.
An optional breakdown (top 50): client, staff, service, week or month.
Responses
OK