team.user.detail
Looks up a single team member by email or team_user_id. When both are supplied, team_user_id wins. The response always expands delegated_profiles[] for users that have profiles delegated to them.
curl --request GET \
--url https://api.manus.im/v2/team.user.detail \
--header 'X-API-Key: <api-key>'import requests
url = "https://api.manus.im/v2/team.user.detail"
headers = {"X-API-Key": "<api-key>"}
response = requests.get(url, headers=headers)
print(response.text)const options = {method: 'GET', headers: {'X-API-Key': '<api-key>'}};
fetch('https://api.manus.im/v2/team.user.detail', 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.manus.im/v2/team.user.detail",
CURLOPT_RETURNTRANSFER => true,
CURLOPT_ENCODING => "",
CURLOPT_MAXREDIRS => 10,
CURLOPT_TIMEOUT => 30,
CURLOPT_HTTP_VERSION => CURL_HTTP_VERSION_1_1,
CURLOPT_CUSTOMREQUEST => "GET",
CURLOPT_HTTPHEADER => [
"X-API-Key: <api-key>"
],
]);
$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.manus.im/v2/team.user.detail"
req, _ := http.NewRequest("GET", url, nil)
req.Header.Add("X-API-Key", "<api-key>")
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.manus.im/v2/team.user.detail")
.header("X-API-Key", "<api-key>")
.asString();require 'uri'
require 'net/http'
url = URI("https://api.manus.im/v2/team.user.detail")
http = Net::HTTP.new(url.host, url.port)
http.use_ssl = true
request = Net::HTTP::Get.new(url)
request["X-API-Key"] = '<api-key>'
response = http.request(request)
puts response.read_body{
"ok": true,
"request_id": "<string>",
"user": {
"email": "<string>",
"status": "USER_STATUS_ACTIVE",
"role": "TEAM_MEMBER_ROLE_OWNER",
"user_name": "<string>",
"team_user_id": "<string>",
"delegated_to": "<string>",
"delegated_profiles": [
{
"team_user_id": "<string>",
"display_name": "<string>",
"role": "TEAM_MEMBER_ROLE_OWNER",
"delegated_at": "2023-11-07T05:31:56Z"
}
],
"original_email": "<string>"
}
}{
"ok": false,
"request_id": "<string>",
"error": {
"code": "<string>",
"message": "<string>"
}
}email or team_user_id. When both are supplied, team_user_id wins.Use team_user_id for delegated profiles: After delegation a profile’s email is rewritten to delegate-<id>@manus.im — the original is preserved in original_email but the email field no longer matches what your IDP knows about. Look up by team_user_id to avoid surprises.Delegation expansion: Unlike team.user.list, this endpoint always populates delegated_profiles[] for users that have profiles delegated to them.Protocols: Also callable via Connect RPC. See Protocols.Authorizations
Query Parameters
Team member email. Either email or team_user_id must be provided. Must be a valid RFC 5321 address when present.
254"user@example.com"
Team member ID (stable identifier). Either email or team_user_id must be provided. After a profile is delegated its email becomes delegate-xxx@manus.im, so use team_user_id to look up delegated profiles.
64"123456"
Response
Team member retrieved successfully.
true
A team member.
Hide child attributes
Hide child attributes
Email address. After delegation this field becomes delegate-xxx@manus.im — the pre-delegation address is preserved in original_email.
Status of a team member.
USER_STATUS_ACTIVE, USER_STATUS_INACTIVE, USER_STATUS_REMOVED Team role. TEAM_MEMBER_ROLE_OWNER is read-only and cannot be granted via API (transfer ownership in the UI). Guest members do not consume a paid seat.
TEAM_MEMBER_ROLE_OWNER, TEAM_MEMBER_ROLE_ADMIN, TEAM_MEMBER_ROLE_MEMBER, TEAM_MEMBER_ROLE_SUPER_ADMIN, TEAM_MEMBER_ROLE_GUEST Display name. Sourced from team_user_relation.Name (set via team.user.rename) when present, otherwise falls back to the underlying user's name. Omitted when neither is set.
Stable identifier for the team member, unique within the team. Use this (not email) for any subsequent profile-management call.
If this profile is currently delegated, the team_user_id of the assignee.
Profiles delegated to this user. Only populated by single-record responses (team.user.detail, team.user.update, etc.). team.user.list omits this field to avoid N+1 fan-out.
Hide child attributes
Hide child attributes
ID of the delegated profile.
Display name. Falls back to the original (pre-delegation) email when the profile has no name set.
Team role. TEAM_MEMBER_ROLE_OWNER is read-only and cannot be granted via API (transfer ownership in the UI). Guest members do not consume a paid seat.
TEAM_MEMBER_ROLE_OWNER, TEAM_MEMBER_ROLE_ADMIN, TEAM_MEMBER_ROLE_MEMBER, TEAM_MEMBER_ROLE_SUPER_ADMIN, TEAM_MEMBER_ROLE_GUEST When the delegation was created.
Pre-delegation email. Only present for currently-delegated profiles.
curl --request GET \
--url https://api.manus.im/v2/team.user.detail \
--header 'X-API-Key: <api-key>'import requests
url = "https://api.manus.im/v2/team.user.detail"
headers = {"X-API-Key": "<api-key>"}
response = requests.get(url, headers=headers)
print(response.text)const options = {method: 'GET', headers: {'X-API-Key': '<api-key>'}};
fetch('https://api.manus.im/v2/team.user.detail', 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.manus.im/v2/team.user.detail",
CURLOPT_RETURNTRANSFER => true,
CURLOPT_ENCODING => "",
CURLOPT_MAXREDIRS => 10,
CURLOPT_TIMEOUT => 30,
CURLOPT_HTTP_VERSION => CURL_HTTP_VERSION_1_1,
CURLOPT_CUSTOMREQUEST => "GET",
CURLOPT_HTTPHEADER => [
"X-API-Key: <api-key>"
],
]);
$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.manus.im/v2/team.user.detail"
req, _ := http.NewRequest("GET", url, nil)
req.Header.Add("X-API-Key", "<api-key>")
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.manus.im/v2/team.user.detail")
.header("X-API-Key", "<api-key>")
.asString();require 'uri'
require 'net/http'
url = URI("https://api.manus.im/v2/team.user.detail")
http = Net::HTTP.new(url.host, url.port)
http.use_ssl = true
request = Net::HTTP::Get.new(url)
request["X-API-Key"] = '<api-key>'
response = http.request(request)
puts response.read_body{
"ok": true,
"request_id": "<string>",
"user": {
"email": "<string>",
"status": "USER_STATUS_ACTIVE",
"role": "TEAM_MEMBER_ROLE_OWNER",
"user_name": "<string>",
"team_user_id": "<string>",
"delegated_to": "<string>",
"delegated_profiles": [
{
"team_user_id": "<string>",
"display_name": "<string>",
"role": "TEAM_MEMBER_ROLE_OWNER",
"delegated_at": "2023-11-07T05:31:56Z"
}
],
"original_email": "<string>"
}
}{
"ok": false,
"request_id": "<string>",
"error": {
"code": "<string>",
"message": "<string>"
}
}