curl --request POST \
--url 'https://api.flashcat.cloud/team/upsert?app_key=' \
--header 'Content-Type: application/json' \
--data '
{
"team_name": "Backend SRE",
"description": "Backend reliability engineering team",
"person_ids": [
80011,
80012
]
}
'import requests
url = "https://api.flashcat.cloud/team/upsert?app_key="
payload = {
"team_name": "Backend SRE",
"description": "Backend reliability engineering team",
"person_ids": [80011, 80012]
}
headers = {"Content-Type": "application/json"}
response = requests.post(url, json=payload, headers=headers)
print(response.text)const options = {
method: 'POST',
headers: {'Content-Type': 'application/json'},
body: JSON.stringify({
team_name: 'Backend SRE',
description: 'Backend reliability engineering team',
person_ids: [80011, 80012]
})
};
fetch('https://api.flashcat.cloud/team/upsert?app_key=', options)
.then(res => res.json())
.then(res => console.log(res))
.catch(err => console.error(err));<?php
$curl = curl_init();
curl_setopt_array($curl, [
CURLOPT_URL => "https://api.flashcat.cloud/team/upsert?app_key=",
CURLOPT_RETURNTRANSFER => true,
CURLOPT_ENCODING => "",
CURLOPT_MAXREDIRS => 10,
CURLOPT_TIMEOUT => 30,
CURLOPT_HTTP_VERSION => CURL_HTTP_VERSION_1_1,
CURLOPT_CUSTOMREQUEST => "POST",
CURLOPT_POSTFIELDS => json_encode([
'team_name' => 'Backend SRE',
'description' => 'Backend reliability engineering team',
'person_ids' => [
80011,
80012
]
]),
CURLOPT_HTTPHEADER => [
"Content-Type: application/json"
],
]);
$response = curl_exec($curl);
$err = curl_error($curl);
curl_close($curl);
if ($err) {
echo "cURL Error #:" . $err;
} else {
echo $response;
}package main
import (
"fmt"
"strings"
"net/http"
"io"
)
func main() {
url := "https://api.flashcat.cloud/team/upsert?app_key="
payload := strings.NewReader("{\n \"team_name\": \"Backend SRE\",\n \"description\": \"Backend reliability engineering team\",\n \"person_ids\": [\n 80011,\n 80012\n ]\n}")
req, _ := http.NewRequest("POST", url, payload)
req.Header.Add("Content-Type", "application/json")
res, _ := http.DefaultClient.Do(req)
defer res.Body.Close()
body, _ := io.ReadAll(res.Body)
fmt.Println(string(body))
}HttpResponse<String> response = Unirest.post("https://api.flashcat.cloud/team/upsert?app_key=")
.header("Content-Type", "application/json")
.body("{\n \"team_name\": \"Backend SRE\",\n \"description\": \"Backend reliability engineering team\",\n \"person_ids\": [\n 80011,\n 80012\n ]\n}")
.asString();require 'uri'
require 'net/http'
url = URI("https://api.flashcat.cloud/team/upsert?app_key=")
http = Net::HTTP.new(url.host, url.port)
http.use_ssl = true
request = Net::HTTP::Post.new(url)
request["Content-Type"] = 'application/json'
request.body = "{\n \"team_name\": \"Backend SRE\",\n \"description\": \"Backend reliability engineering team\",\n \"person_ids\": [\n 80011,\n 80012\n ]\n}"
response = http.request(request)
puts response.read_body{
"request_id": "01HK8XQE3Z7JM2NTFQ5YJ8P9R4",
"data": {
"team_id": 1001,
"team_name": "Backend SRE"
}
}{
"request_id": "01HK8XQE3Z7JM2NTFQ5YJ8P9R4",
"error": {
"code": "InvalidParameter",
"message": "The specified parameter is not valid."
}
}{
"request_id": "01HK8XQE3Z7JM2NTFQ5YJ8P9R4",
"error": {
"code": "Unauthorized",
"message": "You are unauthorized."
}
}{
"request_id": "01HK8XQE3Z7JM2NTFQ5YJ8P9R4",
"error": {
"code": "AccessDenied",
"message": "Access Denied."
}
}{
"request_id": "01HK8XQE3Z7JM2NTFQ5YJ8P9R4",
"error": {
"code": "RequestTooFrequently",
"message": "Request too frequently."
}
}{
"request_id": "01HK8XQE3Z7JM2NTFQ5YJ8P9R4",
"error": {
"code": "InternalError",
"message": "We encountered an internal error, and it has been reported. Please try again later."
}
}Create or update a team
Create a new team or update an existing one. Pass team_id to update.
curl --request POST \
--url 'https://api.flashcat.cloud/team/upsert?app_key=' \
--header 'Content-Type: application/json' \
--data '
{
"team_name": "Backend SRE",
"description": "Backend reliability engineering team",
"person_ids": [
80011,
80012
]
}
'import requests
url = "https://api.flashcat.cloud/team/upsert?app_key="
payload = {
"team_name": "Backend SRE",
"description": "Backend reliability engineering team",
"person_ids": [80011, 80012]
}
headers = {"Content-Type": "application/json"}
response = requests.post(url, json=payload, headers=headers)
print(response.text)const options = {
method: 'POST',
headers: {'Content-Type': 'application/json'},
body: JSON.stringify({
team_name: 'Backend SRE',
description: 'Backend reliability engineering team',
person_ids: [80011, 80012]
})
};
fetch('https://api.flashcat.cloud/team/upsert?app_key=', options)
.then(res => res.json())
.then(res => console.log(res))
.catch(err => console.error(err));<?php
$curl = curl_init();
curl_setopt_array($curl, [
CURLOPT_URL => "https://api.flashcat.cloud/team/upsert?app_key=",
CURLOPT_RETURNTRANSFER => true,
CURLOPT_ENCODING => "",
CURLOPT_MAXREDIRS => 10,
CURLOPT_TIMEOUT => 30,
CURLOPT_HTTP_VERSION => CURL_HTTP_VERSION_1_1,
CURLOPT_CUSTOMREQUEST => "POST",
CURLOPT_POSTFIELDS => json_encode([
'team_name' => 'Backend SRE',
'description' => 'Backend reliability engineering team',
'person_ids' => [
80011,
80012
]
]),
CURLOPT_HTTPHEADER => [
"Content-Type: application/json"
],
]);
$response = curl_exec($curl);
$err = curl_error($curl);
curl_close($curl);
if ($err) {
echo "cURL Error #:" . $err;
} else {
echo $response;
}package main
import (
"fmt"
"strings"
"net/http"
"io"
)
func main() {
url := "https://api.flashcat.cloud/team/upsert?app_key="
payload := strings.NewReader("{\n \"team_name\": \"Backend SRE\",\n \"description\": \"Backend reliability engineering team\",\n \"person_ids\": [\n 80011,\n 80012\n ]\n}")
req, _ := http.NewRequest("POST", url, payload)
req.Header.Add("Content-Type", "application/json")
res, _ := http.DefaultClient.Do(req)
defer res.Body.Close()
body, _ := io.ReadAll(res.Body)
fmt.Println(string(body))
}HttpResponse<String> response = Unirest.post("https://api.flashcat.cloud/team/upsert?app_key=")
.header("Content-Type", "application/json")
.body("{\n \"team_name\": \"Backend SRE\",\n \"description\": \"Backend reliability engineering team\",\n \"person_ids\": [\n 80011,\n 80012\n ]\n}")
.asString();require 'uri'
require 'net/http'
url = URI("https://api.flashcat.cloud/team/upsert?app_key=")
http = Net::HTTP.new(url.host, url.port)
http.use_ssl = true
request = Net::HTTP::Post.new(url)
request["Content-Type"] = 'application/json'
request.body = "{\n \"team_name\": \"Backend SRE\",\n \"description\": \"Backend reliability engineering team\",\n \"person_ids\": [\n 80011,\n 80012\n ]\n}"
response = http.request(request)
puts response.read_body{
"request_id": "01HK8XQE3Z7JM2NTFQ5YJ8P9R4",
"data": {
"team_id": 1001,
"team_name": "Backend SRE"
}
}{
"request_id": "01HK8XQE3Z7JM2NTFQ5YJ8P9R4",
"error": {
"code": "InvalidParameter",
"message": "The specified parameter is not valid."
}
}{
"request_id": "01HK8XQE3Z7JM2NTFQ5YJ8P9R4",
"error": {
"code": "Unauthorized",
"message": "You are unauthorized."
}
}{
"request_id": "01HK8XQE3Z7JM2NTFQ5YJ8P9R4",
"error": {
"code": "AccessDenied",
"message": "Access Denied."
}
}{
"request_id": "01HK8XQE3Z7JM2NTFQ5YJ8P9R4",
"error": {
"code": "RequestTooFrequently",
"message": "Request too frequently."
}
}{
"request_id": "01HK8XQE3Z7JM2NTFQ5YJ8P9R4",
"error": {
"code": "InternalError",
"message": "We encountered an internal error, and it has been reported. Please try again later."
}
}Restrictions
| Aspect | Value |
|---|---|
| Rate limits | 1,000 requests/minute; 50 requests/second per account |
| Permissions | Teams Manage (organization) |
Usage
- Omit
team_id(or set to 0) to create a new team; pass an existing ID to update. team_namemust be 1–39 characters and unique within the account.- Pass
person_idsto set team membership; this replaces the entire member list. - Pass
emailsorphonesto invite members who don’t yet have accounts. ref_idis an external identifier for integration with third-party HR systems.- Every call is recorded in the account audit log. Don’t put secrets in request fields.
Authorizations
App key issued from the Flashduty console under Account → APP Keys. Required on every public API call. Keep it secret — it grants the same access as the owning account.
Body
Parameters for creating or updating a team.
Team display name. 1–39 characters.
1 - 39Team ID. Omit or set to 0 to create a new team.
Free-form description.
500Member IDs to set as team members. Replaces the existing member list.
Email addresses to invite as members.
Phone numbers to invite as members.
Default country code applied to any phones entries that are not in E.164 format.
External reference ID for HR system integration.
If true and a team with the same name already exists, reset its membership to the provided person_ids.
Response
Success
Success response envelope. On every 2xx response, request_id identifies the call (also mirrored in the Flashcat-Request-Id header) and data holds the endpoint-specific payload. Failure responses use a different shape — see ErrorResponse.
Was this page helpful?