Manage teams in Zendesk Workforce Management (WFM).

Teams are organizational units in Zendesk Workforce Management (WFM) used to manage your roster and organization structure. You can create multiple teams and assign agents and managers to them. Managers of teams are responsible for receiving and responding to agents' time off and shift trade requests, along with any other requests that may arise. See Creating and managing teams in Zendesk WFM in Zendesk help.

Allowed for: WFM admins, users with organization structure permissions.

Available Operations

OperationDescription
List TeamsReturns all teams in the account
Show TeamReturns a single team by ID
Create TeamCreates a new team
Update TeamUpdates an existing team
Delete TeamSoft-deletes a team
Restore TeamRestores a soft-deleted team
Bulk Add AgentsAdds multiple agents to a team
Bulk Remove AgentsRemoves multiple agents from a team

Key Concepts

  • Team: An organizational unit that groups agents together. Each team has a unique ID, name, and optional description. Teams are part of the organization structure in WFM.
  • Manager: A user responsible for managing team members and their requests (time off, shift trades). Each team can have one manager assigned via manager_id.
  • Agents: Team members who can be assigned to schedules and activities. Agents are assigned to teams via agents_ids array.
  • Soft Delete: Teams are soft-deleted by default, meaning they can be restored. Use deleted_at and is_deleted fields to check status.

Important Notes

  • Agents and managers can belong to multiple teams simultaneously.
  • Bulk operations are logged for audit purposes.

Use Cases

  • Create teams to organize your workforce by department, location, or function
  • Assign managers to handle time off requests and shift trades
  • Group agents for scheduling and reporting purposes
  • Use bulk operations to efficiently manage agent assignments across teams

Filtering

  • deleted: Set to true to include soft-deleted teams in results

Related Articles

JSON format

Teams are represented as JSON objects with the following properties:

NameTypeRead-onlyMandatoryDescription
agents_idsarrayfalsetrueList of agent IDs assigned to this team
deleted_atstringfalsetrueTimestamp when the team was soft deleted, null if active
descriptionstringfalsetrueDescription of the team
idstringfalsetrueUnique identifier for the team
is_deletedbooleanfalsetrueFlag indicating if the team is deleted
manager_idintegerfalsetrueAgent ID of the team manager
namestringfalsetrueName of the team
tymeshift_account_idintegerfalsetrueTymeshift account ID the team belongs to

List all teams

  • GET /v2/teams

Returns a list of all teams in the authenticated user's Workforce Management account. Teams are organizational units used to group agents and assign managers who handle time off requests, shift trades, and other team-related activities.

By default, only active teams are returned. Use the deleted query parameter to include soft-deleted teams.

Allowed for: WFM admins, users with organization structure permissions

Code Samples

curl
curl https://{$subdomain}.zendesk.com/wfm/l5/api/v2/teams \  -v -u {email_address}/token:{api_token} \  -H "Content-Type: application/json"
Go
import (	"fmt"	"io"	"net/http")
func main() {	url := "https://support.zendesk.com/v2/teams"	method := "GET"	req, err := http.NewRequest(method, url, nil)
	if err != nil {		fmt.Println(err)		return	}	req.Header.Add("Content-Type", "application/json")	req.Header.Add("Authorization", "Basic <auth-value>") // Base64 encoded "{email_address}/token:{api_token}"
	client := &http.Client {}	res, err := client.Do(req)	if err != nil {		fmt.Println(err)		return	}	defer res.Body.Close()
	body, err := io.ReadAll(res.Body)	if err != nil {		fmt.Println(err)		return	}	fmt.Println(string(body))}
Java
import com.squareup.okhttp.*;OkHttpClient client = new OkHttpClient();HttpUrl.Builder urlBuilder = HttpUrl.parse("https://support.zendesk.com/v2/teams")		.newBuilder();String userCredentials = "your_email_address" + "/token:" + "your_api_token";String basicAuth = "Basic " + java.util.Base64.getEncoder().encodeToString(userCredentials.getBytes());
Request request = new Request.Builder()		.url(urlBuilder.build())		.method("GET", null)		.addHeader("Content-Type", "application/json")		.addHeader("Authorization", basicAuth)		.build();Response response = client.newCall(request).execute();
Nodejs
var axios = require('axios');
var config = {  method: 'GET',  url: 'https://support.zendesk.com/v2/teams',  headers: {	'Content-Type': 'application/json',	'Authorization': 'Basic <auth-value>', // Base64 encoded "{email_address}/token:{api_token}"  },};
axios(config).then(function (response) {  console.log(JSON.stringify(response.data));}).catch(function (error) {  console.log(error);});
Python
import requestsfrom requests.auth import HTTPBasicAuth
url = "https://support.zendesk.com/v2/teams"headers = {	"Content-Type": "application/json",}email_address = 'your_email_address'api_token = 'your_api_token'# Use basic authenticationauth = HTTPBasicAuth(f'{email_address}/token', api_token)
response = requests.request(	"GET",	url,	auth=auth,	headers=headers)
print(response.text)
Ruby
require "net/http"require "base64"uri = URI("https://support.zendesk.com/v2/teams")request = Net::HTTP::Get.new(uri, "Content-Type": "application/json")email = "your_email_address"api_token = "your_api_token"credentials = "#{email}/token:#{api_token}"encoded_credentials = Base64.strict_encode64(credentials)request["Authorization"] = "Basic #{encoded_credentials}"response = Net::HTTP.start uri.hostname, uri.port, use_ssl: true do |http|	http.request(request)end

Example response(s)

200 OK
// Status 200 OK
{  "data": [    {      "agents_ids": [        101,        102,        103      ],      "deleted_at": null,      "description": "Primary support team",      "id": "550e8400-e29b-41d4-a716-446655440000",      "is_deleted": false,      "manager_id": 67890,      "name": "Support Team Alpha",      "tymeshift_account_id": 12345    }  ],  "message": "ok",  "metadata": null,  "success": true}
401 Unauthorized
// Status 401 Unauthorized
{  "errors": [    {      "code": "Unauthorized",      "status": "401",      "title": "Authentication credentials are invalid or missing."    }  ]}
403 Forbidden
// Status 403 Forbidden
{  "errors": [    {      "code": "Forbidden",      "status": "403",      "title": "You do not have permission to access this resource."    }  ]}

Create a team

  • POST /v2/teams

Creates a new team in the Workforce Management system. Teams organize agents and assign managers responsible for handling time off requests, shift trades, and other team activities.

Agents and managers can belong to multiple teams. Managers are not automatically added as team members - they must also be included in the agents list if they should be part of the team roster.

Allowed for: WFM admins, users with organization structure permissions

Example body

{  "agents_ids": [    101,    102  ],  "description": "A new team for support",  "manager_id": 67890,  "name": "New Support Team"}

Code Samples

curl
curl https://{$subdomain}.zendesk.com/wfm/l5/api/v2/teams \  -d '{"name": "New Support Team", "manager_id": 67890, "agents_ids": [101, 102]}' \  -v -u {email_address}/token:{api_token} \  -H "Content-Type: application/json" \  -X POST
Go
import (	"fmt"	"io"	"net/http"	"strings")
func main() {	url := "https://support.zendesk.com/v2/teams"	method := "POST"	payload := strings.NewReader(`{  "agents_ids": [    101,    102  ],  "description": "A new team for support",  "manager_id": 67890,  "name": "New Support Team"}`)	req, err := http.NewRequest(method, url, payload)
	if err != nil {		fmt.Println(err)		return	}	req.Header.Add("Content-Type", "application/json")	req.Header.Add("Authorization", "Basic <auth-value>") // Base64 encoded "{email_address}/token:{api_token}"
	client := &http.Client {}	res, err := client.Do(req)	if err != nil {		fmt.Println(err)		return	}	defer res.Body.Close()
	body, err := io.ReadAll(res.Body)	if err != nil {		fmt.Println(err)		return	}	fmt.Println(string(body))}
Java
import com.squareup.okhttp.*;OkHttpClient client = new OkHttpClient();HttpUrl.Builder urlBuilder = HttpUrl.parse("https://support.zendesk.com/v2/teams")		.newBuilder();RequestBody body = RequestBody.create(MediaType.parse("application/json"),		"""{  \"agents_ids\": [    101,    102  ],  \"description\": \"A new team for support\",  \"manager_id\": 67890,  \"name\": \"New Support Team\"}""");String userCredentials = "your_email_address" + "/token:" + "your_api_token";String basicAuth = "Basic " + java.util.Base64.getEncoder().encodeToString(userCredentials.getBytes());
Request request = new Request.Builder()		.url(urlBuilder.build())		.method("POST", body)		.addHeader("Content-Type", "application/json")		.addHeader("Authorization", basicAuth)		.build();Response response = client.newCall(request).execute();
Nodejs
var axios = require('axios');var data = JSON.stringify({  "agents_ids": [    101,    102  ],  "description": "A new team for support",  "manager_id": 67890,  "name": "New Support Team"});
var config = {  method: 'POST',  url: 'https://support.zendesk.com/v2/teams',  headers: {	'Content-Type': 'application/json',	'Authorization': 'Basic <auth-value>', // Base64 encoded "{email_address}/token:{api_token}"  },  data : data,};
axios(config).then(function (response) {  console.log(JSON.stringify(response.data));}).catch(function (error) {  console.log(error);});
Python
import requestsimport jsonfrom requests.auth import HTTPBasicAuth
url = "https://support.zendesk.com/v2/teams"
payload = json.loads("""{  "agents_ids": [    101,    102  ],  "description": "A new team for support",  "manager_id": 67890,  "name": "New Support Team"}""")headers = {	"Content-Type": "application/json",}email_address = 'your_email_address'api_token = 'your_api_token'# Use basic authenticationauth = HTTPBasicAuth(f'{email_address}/token', api_token)
response = requests.request(	"POST",	url,	auth=auth,	headers=headers,	json=payload)
print(response.text)
Ruby
require "net/http"require "base64"uri = URI("https://support.zendesk.com/v2/teams")request = Net::HTTP::Post.new(uri, "Content-Type": "application/json")request.body = %q({  "agents_ids": [    101,    102  ],  "description": "A new team for support",  "manager_id": 67890,  "name": "New Support Team"})email = "your_email_address"api_token = "your_api_token"credentials = "#{email}/token:#{api_token}"encoded_credentials = Base64.strict_encode64(credentials)request["Authorization"] = "Basic #{encoded_credentials}"response = Net::HTTP.start uri.hostname, uri.port, use_ssl: true do |http|	http.request(request)end

Example response(s)

200 OK
// Status 200 OK
{  "data": {    "agents_ids": [      101,      102    ],    "deleted_at": null,    "description": "A new team for support",    "id": "550e8400-e29b-41d4-a716-446655440001",    "is_deleted": false,    "manager_id": 67890,    "name": "New Support Team",    "tymeshift_account_id": 12345  },  "message": "ok",  "metadata": null,  "success": true}
400 Bad Request
// Status 400 Bad Request
{  "errors": [    {      "code": "InvalidInput",      "source": {        "pointer": "/field"      },      "status": "400",      "title": "The field is invalid or missing."    }  ]}
401 Unauthorized
// Status 401 Unauthorized
{  "errors": [    {      "code": "Unauthorized",      "status": "401",      "title": "Authentication credentials are invalid or missing."    }  ]}
403 Forbidden
// Status 403 Forbidden
{  "errors": [    {      "code": "Forbidden",      "status": "403",      "title": "You do not have permission to access this resource."    }  ]}

Bulk add agents to teams

  • POST /v2/teams/bulk/add_agents

Adds multiple agents to one or more teams in a single bulk operation. This is more efficient than updating each team individually when you need to assign the same agents to multiple teams.

All assignments are logged for audit purposes. Agents can belong to multiple teams simultaneously.

Allowed for: WFM admins, users with organization structure permissions

Example body

{  "agent_ids": [    101,    102  ],  "team_ids": [    "550e8400-e29b-41d4-a716-446655440000"  ]}

Code Samples

curl
curl https://{$subdomain}.zendesk.com/wfm/l5/api/v2/teams/bulk/add_agents \  -d '{"team_ids": ["550e8400-e29b-41d4-a716-446655440000"], "agent_ids": [101, 102]}' \  -v -u {email_address}/token:{api_token} \  -H "Content-Type: application/json" \  -X POST
Go
import (	"fmt"	"io"	"net/http"	"strings")
func main() {	url := "https://support.zendesk.com/v2/teams/bulk/add_agents"	method := "POST"	payload := strings.NewReader(`{  "agent_ids": [    101,    102  ],  "team_ids": [    "550e8400-e29b-41d4-a716-446655440000"  ]}`)	req, err := http.NewRequest(method, url, payload)
	if err != nil {		fmt.Println(err)		return	}	req.Header.Add("Content-Type", "application/json")	req.Header.Add("Authorization", "Basic <auth-value>") // Base64 encoded "{email_address}/token:{api_token}"
	client := &http.Client {}	res, err := client.Do(req)	if err != nil {		fmt.Println(err)		return	}	defer res.Body.Close()
	body, err := io.ReadAll(res.Body)	if err != nil {		fmt.Println(err)		return	}	fmt.Println(string(body))}
Java
import com.squareup.okhttp.*;OkHttpClient client = new OkHttpClient();HttpUrl.Builder urlBuilder = HttpUrl.parse("https://support.zendesk.com/v2/teams/bulk/add_agents")		.newBuilder();RequestBody body = RequestBody.create(MediaType.parse("application/json"),		"""{  \"agent_ids\": [    101,    102  ],  \"team_ids\": [    \"550e8400-e29b-41d4-a716-446655440000\"  ]}""");String userCredentials = "your_email_address" + "/token:" + "your_api_token";String basicAuth = "Basic " + java.util.Base64.getEncoder().encodeToString(userCredentials.getBytes());
Request request = new Request.Builder()		.url(urlBuilder.build())		.method("POST", body)		.addHeader("Content-Type", "application/json")		.addHeader("Authorization", basicAuth)		.build();Response response = client.newCall(request).execute();
Nodejs
var axios = require('axios');var data = JSON.stringify({  "agent_ids": [    101,    102  ],  "team_ids": [    "550e8400-e29b-41d4-a716-446655440000"  ]});
var config = {  method: 'POST',  url: 'https://support.zendesk.com/v2/teams/bulk/add_agents',  headers: {	'Content-Type': 'application/json',	'Authorization': 'Basic <auth-value>', // Base64 encoded "{email_address}/token:{api_token}"  },  data : data,};
axios(config).then(function (response) {  console.log(JSON.stringify(response.data));}).catch(function (error) {  console.log(error);});
Python
import requestsimport jsonfrom requests.auth import HTTPBasicAuth
url = "https://support.zendesk.com/v2/teams/bulk/add_agents"
payload = json.loads("""{  "agent_ids": [    101,    102  ],  "team_ids": [    "550e8400-e29b-41d4-a716-446655440000"  ]}""")headers = {	"Content-Type": "application/json",}email_address = 'your_email_address'api_token = 'your_api_token'# Use basic authenticationauth = HTTPBasicAuth(f'{email_address}/token', api_token)
response = requests.request(	"POST",	url,	auth=auth,	headers=headers,	json=payload)
print(response.text)
Ruby
require "net/http"require "base64"uri = URI("https://support.zendesk.com/v2/teams/bulk/add_agents")request = Net::HTTP::Post.new(uri, "Content-Type": "application/json")request.body = %q({  "agent_ids": [    101,    102  ],  "team_ids": [    "550e8400-e29b-41d4-a716-446655440000"  ]})email = "your_email_address"api_token = "your_api_token"credentials = "#{email}/token:#{api_token}"encoded_credentials = Base64.strict_encode64(credentials)request["Authorization"] = "Basic #{encoded_credentials}"response = Net::HTTP.start uri.hostname, uri.port, use_ssl: true do |http|	http.request(request)end

Example response(s)

200 OK
// Status 200 OK
{  "data": [    {      "agent_id": 101,      "status": "success",      "team_id": "550e8400-e29b-41d4-a716-446655440000"    }  ],  "message": "Agents bulk added.",  "metadata": null,  "success": true}
400 Bad Request
// Status 400 Bad Request
{  "errors": [    {      "code": "InvalidInput",      "source": {        "pointer": "/field"      },      "status": "400",      "title": "The field is invalid or missing."    }  ]}
401 Unauthorized
// Status 401 Unauthorized
{  "errors": [    {      "code": "Unauthorized",      "status": "401",      "title": "Authentication credentials are invalid or missing."    }  ]}
403 Forbidden
// Status 403 Forbidden
{  "errors": [    {      "code": "Forbidden",      "status": "403",      "title": "You do not have permission to access this resource."    }  ]}
500 Internal Server Error
// Status 500 Internal Server Error
{  "errors": [    {      "code": "InternalError",      "status": "500",      "title": "An unexpected error occurred."    }  ]}

Bulk remove agents from teams

  • POST /v2/teams/bulk/remove_agents

Remove multiple agents from multiple teams in a single atomic request

Example body

{  "agent_ids": [    101,    102  ],  "team_ids": [    "550e8400-e29b-41d4-a716-446655440000"  ]}

Code Samples

curl
curl https://{$subdomain}.zendesk.com/wfm/l5/api/v2/teams/bulk/remove_agents \  -d '{"team_ids": ["550e8400-e29b-41d4-a716-446655440000"], "agent_ids": [101, 102]}' \  -v -u {email_address}/token:{api_token} \  -H "Content-Type: application/json" \  -X POST
Go
import (	"fmt"	"io"	"net/http"	"strings")
func main() {	url := "https://support.zendesk.com/v2/teams/bulk/remove_agents"	method := "POST"	payload := strings.NewReader(`{  "agent_ids": [    101,    102  ],  "team_ids": [    "550e8400-e29b-41d4-a716-446655440000"  ]}`)	req, err := http.NewRequest(method, url, payload)
	if err != nil {		fmt.Println(err)		return	}	req.Header.Add("Content-Type", "application/json")	req.Header.Add("Authorization", "Basic <auth-value>") // Base64 encoded "{email_address}/token:{api_token}"
	client := &http.Client {}	res, err := client.Do(req)	if err != nil {		fmt.Println(err)		return	}	defer res.Body.Close()
	body, err := io.ReadAll(res.Body)	if err != nil {		fmt.Println(err)		return	}	fmt.Println(string(body))}
Java
import com.squareup.okhttp.*;OkHttpClient client = new OkHttpClient();HttpUrl.Builder urlBuilder = HttpUrl.parse("https://support.zendesk.com/v2/teams/bulk/remove_agents")		.newBuilder();RequestBody body = RequestBody.create(MediaType.parse("application/json"),		"""{  \"agent_ids\": [    101,    102  ],  \"team_ids\": [    \"550e8400-e29b-41d4-a716-446655440000\"  ]}""");String userCredentials = "your_email_address" + "/token:" + "your_api_token";String basicAuth = "Basic " + java.util.Base64.getEncoder().encodeToString(userCredentials.getBytes());
Request request = new Request.Builder()		.url(urlBuilder.build())		.method("POST", body)		.addHeader("Content-Type", "application/json")		.addHeader("Authorization", basicAuth)		.build();Response response = client.newCall(request).execute();
Nodejs
var axios = require('axios');var data = JSON.stringify({  "agent_ids": [    101,    102  ],  "team_ids": [    "550e8400-e29b-41d4-a716-446655440000"  ]});
var config = {  method: 'POST',  url: 'https://support.zendesk.com/v2/teams/bulk/remove_agents',  headers: {	'Content-Type': 'application/json',	'Authorization': 'Basic <auth-value>', // Base64 encoded "{email_address}/token:{api_token}"  },  data : data,};
axios(config).then(function (response) {  console.log(JSON.stringify(response.data));}).catch(function (error) {  console.log(error);});
Python
import requestsimport jsonfrom requests.auth import HTTPBasicAuth
url = "https://support.zendesk.com/v2/teams/bulk/remove_agents"
payload = json.loads("""{  "agent_ids": [    101,    102  ],  "team_ids": [    "550e8400-e29b-41d4-a716-446655440000"  ]}""")headers = {	"Content-Type": "application/json",}email_address = 'your_email_address'api_token = 'your_api_token'# Use basic authenticationauth = HTTPBasicAuth(f'{email_address}/token', api_token)
response = requests.request(	"POST",	url,	auth=auth,	headers=headers,	json=payload)
print(response.text)
Ruby
require "net/http"require "base64"uri = URI("https://support.zendesk.com/v2/teams/bulk/remove_agents")request = Net::HTTP::Post.new(uri, "Content-Type": "application/json")request.body = %q({  "agent_ids": [    101,    102  ],  "team_ids": [    "550e8400-e29b-41d4-a716-446655440000"  ]})email = "your_email_address"api_token = "your_api_token"credentials = "#{email}/token:#{api_token}"encoded_credentials = Base64.strict_encode64(credentials)request["Authorization"] = "Basic #{encoded_credentials}"response = Net::HTTP.start uri.hostname, uri.port, use_ssl: true do |http|	http.request(request)end

Example response(s)

200 OK
// Status 200 OK
{  "data": {    "results": [      {        "agent_id": 101,        "team_id": "550e8400-e29b-41d4-a716-446655440000"      }    ]  },  "message": "Agents bulk removed.",  "metadata": null,  "success": true}
400 Bad Request
// Status 400 Bad Request
{  "errors": [    {      "code": "InvalidInput",      "source": {        "pointer": "/field"      },      "status": "400",      "title": "The field is invalid or missing."    }  ]}
401 Unauthorized
// Status 401 Unauthorized
{  "errors": [    {      "code": "Unauthorized",      "status": "401",      "title": "Authentication credentials are invalid or missing."    }  ]}
403 Forbidden
// Status 403 Forbidden
{  "errors": [    {      "code": "Forbidden",      "status": "403",      "title": "You do not have permission to access this resource."    }  ]}
500 Internal Server Error
// Status 500 Internal Server Error
{  "errors": [    {      "code": "InternalError",      "status": "500",      "title": "An unexpected error occurred."    }  ]}

Restore a deleted team

  • POST /v2/teams/restore

Restores a previously soft-deleted team, making it active again. The team's original configuration including name, description, manager, and agent assignments are preserved.

You can find soft-deleted teams by using the List Teams endpoint with the deleted parameter.

Allowed for: WFM admins, users with organization structure permissions

Example body

{  "id": "550e8400-e29b-41d4-a716-446655440000"}

Code Samples

curl
curl https://{$subdomain}.zendesk.com/wfm/l5/api/v2/teams/restore \  -d '{"id": "550e8400-e29b-41d4-a716-446655440000"}' \  -v -u {email_address}/token:{api_token} \  -H "Content-Type: application/json" \  -X POST
Go
import (	"fmt"	"io"	"net/http"	"strings")
func main() {	url := "https://support.zendesk.com/v2/teams/restore"	method := "POST"	payload := strings.NewReader(`{  "id": "550e8400-e29b-41d4-a716-446655440000"}`)	req, err := http.NewRequest(method, url, payload)
	if err != nil {		fmt.Println(err)		return	}	req.Header.Add("Content-Type", "application/json")	req.Header.Add("Authorization", "Basic <auth-value>") // Base64 encoded "{email_address}/token:{api_token}"
	client := &http.Client {}	res, err := client.Do(req)	if err != nil {		fmt.Println(err)		return	}	defer res.Body.Close()
	body, err := io.ReadAll(res.Body)	if err != nil {		fmt.Println(err)		return	}	fmt.Println(string(body))}
Java
import com.squareup.okhttp.*;OkHttpClient client = new OkHttpClient();HttpUrl.Builder urlBuilder = HttpUrl.parse("https://support.zendesk.com/v2/teams/restore")		.newBuilder();RequestBody body = RequestBody.create(MediaType.parse("application/json"),		"""{  \"id\": \"550e8400-e29b-41d4-a716-446655440000\"}""");String userCredentials = "your_email_address" + "/token:" + "your_api_token";String basicAuth = "Basic " + java.util.Base64.getEncoder().encodeToString(userCredentials.getBytes());
Request request = new Request.Builder()		.url(urlBuilder.build())		.method("POST", body)		.addHeader("Content-Type", "application/json")		.addHeader("Authorization", basicAuth)		.build();Response response = client.newCall(request).execute();
Nodejs
var axios = require('axios');var data = JSON.stringify({  "id": "550e8400-e29b-41d4-a716-446655440000"});
var config = {  method: 'POST',  url: 'https://support.zendesk.com/v2/teams/restore',  headers: {	'Content-Type': 'application/json',	'Authorization': 'Basic <auth-value>', // Base64 encoded "{email_address}/token:{api_token}"  },  data : data,};
axios(config).then(function (response) {  console.log(JSON.stringify(response.data));}).catch(function (error) {  console.log(error);});
Python
import requestsimport jsonfrom requests.auth import HTTPBasicAuth
url = "https://support.zendesk.com/v2/teams/restore"
payload = json.loads("""{  "id": "550e8400-e29b-41d4-a716-446655440000"}""")headers = {	"Content-Type": "application/json",}email_address = 'your_email_address'api_token = 'your_api_token'# Use basic authenticationauth = HTTPBasicAuth(f'{email_address}/token', api_token)
response = requests.request(	"POST",	url,	auth=auth,	headers=headers,	json=payload)
print(response.text)
Ruby
require "net/http"require "base64"uri = URI("https://support.zendesk.com/v2/teams/restore")request = Net::HTTP::Post.new(uri, "Content-Type": "application/json")request.body = %q({  "id": "550e8400-e29b-41d4-a716-446655440000"})email = "your_email_address"api_token = "your_api_token"credentials = "#{email}/token:#{api_token}"encoded_credentials = Base64.strict_encode64(credentials)request["Authorization"] = "Basic #{encoded_credentials}"response = Net::HTTP.start uri.hostname, uri.port, use_ssl: true do |http|	http.request(request)end

Example response(s)

200 OK
// Status 200 OK
{  "data": "success",  "message": "ok",  "metadata": null,  "success": true}
400 Bad Request
// Status 400 Bad Request
{  "errors": [    {      "code": "InvalidInput",      "source": {        "pointer": "/field"      },      "status": "400",      "title": "The field is invalid or missing."    }  ]}
401 Unauthorized
// Status 401 Unauthorized
{  "errors": [    {      "code": "Unauthorized",      "status": "401",      "title": "Authentication credentials are invalid or missing."    }  ]}
403 Forbidden
// Status 403 Forbidden
{  "errors": [    {      "code": "Forbidden",      "status": "403",      "title": "You do not have permission to access this resource."    }  ]}
404 Not Found
// Status 404 Not Found
{  "errors": [    {      "code": "ResourceNotFound",      "status": "404",      "title": "The requested resource could not be found."    }  ]}

Show a team

  • GET /v2/teams/{id}

Returns details of a specific team including its name, description, manager, and assigned agents. This endpoint also returns soft-deleted teams, which can be identified by the is_deleted flag and deleted_at timestamp.

Allowed for: WFM admins, users with organization structure permissions

Parameters

NameTypeInRequiredDescription
idstringPathtrueTeam UUID

Code Samples

curl
curl https://{$subdomain}.zendesk.com/wfm/l5/api/v2/teams/{team_id} \  -v -u {email_address}/token:{api_token} \  -H "Content-Type: application/json"
Go
import (	"fmt"	"io"	"net/http")
func main() {	url := "https://support.zendesk.com/v2/teams/550e8400-e29b-41d4-a716-446655440000"	method := "GET"	req, err := http.NewRequest(method, url, nil)
	if err != nil {		fmt.Println(err)		return	}	req.Header.Add("Content-Type", "application/json")	req.Header.Add("Authorization", "Basic <auth-value>") // Base64 encoded "{email_address}/token:{api_token}"
	client := &http.Client {}	res, err := client.Do(req)	if err != nil {		fmt.Println(err)		return	}	defer res.Body.Close()
	body, err := io.ReadAll(res.Body)	if err != nil {		fmt.Println(err)		return	}	fmt.Println(string(body))}
Java
import com.squareup.okhttp.*;OkHttpClient client = new OkHttpClient();HttpUrl.Builder urlBuilder = HttpUrl.parse("https://support.zendesk.com/v2/teams/550e8400-e29b-41d4-a716-446655440000")		.newBuilder();String userCredentials = "your_email_address" + "/token:" + "your_api_token";String basicAuth = "Basic " + java.util.Base64.getEncoder().encodeToString(userCredentials.getBytes());
Request request = new Request.Builder()		.url(urlBuilder.build())		.method("GET", null)		.addHeader("Content-Type", "application/json")		.addHeader("Authorization", basicAuth)		.build();Response response = client.newCall(request).execute();
Nodejs
var axios = require('axios');
var config = {  method: 'GET',  url: 'https://support.zendesk.com/v2/teams/550e8400-e29b-41d4-a716-446655440000',  headers: {	'Content-Type': 'application/json',	'Authorization': 'Basic <auth-value>', // Base64 encoded "{email_address}/token:{api_token}"  },};
axios(config).then(function (response) {  console.log(JSON.stringify(response.data));}).catch(function (error) {  console.log(error);});
Python
import requestsfrom requests.auth import HTTPBasicAuth
url = "https://support.zendesk.com/v2/teams/550e8400-e29b-41d4-a716-446655440000"headers = {	"Content-Type": "application/json",}email_address = 'your_email_address'api_token = 'your_api_token'# Use basic authenticationauth = HTTPBasicAuth(f'{email_address}/token', api_token)
response = requests.request(	"GET",	url,	auth=auth,	headers=headers)
print(response.text)
Ruby
require "net/http"require "base64"uri = URI("https://support.zendesk.com/v2/teams/550e8400-e29b-41d4-a716-446655440000")request = Net::HTTP::Get.new(uri, "Content-Type": "application/json")email = "your_email_address"api_token = "your_api_token"credentials = "#{email}/token:#{api_token}"encoded_credentials = Base64.strict_encode64(credentials)request["Authorization"] = "Basic #{encoded_credentials}"response = Net::HTTP.start uri.hostname, uri.port, use_ssl: true do |http|	http.request(request)end

Example response(s)

200 OK
// Status 200 OK
{  "data": {    "agents_ids": [      101,      102,      103    ],    "deleted_at": null,    "description": "Primary support team",    "id": "550e8400-e29b-41d4-a716-446655440000",    "is_deleted": false,    "manager_id": 67890,    "name": "Support Team Alpha",    "tymeshift_account_id": 12345  },  "message": "ok",  "metadata": null,  "success": true}
401 Unauthorized
// Status 401 Unauthorized
{  "errors": [    {      "code": "Unauthorized",      "status": "401",      "title": "Authentication credentials are invalid or missing."    }  ]}
403 Forbidden
// Status 403 Forbidden
{  "errors": [    {      "code": "Forbidden",      "status": "403",      "title": "You do not have permission to access this resource."    }  ]}
404 Not Found
// Status 404 Not Found
{  "errors": [    {      "code": "ResourceNotFound",      "status": "404",      "title": "The requested resource could not be found."    }  ]}

Update a team

  • PUT /v2/teams/{id}

Updates the properties of an existing team. You can modify the team name, description, manager, and the list of assigned agents.

To add or remove agents from multiple teams at once, use the bulk add/remove agents endpoints instead.

Allowed for: WFM admins, users with organization structure permissions

Parameters

NameTypeInRequiredDescription
idstringPathtrueTeam UUID

Example body

{  "agents_ids": [    101,    102,    104  ],  "description": "Updated description",  "manager_id": 67890,  "name": "Updated Team Name"}

Code Samples

curl
curl https://{$subdomain}.zendesk.com/wfm/l5/api/v2/teams/{team_id} \  -d '{"name": "Updated Team Name", "description": "Updated description"}' \  -v -u {email_address}/token:{api_token} \  -H "Content-Type: application/json" \  -X PUT
Go
import (	"fmt"	"io"	"net/http"	"strings")
func main() {	url := "https://support.zendesk.com/v2/teams/550e8400-e29b-41d4-a716-446655440000"	method := "PUT"	payload := strings.NewReader(`{  "agents_ids": [    101,    102,    104  ],  "description": "Updated description",  "manager_id": 67890,  "name": "Updated Team Name"}`)	req, err := http.NewRequest(method, url, payload)
	if err != nil {		fmt.Println(err)		return	}	req.Header.Add("Content-Type", "application/json")	req.Header.Add("Authorization", "Basic <auth-value>") // Base64 encoded "{email_address}/token:{api_token}"
	client := &http.Client {}	res, err := client.Do(req)	if err != nil {		fmt.Println(err)		return	}	defer res.Body.Close()
	body, err := io.ReadAll(res.Body)	if err != nil {		fmt.Println(err)		return	}	fmt.Println(string(body))}
Java
import com.squareup.okhttp.*;OkHttpClient client = new OkHttpClient();HttpUrl.Builder urlBuilder = HttpUrl.parse("https://support.zendesk.com/v2/teams/550e8400-e29b-41d4-a716-446655440000")		.newBuilder();RequestBody body = RequestBody.create(MediaType.parse("application/json"),		"""{  \"agents_ids\": [    101,    102,    104  ],  \"description\": \"Updated description\",  \"manager_id\": 67890,  \"name\": \"Updated Team Name\"}""");String userCredentials = "your_email_address" + "/token:" + "your_api_token";String basicAuth = "Basic " + java.util.Base64.getEncoder().encodeToString(userCredentials.getBytes());
Request request = new Request.Builder()		.url(urlBuilder.build())		.method("PUT", body)		.addHeader("Content-Type", "application/json")		.addHeader("Authorization", basicAuth)		.build();Response response = client.newCall(request).execute();
Nodejs
var axios = require('axios');var data = JSON.stringify({  "agents_ids": [    101,    102,    104  ],  "description": "Updated description",  "manager_id": 67890,  "name": "Updated Team Name"});
var config = {  method: 'PUT',  url: 'https://support.zendesk.com/v2/teams/550e8400-e29b-41d4-a716-446655440000',  headers: {	'Content-Type': 'application/json',	'Authorization': 'Basic <auth-value>', // Base64 encoded "{email_address}/token:{api_token}"  },  data : data,};
axios(config).then(function (response) {  console.log(JSON.stringify(response.data));}).catch(function (error) {  console.log(error);});
Python
import requestsimport jsonfrom requests.auth import HTTPBasicAuth
url = "https://support.zendesk.com/v2/teams/550e8400-e29b-41d4-a716-446655440000"
payload = json.loads("""{  "agents_ids": [    101,    102,    104  ],  "description": "Updated description",  "manager_id": 67890,  "name": "Updated Team Name"}""")headers = {	"Content-Type": "application/json",}email_address = 'your_email_address'api_token = 'your_api_token'# Use basic authenticationauth = HTTPBasicAuth(f'{email_address}/token', api_token)
response = requests.request(	"PUT",	url,	auth=auth,	headers=headers,	json=payload)
print(response.text)
Ruby
require "net/http"require "base64"uri = URI("https://support.zendesk.com/v2/teams/550e8400-e29b-41d4-a716-446655440000")request = Net::HTTP::Put.new(uri, "Content-Type": "application/json")request.body = %q({  "agents_ids": [    101,    102,    104  ],  "description": "Updated description",  "manager_id": 67890,  "name": "Updated Team Name"})email = "your_email_address"api_token = "your_api_token"credentials = "#{email}/token:#{api_token}"encoded_credentials = Base64.strict_encode64(credentials)request["Authorization"] = "Basic #{encoded_credentials}"response = Net::HTTP.start uri.hostname, uri.port, use_ssl: true do |http|	http.request(request)end

Example response(s)

200 OK
// Status 200 OK
{  "data": {    "agents_ids": [      101,      102,      104    ],    "deleted_at": null,    "description": "Updated description",    "id": "550e8400-e29b-41d4-a716-446655440000",    "is_deleted": false,    "manager_id": 67890,    "name": "Updated Team Name",    "tymeshift_account_id": 12345  },  "message": "ok",  "metadata": null,  "success": true}
400 Bad Request
// Status 400 Bad Request
{  "errors": [    {      "code": "InvalidInput",      "source": {        "pointer": "/field"      },      "status": "400",      "title": "The field is invalid or missing."    }  ]}
401 Unauthorized
// Status 401 Unauthorized
{  "errors": [    {      "code": "Unauthorized",      "status": "401",      "title": "Authentication credentials are invalid or missing."    }  ]}
403 Forbidden
// Status 403 Forbidden
{  "errors": [    {      "code": "Forbidden",      "status": "403",      "title": "You do not have permission to access this resource."    }  ]}
404 Not Found
// Status 404 Not Found
{  "errors": [    {      "code": "ResourceNotFound",      "status": "404",      "title": "The requested resource could not be found."    }  ]}

Delete a team

  • DELETE /v2/teams/{id}

Soft deletes a team by marking it as deleted without permanently removing it from the system. Soft-deleted teams can be restored using the restore endpoint.

Deleting a team does not remove the agents from the system - they remain available for assignment to other teams.

Allowed for: WFM admins, users with organization structure permissions

Parameters

NameTypeInRequiredDescription
idstringPathtrueTeam UUID

Code Samples

curl
curl https://{$subdomain}.zendesk.com/wfm/l5/api/v2/teams/{team_id} \  -v -u {email_address}/token:{api_token} \  -H "Content-Type: application/json" \  -X DELETE
Go
import (	"fmt"	"io"	"net/http")
func main() {	url := "https://support.zendesk.com/v2/teams/550e8400-e29b-41d4-a716-446655440000"	method := "DELETE"	req, err := http.NewRequest(method, url, nil)
	if err != nil {		fmt.Println(err)		return	}	req.Header.Add("Content-Type", "application/json")	req.Header.Add("Authorization", "Basic <auth-value>") // Base64 encoded "{email_address}/token:{api_token}"
	client := &http.Client {}	res, err := client.Do(req)	if err != nil {		fmt.Println(err)		return	}	defer res.Body.Close()
	body, err := io.ReadAll(res.Body)	if err != nil {		fmt.Println(err)		return	}	fmt.Println(string(body))}
Java
import com.squareup.okhttp.*;OkHttpClient client = new OkHttpClient();HttpUrl.Builder urlBuilder = HttpUrl.parse("https://support.zendesk.com/v2/teams/550e8400-e29b-41d4-a716-446655440000")		.newBuilder();String userCredentials = "your_email_address" + "/token:" + "your_api_token";String basicAuth = "Basic " + java.util.Base64.getEncoder().encodeToString(userCredentials.getBytes());
Request request = new Request.Builder()		.url(urlBuilder.build())		.method("DELETE", null)		.addHeader("Content-Type", "application/json")		.addHeader("Authorization", basicAuth)		.build();Response response = client.newCall(request).execute();
Nodejs
var axios = require('axios');
var config = {  method: 'DELETE',  url: 'https://support.zendesk.com/v2/teams/550e8400-e29b-41d4-a716-446655440000',  headers: {	'Content-Type': 'application/json',	'Authorization': 'Basic <auth-value>', // Base64 encoded "{email_address}/token:{api_token}"  },};
axios(config).then(function (response) {  console.log(JSON.stringify(response.data));}).catch(function (error) {  console.log(error);});
Python
import requestsfrom requests.auth import HTTPBasicAuth
url = "https://support.zendesk.com/v2/teams/550e8400-e29b-41d4-a716-446655440000"headers = {	"Content-Type": "application/json",}email_address = 'your_email_address'api_token = 'your_api_token'# Use basic authenticationauth = HTTPBasicAuth(f'{email_address}/token', api_token)
response = requests.request(	"DELETE",	url,	auth=auth,	headers=headers)
print(response.text)
Ruby
require "net/http"require "base64"uri = URI("https://support.zendesk.com/v2/teams/550e8400-e29b-41d4-a716-446655440000")request = Net::HTTP::Delete.new(uri, "Content-Type": "application/json")email = "your_email_address"api_token = "your_api_token"credentials = "#{email}/token:#{api_token}"encoded_credentials = Base64.strict_encode64(credentials)request["Authorization"] = "Basic #{encoded_credentials}"response = Net::HTTP.start uri.hostname, uri.port, use_ssl: true do |http|	http.request(request)end

Example response(s)

200 OK
// Status 200 OK
{  "data": "success",  "message": "ok",  "metadata": null,  "success": true}
400 Bad Request
// Status 400 Bad Request
{  "errors": [    {      "code": "InvalidInput",      "source": {        "pointer": "/field"      },      "status": "400",      "title": "The field is invalid or missing."    }  ]}
401 Unauthorized
// Status 401 Unauthorized
{  "errors": [    {      "code": "Unauthorized",      "status": "401",      "title": "Authentication credentials are invalid or missing."    }  ]}
403 Forbidden
// Status 403 Forbidden
{  "errors": [    {      "code": "Forbidden",      "status": "403",      "title": "You do not have permission to access this resource."    }  ]}
404 Not Found
// Status 404 Not Found
{  "errors": [    {      "code": "ResourceNotFound",      "status": "404",      "title": "The requested resource could not be found."    }  ]}