Skip to content
ShiftlyDevelopers
Documentation menu

Permissions

At the end of this guide you know what each permission allows, why a connection can hold fewer than you asked for, and what is never available.

The permissions

Permissions are OAuth scopes. The business owner sees them as two columns on the consent screen: View, and Add or change.

PermissionShown to the business asAllows
roster:readView rosters and shiftsRosters, shifts, availability, open-shift requests, shift swaps, who can cover a shift, and rostered hours in labour costs.
roster:writeAdd or change shifts that haven't startedCreate shifts as drafts, and change or delete shifts that have not started. A change to a published shift makes it a draft again.
ondemand:readView OnDemand shiftsOnDemand shifts and their status, with nothing about the worker. The hourly rate needs pay:read too.
ondemand:writeAdd or change OnDemand draftsCreate draft OnDemand shifts, and change or delete drafts. The venue sets the rate and publishes in Shiftly.
timesheets:readView timesheetsTimesheets, who's on now, timesheet totals and actual hours in labour costs, without pay fields.
timesheets:writeAdd or change pending timesheetsCreate, change and delete pending timesheets.
leave:readView leave and balancesLeave requests, balances, blackout periods and the business's leave types. Private kinds of leave show only as PRIVATE.
leave:writeAdd or change pending leave requestsSubmit, change and cancel pending leave requests.
people:readView staff detailsEmployees and employments, including dates of birth and addresses.
pay:readView pay and labour costPay fields on employments, shifts and timesheets, cost in totals and labour costs, and project budgets.
settings:readView business details and locationsThe business, its locations and positions, and each location's labour cost target.
payrules:readView awards and pay rulesAwards.
projects:writeAdd or change projectsCreate, rename and archive projects.
offline_accessStay connected without the person signing in againA refresh token.

Ask for what your product needs and no more. The business sees every permission you request, and a shorter list is easier to allow.

A connection does no more than the person who made it

Every request your app makes runs as the person who connected it, inside the business they connected. If a manager without access to pay connects your app, your app does not see pay either, even with pay:read granted. If that manager can only see one location, your app sees that location.

On the consent screen, a permission the person cannot share is shown as unavailable and left out of the grant. The scope in the token response tells you what you actually hold.

Reduced access

When the person who connected your app later loses a permission, your app loses it too. Requests needing it answer 403 permission_denied and name the permission. The business sees the connection as Reduced access on its Connected apps page, with the option to restore the person's access or have someone else reconnect. Your access to everything else continues.

The connection resource reports both lists: granted_permissions is what the business allowed, effective_permissions is what works right now.

GET/v1/connection

Why pay is separate

Pay is the most sensitive thing in a roster. It has its own permission so a business can share rosters and timesheets with a product that has no need to know what anyone earns. With pay:read, employments carry rates and shifts and timesheets carry cost; without it, those fields are left out.

What is never available

  • Tax file numbers, bank details, superannuation details and identity documents.
  • Sign-in details, passwords and PINs.
  • Other businesses the person manages, or anything outside the connected business.
  • Publishing rosters, approving timesheets, deciding leave, changing staff details or changing pay. These stay with the business.
  • Publishing or pricing OnDemand shifts, and anything about the worker who takes one.
  • Private kinds of leave, such as family and domestic violence leave, and clock-in photos. A timesheet says only whether a photo was taken.