Applies to: Team API | Labor API | Locations API | Cash Drawer Shifts API | Webhooks | Events API
Learn how to use the Team API to manage team members for a Square seller.
Applications can use the Team API to create and configure team members and jobs and to synchronize team member data with external platforms. The Team API supports individual and bulk updates to team members, including setting job descriptions and compensation.
Team members can be integrated into business operations. For example, they can be assigned to a work shift to track worked hours, associated with a cash drawer connected to Square Point of Sale, and assigned to an appointment segment in a booking.
Applications that use OAuth require the following permissions to call Team API endpoints:
EMPLOYEES_READ
is required forSearchTeamMembers
,RetrieveTeamMember
,RetrieveWageSetting
,ListJobs
, andRetrieveJob
.EMPLOYEES_WRITE
is required forCreateTeamMember
,BulkCreateTeamMembers
,UpdateTeamMember
,BulkUpdateTeamMembers
,UpdateWageSetting
,CreateJob
, andUpdateJob
.
Permissions, permission sets, and passcodes cannot be accessed using the Team API. Sellers use the Square Dashboard to assign permissions and passcodes to team members, after which Square emails an invitation to join the team and create a Square account.
Square recommends using
Job
andTeamManager
endpoints to manage jobs and wage settings instead ofRetrieveWageSetting
andUpdateWageSetting
.These Beta features are added in Square API version 2024-12-18.
- The
CreateJob
,UpdateJob
,ListJobs
, andRetrieveJob
endpoints,Job
object, andJobAssignment.job_id
field. TeamMember.wage_setting
field. This field lets applications useCreateTeamMember
,RetrieveTeamMember
and otherTeamMember
endpoints to access and manage job assignments and compensation for team members.
The
wage_setting
andjob_id
fields are available to all API versions, but using Square SDKs to access them requires the corresponding Square SDK version or higher.- The
For more information and other considerations, see Requirements and limitations.
Using the Team API, first retrieve the jobs that team members can do and then create the team members. After a team member is created, sellers can assign team permissions in the Square Dashboard.
To assign jobs to a team member, you need to provide the corresponding job IDs. To get all jobs in a seller account, call ListJobs, as shown in the following example request:
List jobs
If you need to create a new job, call CreateJob and specify the job title and tip eligibility.
Note
Job
endpoints are available in Square API version 2024-12-18 or higher.
To create team members, call one of the following endpoints:
CreateTeamMember
- Create a single team member.BulkCreateTeamMembers
- Create multiple team members.
For each team member, provide profile and job information:
given_name
andfamily_name
- The team member's first and last name. These fields are required to create a team member.assigned_locations
- The locations where the team member's permissions apply.Valid values for
assignment_type
:ALL_CURRENT_AND_FUTURE_LOCATIONS
- Assigns the team member to all of the seller's locations, including locations added in the future. Anylocation_ids
setting is ignored.EXPLICIT_LOCATIONS
- Used withlocation_ids
to assign the team member to specific locations. Use ListLocations to get the seller's locations.If
assigned_locations
is omitted,assignment_type
defaults toEXPLICIT_LOCATIONS
. For sellers with one location, the team member is assigned to that location. With multiple locations, the team member isn't assigned to any, so you must explicitly specifylocation_ids
later.
email_address
- The email address for the team member, which must be unique across team members in the seller account. Square sends an invitation to this address after team permissions are assigned in the Square Dashboard.phone_number
- The team member's phone number in E.164 format:+[country code][area code][subscriber number]
.wage_setting
- The team member's overtime exemption status and job assignments with compensation.is_overtime_exempt
- Whether the team member is exempt from overtime rules.job_assignments
- The list of jobs the team member can do, with the primary job listed first. For each job assignment, specify:job_id
- The job ID returned in theListJobs
orCreateJob
response.pay_type
- The job's pay type.- For
HOURLY
pay types, also providehourly_rate
. - For
SALARY
pay types, also provideannual_rate
andweekly_hours
. Square uses these values to calculate the hourly rate.
For jobs that don't have a pay type, such as volunteer positions, specify
NONE
.- For
Note
The
TeamMember.wage_setting
field (added in Square API version 2024-12-18) lets you access and manage wage settings usingTeamMember
endpoints instead of RetrieveWageSetting and UpdateWageSetting.reference_id
- An external team member ID. This field is recommended if you synchronize team members with an external platform.
To create a single team member, call CreateTeamMember. The following example request creates a team member assigned to the Manager job in two locations:
Create team member
This example includes the optional idempotency key to ensure the request is processed one time only.
To create 1 to 25 team members in a bulk operation, call BulkCreateTeamMembers and provide a map of key-value pairs that represent individual create requests. For each key-value pair, the key is an idempotency key and the value is the team member data.
Bulk operations are non-atomic. Each individual create request returns a success or failure response within the bulk operation response.
Creating new team members in a bulk operation includes the following steps:
Define individual create requests that contain team member data.
{ "team_member": { "given_name": "Joe", "family_name": "Doe", "assigned_locations": { "location_ids": [ "L5MD8YG8Q3S02", "CHQV7VKNFR3SV" ], "assignment_type": "EXPLICIT_LOCATIONS" }, "email_address": "[email protected]", "phone_number": "+12085551235", "wage_setting": { "is_overtime_exempt": true, "job_assignments": [ { "job_id": "FjS8x95cqHiMenw4f1NAUH4P", "pay_type": "SALARY", "annual_rate": { "amount": 6000000, "currency": "USD" }, "weekly_hours": 40 } ] } } }Assign a unique idempotency key to individual create requests and add them to the
team_members
map.{ "team_members": { "{UNIQUE_KEY 1}" : { // create request for team member 1 goes here }, "{UNIQUE_KEY 2}" : { // create request for team member 2 goes here } } }Call
BulkCreateTeamMembers
and provide theteam_members
map.Bulk create team members
After the team member is created, the seller needs to assign permissions to the team member in the Team section of the Square Dashboard. Permissions, permission sets, and passcodes cannot be accessed using the Team API.
The following steps describe how you can simulate the seller experience using your own account.
In the Square Dashboard, in the left pane, choose Team.
On the Team Members page, choose the new team member from the Name list to open their details pane.
Select a permission set for the team member and enter or generate a personal passcode, then choose Save.
Square sends an email to the team member with an invitation to join the team.
For more information about how sellers manage their team, see Add and manage team members.
Note
The code examples in this topic call Square APIs in the production environment. Alternatively, you can use the https://connect.squareupsandbox.com/v2
domain to create team members in the Square Sandbox and then view them in the Sandbox Square Dashboard. However, the Sandbox Square Dashboard doesn't support testing these permission-related steps.
You can use the Team API to activate or deactivate team members and update assigned locations or other profile information. You can also update wage settings, including job assignments and compensation.
Note the following exceptions:
The Team API cannot be used to update the team member that represents the seller account. In the API, this team member has the
is_owner
field set to true. The seller can update their profile in the Square Dashboard.After accepting the invitation to join the team, the Team API cannot be used to update the team member's email address. Only the team member can change their email address by updating their personal settings on the Square website.
Job assignments don't support sparse updates so you must provide the complete
job_assignments
list when updating this field.
If you need to get team member IDs or other details, call SearchTeamMembers. If you have the team member ID but need to get other details, call RetrieveTeamMember.
To update team members, call one of the following endpoints:
UpdateTeamMember
- Update a single team member.BulkUpdateTeamMembers
- Update multiple team members.
These endpoints support sparse updates. For each team member, you only need to include fields you want to add or change. To clear an optional field, specify null
. The following fields can be updated:
given_name
andfamily_name
- The team member's first and last name.assigned_locations
- The locations where the team member's permissions apply.Valid values for
assignment_type
:ALL_CURRENT_AND_FUTURE_LOCATIONS
- Assigns the team member to all of the seller's locations, including locations added in the future. Anylocation_ids
setting is ignored.EXPLICIT_LOCATIONS
- Used withlocation_ids
to assign the team member to specific locations. Use ListLocations to get the seller's locations.If
assigned_locations
is omitted,assignment_type
defaults toEXPLICIT_LOCATIONS
. For sellers with one location, the team member is assigned to that location. With multiple locations, the team member isn't assigned to any, so you must explicitly specifylocation_ids
later.
email_address
- The email address for the team member, which must be unique across team members in the seller account. Square sends an invitation to this address after team permissions are assigned in the Square Dashboard.The Team API cannot update this field after the team member joins the team.
phone_number
- The team member's phone number in E.164 format:+[country code][area code][subscriber number]
.wage_setting
- The team member's overtime exemption status and job assignments with compensation.is_overtime_exempt
- Whether the team member is exempt from overtime rules.job_assignments
- The complete list of jobs the team member can do, with the primary job listed first. For each job assignment, specify:job_id
- The job ID returned in theListJobs
orCreateJob
response.pay_type
- The job's pay type.- For
HOURLY
pay types, also providehourly_rate
. - For
SALARY
pay types, also provideannual_rate
andweekly_hours
. Square uses these values to calculate the hourly rate.
For jobs that don't have a pay type, such as volunteer positions, specify
NONE
.- For
To enable optimistic concurrency control for the wage setting update, include
version
set to the current wage setting version.Note
The
TeamMember.wage_setting
field (added in Square API version 2024-12-18) lets you access and manage wage settings usingTeamMember
endpoints instead of RetrieveWageSetting and UpdateWageSetting.For applications that continue to use
UpdateWageSetting
, you must provide the completeWageSetting
object.reference_id
- An external team member ID. This field is recommended if you synchronize team members with an external platform.
To update a single team member, call UpdateTeamMember and specify the team_member_id
. The following example request deactivates a team member.
Update team member
To update 1 to 25 team members in a bulk operation, call BulkUpdateTeamMembers and provide a map of key-value pairs that represent individual update requests. For each key-value pair, the key is the team member ID and the value is the team member data.
Bulk operations are non-atomic. Each individual update request returns a success or failure response within the bulk operation response.
Updating team members in a bulk operation includes the following steps:
Define individual update requests that specify the fields that you want to add, change, or clear.
{ "team_member": { "family_name": "McGee", "assigned_locations": { "assignment_type": "ALL_CURRENT_AND_FUTURE_LOCATIONS" } } }Assign the team member ID to individual update requests and add them to the
team_members
map.{ "team_members": { "{TEAM_MEMBER_ID 1}" : { // update request for team member 1 goes here }, "{TEAM_MEMBER_ID 2}" : { // update request for team member 2 goes here } } }Call
BulkUpdateTeamMembers
and provide theteam_members
map.The following example updates two team members. The first update request changes the last name and location assignment type. The second update request updates the assigned locations and job assignments and removes the phone number.
Bulk update team members
The following example UpdateTeamMember
requests add, remove, or reorder job assignments and change the pay rate. The first job assignment is considered the team member's primary job.
When adding or changing job assignments, you can call ListJobs to get job IDs.
Reactivate the team member and specify a single job assignment:
Update team member
These examples include the version
field to enable optimistic concurrency control for wage setting updates.
Use the SearchTeamMembers endpoint to get a list of team members, optionally filtered by location, status, or whether the team member is the owner. If needed, call ListLocations to get the seller's locations. To return all team members, don't specify any filters.
If you're looking for a particular team member, iterate through the results and check the phone_number
, email_address
, or other fields to see if there's a match.
Note
As a best practice, check the team member's status
if you're retrieving team member data to perform a business activity. In many cases, only ACTIVE
team members are applicable.
The following example lists all active team members whose location assignment includes the specified location ID. The limit
field specifies a page size of 2. The default and maximum page size is 25.
Search team members
If the SearchTeamMembers
response includes a cursor
field, append the cursor to your previous request and resend it to retrieve the next page of results. Repeat this process until the response no longer contains a cursor
. For more information, see Pagination.
The RetrieveTeamMember endpoint returns a single TeamMember
value based on the ID provided in the request.
Retrieve team member