Skip to content
ShiftlyDevelopers
Documentation menu

Locations

The places a business operates. A location owns the timezone for everything that happens there.

Needs one of the settings:read or roster:read or timesheets:read or people:read or leave:read permissions, depending on the operation. The business sees it as "Business details and locations".

Fields

Location fields
FieldTypeAccessMeaning
idstringRead-onlyThe location.
namestringRead-onlyThe location's name.
timezonestringRead-onlyIANA timezone. Dates and day boundaries for records at this location use it.
addressobject, may be nullRead-onlyWhere the location is.
opening_timestring, may be nullRead-onlyOpening time, HH:mm in the location's timezone.
closing_timestring, may be nullRead-onlyClosing time, HH:mm in the location's timezone.
default_shift_timesobjectRead-onlyThe times a new shift starts with on each day of the week.
roster_week_start_dayintegerRead-onlyThe day this location's roster week starts: 0 is Sunday, 6 is Saturday.
clock_in_radius_metresnumberRead-onlyHow close to the location staff must be to clock in, in metres, unless remote clock-in is allowed.
remote_clock_in_allowedbooleanRead-onlyTrue when staff can clock in from anywhere.
break_tracking_enabledbooleanRead-onlyTrue when staff record their breaks when clocking.
target_labour_percentagenumber, may be nullRead-onlyThe labour cost the business aims for, as a percentage of sales at this location. Returned only with settings:read.
archivedbooleanRead-onlyTrue when the record has been removed in Shiftly.
created_attimestampRead-onlyWhen the record was created.
updated_attimestampRead-onlyWhen the record last changed.

Operations

List locations

GET/v1/locations

Permission: settings:read, roster:read, timesheets:read, people:read, leave:read Needs any one of: settings:read, roster:read, timesheets:read, people:read, leave:read.

Query parameters
ParameterTypeMeaning
limitinteger, default 50, up to 200OptionalHow many records per page. Up to 200.
afterstringOptionalThe next_cursor from the previous page.
updated_sincetimestampOptionalOnly records changed at or after this moment. Pair it with include_archived to see removals.
include_archived"true", "false"OptionalInclude records that have been archived.
200 response
{
  "data": [
    {
      "id": "66f1c2a4b3d9e8f7a6b5c4d3",
      "name": "text",
      "timezone": "text",
      "address": {
        "street": null,
        "city": null,
        "state": null,
        "post_code": null,
        "country": null,
        "latitude": null,
        "longitude": null
      },
      "opening_time": "text",
      "closing_time": "text",
      "default_shift_times": {
        "monday": null,
        "tuesday": null,
        "wednesday": null,
        "thursday": null,
        "friday": null,
        "saturday": null,
        "sunday": null
      },
      "roster_week_start_day": 1,
      "clock_in_radius_metres": 1.5,
      "remote_clock_in_allowed": true,
      "break_tracking_enabled": true,
      "target_labour_percentage": 1.5,
      "archived": true,
      "created_at": "2026-10-06T09:00:00+11:00",
      "updated_at": "2026-10-06T09:00:00+11:00"
    }
  ],
  "has_more": true,
  "next_cursor": "text"
}
Refusals
StatusWhen
400The error's code is invalid_request or range_too_long. The Errors page describes each code.
401The error's code is invalid_token or token_expired. The Errors page describes each code.
403The error's code is origin_not_allowed, permission_denied, not_available, connection_disconnected, connection_suspended or app_suspended. The Errors page describes each code.
404There is nothing at this address, or no such record in this business.
429Too many requests. Retry-After says when to try again.
500Something went wrong at Shiftly. Quote the request id.
503This environment is not set up for partner apps yet.

Get one location

GET/v1/locations/{id}

Permission: settings:read, roster:read, timesheets:read, people:read, leave:read Needs any one of: settings:read, roster:read, timesheets:read, people:read, leave:read.

200 response
{
  "id": "66f1c2a4b3d9e8f7a6b5c4d3",
  "name": "text",
  "timezone": "text",
  "address": {
    "street": "text",
    "city": "text",
    "state": "text",
    "post_code": "text",
    "country": "text",
    "latitude": 1.5,
    "longitude": 1.5
  },
  "opening_time": "text",
  "closing_time": "text",
  "default_shift_times": {
    "monday": {
      "start": "text",
      "end": "text",
      "open": true
    },
    "tuesday": {
      "start": "text",
      "end": "text",
      "open": true
    },
    "wednesday": {
      "start": "text",
      "end": "text",
      "open": true
    },
    "thursday": {
      "start": "text",
      "end": "text",
      "open": true
    },
    "friday": {
      "start": "text",
      "end": "text",
      "open": true
    },
    "saturday": {
      "start": "text",
      "end": "text",
      "open": true
    },
    "sunday": {
      "start": "text",
      "end": "text",
      "open": true
    }
  },
  "roster_week_start_day": 1,
  "clock_in_radius_metres": 1.5,
  "remote_clock_in_allowed": true,
  "break_tracking_enabled": true,
  "target_labour_percentage": 1.5,
  "archived": true,
  "created_at": "2026-10-06T09:00:00+11:00",
  "updated_at": "2026-10-06T09:00:00+11:00"
}
Refusals
StatusWhen
400The error's code is invalid_request or range_too_long. The Errors page describes each code.
401The error's code is invalid_token or token_expired. The Errors page describes each code.
403The error's code is origin_not_allowed, permission_denied, not_available, connection_disconnected, connection_suspended or app_suspended. The Errors page describes each code.
404There is nothing at this address, or no such record in this business.
429Too many requests. Retry-After says when to try again.
500Something went wrong at Shiftly. Quote the request id.
503This environment is not set up for partner apps yet.