Get a team member
curl --request GET \
--url https://api.cal.id/teams/{teamId}/memberships/{membershipId} \
--header 'Authorization: Bearer <token>'import requests
url = "https://api.cal.id/teams/{teamId}/memberships/{membershipId}"
headers = {"Authorization": "Bearer <token>"}
response = requests.get(url, headers=headers)
print(response.text)const options = {method: 'GET', headers: {Authorization: 'Bearer <token>'}};
fetch('https://api.cal.id/teams/{teamId}/memberships/{membershipId}', 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.cal.id/teams/{teamId}/memberships/{membershipId}",
CURLOPT_RETURNTRANSFER => true,
CURLOPT_ENCODING => "",
CURLOPT_MAXREDIRS => 10,
CURLOPT_TIMEOUT => 30,
CURLOPT_HTTP_VERSION => CURL_HTTP_VERSION_1_1,
CURLOPT_CUSTOMREQUEST => "GET",
CURLOPT_HTTPHEADER => [
"Authorization: Bearer <token>"
],
]);
$response = curl_exec($curl);
$err = curl_error($curl);
curl_close($curl);
if ($err) {
echo "cURL Error #:" . $err;
} else {
echo $response;
}package main
import (
"fmt"
"net/http"
"io"
)
func main() {
url := "https://api.cal.id/teams/{teamId}/memberships/{membershipId}"
req, _ := http.NewRequest("GET", url, nil)
req.Header.Add("Authorization", "Bearer <token>")
res, _ := http.DefaultClient.Do(req)
defer res.Body.Close()
body, _ := io.ReadAll(res.Body)
fmt.Println(string(body))
}HttpResponse<String> response = Unirest.get("https://api.cal.id/teams/{teamId}/memberships/{membershipId}")
.header("Authorization", "Bearer <token>")
.asString();require 'uri'
require 'net/http'
url = URI("https://api.cal.id/teams/{teamId}/memberships/{membershipId}")
http = Net::HTTP.new(url.host, url.port)
http.use_ssl = true
request = Net::HTTP::Get.new(url)
request["Authorization"] = 'Bearer <token>'
response = http.request(request)
puts response.read_body{
"success": true,
"data": {
"id": 9102,
"teamId": 812,
"userId": 4088,
"acceptedInvitation": true,
"role": "ADMIN",
"impersonation": false,
"createdAt": "2026-01-22T08:15:00.000Z",
"updatedAt": "2026-03-04T09:02:44.000Z",
"user": {
"id": 4088,
"name": "Priya Sharma",
"email": "priya.sharma@example.com",
"username": "priya-sharma",
"avatarUrl": "https://cal.id/avatar/priya-sharma.png",
"timeZone": "Asia/Kolkata"
},
"team": {
"id": 812,
"name": "Acme Sales",
"slug": "acme-sales"
}
},
"message": "Team membership retrieved"
}{
"success": false,
"message": "<string>",
"error": {
"code": "<string>",
"message": "<string>",
"details": "<unknown>"
}
}{
"success": false,
"message": "<string>",
"error": {
"code": "<string>",
"message": "<string>",
"details": "<unknown>"
}
}{
"success": false,
"message": "<string>",
"error": {
"code": "<string>",
"message": "<string>",
"details": "<unknown>"
}
}{
"success": false,
"message": "<string>",
"error": {
"code": "<string>",
"message": "<string>",
"details": "<unknown>"
}
}{
"success": false,
"message": "Rate limit exceeded",
"error": {
"code": "TOO_MANY_REQUESTS",
"message": "Too many requests. Please retry after the rate limit window resets."
}
}Team Memberships
Get a team member
Returns a single membership by ID, with the embedded user and team objects, so you can check one person’s role and invitation state without paging the whole roster. If the membership exists but belongs to a different team than the one in the path, the call returns 409 rather than the record.
GET
/
teams
/
{teamId}
/
memberships
/
{membershipId}
Get a team member
curl --request GET \
--url https://api.cal.id/teams/{teamId}/memberships/{membershipId} \
--header 'Authorization: Bearer <token>'import requests
url = "https://api.cal.id/teams/{teamId}/memberships/{membershipId}"
headers = {"Authorization": "Bearer <token>"}
response = requests.get(url, headers=headers)
print(response.text)const options = {method: 'GET', headers: {Authorization: 'Bearer <token>'}};
fetch('https://api.cal.id/teams/{teamId}/memberships/{membershipId}', 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.cal.id/teams/{teamId}/memberships/{membershipId}",
CURLOPT_RETURNTRANSFER => true,
CURLOPT_ENCODING => "",
CURLOPT_MAXREDIRS => 10,
CURLOPT_TIMEOUT => 30,
CURLOPT_HTTP_VERSION => CURL_HTTP_VERSION_1_1,
CURLOPT_CUSTOMREQUEST => "GET",
CURLOPT_HTTPHEADER => [
"Authorization: Bearer <token>"
],
]);
$response = curl_exec($curl);
$err = curl_error($curl);
curl_close($curl);
if ($err) {
echo "cURL Error #:" . $err;
} else {
echo $response;
}package main
import (
"fmt"
"net/http"
"io"
)
func main() {
url := "https://api.cal.id/teams/{teamId}/memberships/{membershipId}"
req, _ := http.NewRequest("GET", url, nil)
req.Header.Add("Authorization", "Bearer <token>")
res, _ := http.DefaultClient.Do(req)
defer res.Body.Close()
body, _ := io.ReadAll(res.Body)
fmt.Println(string(body))
}HttpResponse<String> response = Unirest.get("https://api.cal.id/teams/{teamId}/memberships/{membershipId}")
.header("Authorization", "Bearer <token>")
.asString();require 'uri'
require 'net/http'
url = URI("https://api.cal.id/teams/{teamId}/memberships/{membershipId}")
http = Net::HTTP.new(url.host, url.port)
http.use_ssl = true
request = Net::HTTP::Get.new(url)
request["Authorization"] = 'Bearer <token>'
response = http.request(request)
puts response.read_body{
"success": true,
"data": {
"id": 9102,
"teamId": 812,
"userId": 4088,
"acceptedInvitation": true,
"role": "ADMIN",
"impersonation": false,
"createdAt": "2026-01-22T08:15:00.000Z",
"updatedAt": "2026-03-04T09:02:44.000Z",
"user": {
"id": 4088,
"name": "Priya Sharma",
"email": "priya.sharma@example.com",
"username": "priya-sharma",
"avatarUrl": "https://cal.id/avatar/priya-sharma.png",
"timeZone": "Asia/Kolkata"
},
"team": {
"id": 812,
"name": "Acme Sales",
"slug": "acme-sales"
}
},
"message": "Team membership retrieved"
}{
"success": false,
"message": "<string>",
"error": {
"code": "<string>",
"message": "<string>",
"details": "<unknown>"
}
}{
"success": false,
"message": "<string>",
"error": {
"code": "<string>",
"message": "<string>",
"details": "<unknown>"
}
}{
"success": false,
"message": "<string>",
"error": {
"code": "<string>",
"message": "<string>",
"details": "<unknown>"
}
}{
"success": false,
"message": "<string>",
"error": {
"code": "<string>",
"message": "<string>",
"details": "<unknown>"
}
}{
"success": false,
"message": "Rate limit exceeded",
"error": {
"code": "TOO_MANY_REQUESTS",
"message": "Too many requests. Please retry after the rate limit window resets."
}
}Authorizations
Use the Authorization header with Bearer scheme.
Examples:
- API Key: Authorization: Bearer calid_xxxxx
Path Parameters
Numeric team identifier.
Required range:
x > 1Example:
42
Numeric team membership identifier.
Required range:
x > 1Example:
1001
Was this page helpful?