curl --request POST \
--url https://app.gtm-api.com/id/v4/api/oauth-authorizations/search \
--header 'Authorization: Bearer <token>' \
--header 'Content-Type: application/json' \
--header 'Team-SID: <api-key>' \
--data '
{
"filter": {
"oauth_client_sid": {
"eq": "<string>",
"in": [
"<string>"
]
},
"status": {
"in": []
},
"team_scope_mode": {},
"created_at": {
"gte": "<string>",
"lte": "<string>"
},
"last_used_at": {
"gte": "<string>",
"lte": "<string>",
"is_null": true
}
},
"include": [],
"page_size": 250,
"cursor": "<string>"
}
'import requests
url = "https://app.gtm-api.com/id/v4/api/oauth-authorizations/search"
payload = {
"filter": {
"oauth_client_sid": {
"eq": "<string>",
"in": ["<string>"]
},
"status": { "in": [] },
"team_scope_mode": {},
"created_at": {
"gte": "<string>",
"lte": "<string>"
},
"last_used_at": {
"gte": "<string>",
"lte": "<string>",
"is_null": True
}
},
"include": [],
"page_size": 250,
"cursor": "<string>"
}
headers = {
"Authorization": "Bearer <token>",
"Team-SID": "<api-key>",
"Content-Type": "application/json"
}
response = requests.post(url, json=payload, headers=headers)
print(response.text)const options = {
method: 'POST',
headers: {
Authorization: 'Bearer <token>',
'Team-SID': '<api-key>',
'Content-Type': 'application/json'
},
body: JSON.stringify({
filter: {
oauth_client_sid: {eq: '<string>', in: ['<string>']},
status: {in: []},
team_scope_mode: {},
created_at: {gte: '<string>', lte: '<string>'},
last_used_at: {gte: '<string>', lte: '<string>', is_null: true}
},
include: [],
page_size: 250,
cursor: '<string>'
})
};
fetch('https://app.gtm-api.com/id/v4/api/oauth-authorizations/search', 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://app.gtm-api.com/id/v4/api/oauth-authorizations/search",
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([
'filter' => [
'oauth_client_sid' => [
'eq' => '<string>',
'in' => [
'<string>'
]
],
'status' => [
'in' => [
]
],
'team_scope_mode' => [
],
'created_at' => [
'gte' => '<string>',
'lte' => '<string>'
],
'last_used_at' => [
'gte' => '<string>',
'lte' => '<string>',
'is_null' => true
]
],
'include' => [
],
'page_size' => 250,
'cursor' => '<string>'
]),
CURLOPT_HTTPHEADER => [
"Authorization: Bearer <token>",
"Content-Type: application/json",
"Team-SID: <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"
"strings"
"net/http"
"io"
)
func main() {
url := "https://app.gtm-api.com/id/v4/api/oauth-authorizations/search"
payload := strings.NewReader("{\n \"filter\": {\n \"oauth_client_sid\": {\n \"eq\": \"<string>\",\n \"in\": [\n \"<string>\"\n ]\n },\n \"status\": {\n \"in\": []\n },\n \"team_scope_mode\": {},\n \"created_at\": {\n \"gte\": \"<string>\",\n \"lte\": \"<string>\"\n },\n \"last_used_at\": {\n \"gte\": \"<string>\",\n \"lte\": \"<string>\",\n \"is_null\": true\n }\n },\n \"include\": [],\n \"page_size\": 250,\n \"cursor\": \"<string>\"\n}")
req, _ := http.NewRequest("POST", url, payload)
req.Header.Add("Authorization", "Bearer <token>")
req.Header.Add("Team-SID", "<api-key>")
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://app.gtm-api.com/id/v4/api/oauth-authorizations/search")
.header("Authorization", "Bearer <token>")
.header("Team-SID", "<api-key>")
.header("Content-Type", "application/json")
.body("{\n \"filter\": {\n \"oauth_client_sid\": {\n \"eq\": \"<string>\",\n \"in\": [\n \"<string>\"\n ]\n },\n \"status\": {\n \"in\": []\n },\n \"team_scope_mode\": {},\n \"created_at\": {\n \"gte\": \"<string>\",\n \"lte\": \"<string>\"\n },\n \"last_used_at\": {\n \"gte\": \"<string>\",\n \"lte\": \"<string>\",\n \"is_null\": true\n }\n },\n \"include\": [],\n \"page_size\": 250,\n \"cursor\": \"<string>\"\n}")
.asString();require 'uri'
require 'net/http'
url = URI("https://app.gtm-api.com/id/v4/api/oauth-authorizations/search")
http = Net::HTTP.new(url.host, url.port)
http.use_ssl = true
request = Net::HTTP::Post.new(url)
request["Authorization"] = 'Bearer <token>'
request["Team-SID"] = '<api-key>'
request["Content-Type"] = 'application/json'
request.body = "{\n \"filter\": {\n \"oauth_client_sid\": {\n \"eq\": \"<string>\",\n \"in\": [\n \"<string>\"\n ]\n },\n \"status\": {\n \"in\": []\n },\n \"team_scope_mode\": {},\n \"created_at\": {\n \"gte\": \"<string>\",\n \"lte\": \"<string>\"\n },\n \"last_used_at\": {\n \"gte\": \"<string>\",\n \"lte\": \"<string>\",\n \"is_null\": true\n }\n },\n \"include\": [],\n \"page_size\": 250,\n \"cursor\": \"<string>\"\n}"
response = http.request(request)
puts response.read_body{
"success": true,
"operation": "search",
"items": [
{
"item": {
"sid": "<string>",
"user_sid": "<string>",
"oauth_client_sid": "<string>",
"consented_team_sids": [
"<string>"
],
"permissions": [
"<string>"
],
"last_used_at": "<string>",
"created_at": "<string>",
"updated_at": "<string>"
},
"included": {}
}
],
"pagination": {
"next_cursor": "<string>",
"has_more": true,
"total_count": 123
},
"applied_filters": {},
"includes": [
"<string>"
],
"meta": {
"trace_id": "<string>",
"span_id": "<string>",
"timestamp": "<string>",
"duration_ms": 1,
"debug_url": "<string>"
},
"counts": {
"total_count": 123,
"groups": {}
}
}{
"success": false,
"error": {
"message": "<string>",
"recoverable": true,
"suggestion": "<string>",
"field_errors": {},
"blockers": [
{
"type": "<string>",
"description": "<string>",
"entity_sid": "<string>",
"resolution": "<string>",
"resolution_hint": "<string>",
"count": 123
}
],
"context": {}
},
"meta": {
"trace_id": "<string>",
"span_id": "<string>",
"timestamp": "<string>",
"duration_ms": 1,
"debug_url": "<string>"
}
}{
"success": false,
"error": {
"message": "<string>",
"recoverable": true,
"suggestion": "<string>",
"field_errors": {},
"blockers": [
{
"type": "<string>",
"description": "<string>",
"entity_sid": "<string>",
"resolution": "<string>",
"resolution_hint": "<string>",
"count": 123
}
],
"context": {}
},
"meta": {
"trace_id": "<string>",
"span_id": "<string>",
"timestamp": "<string>",
"duration_ms": 1,
"debug_url": "<string>"
}
}Search connected apps
List the caller’s connected apps (standing OAuth consent grants). Always scoped to the caller’s own grants, never cross-user. Filter by status (active vs revoked history), oauth_client_sid, or team_scope_mode; include client (name + ceiling), teams (in-scope team names), and active_sessions (live installation tokens). This is the user’s view of who has access to their workspaces. page_size:0 returns counts only.
Contract:
- MCP tool
search_oauth_authorizations, registry packagemcp.id/oauth_authorizations, mountid.access. - Operation
search, response envelopesearch. - Flags: read only.
curl --request POST \
--url https://app.gtm-api.com/id/v4/api/oauth-authorizations/search \
--header 'Authorization: Bearer <token>' \
--header 'Content-Type: application/json' \
--header 'Team-SID: <api-key>' \
--data '
{
"filter": {
"oauth_client_sid": {
"eq": "<string>",
"in": [
"<string>"
]
},
"status": {
"in": []
},
"team_scope_mode": {},
"created_at": {
"gte": "<string>",
"lte": "<string>"
},
"last_used_at": {
"gte": "<string>",
"lte": "<string>",
"is_null": true
}
},
"include": [],
"page_size": 250,
"cursor": "<string>"
}
'import requests
url = "https://app.gtm-api.com/id/v4/api/oauth-authorizations/search"
payload = {
"filter": {
"oauth_client_sid": {
"eq": "<string>",
"in": ["<string>"]
},
"status": { "in": [] },
"team_scope_mode": {},
"created_at": {
"gte": "<string>",
"lte": "<string>"
},
"last_used_at": {
"gte": "<string>",
"lte": "<string>",
"is_null": True
}
},
"include": [],
"page_size": 250,
"cursor": "<string>"
}
headers = {
"Authorization": "Bearer <token>",
"Team-SID": "<api-key>",
"Content-Type": "application/json"
}
response = requests.post(url, json=payload, headers=headers)
print(response.text)const options = {
method: 'POST',
headers: {
Authorization: 'Bearer <token>',
'Team-SID': '<api-key>',
'Content-Type': 'application/json'
},
body: JSON.stringify({
filter: {
oauth_client_sid: {eq: '<string>', in: ['<string>']},
status: {in: []},
team_scope_mode: {},
created_at: {gte: '<string>', lte: '<string>'},
last_used_at: {gte: '<string>', lte: '<string>', is_null: true}
},
include: [],
page_size: 250,
cursor: '<string>'
})
};
fetch('https://app.gtm-api.com/id/v4/api/oauth-authorizations/search', 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://app.gtm-api.com/id/v4/api/oauth-authorizations/search",
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([
'filter' => [
'oauth_client_sid' => [
'eq' => '<string>',
'in' => [
'<string>'
]
],
'status' => [
'in' => [
]
],
'team_scope_mode' => [
],
'created_at' => [
'gte' => '<string>',
'lte' => '<string>'
],
'last_used_at' => [
'gte' => '<string>',
'lte' => '<string>',
'is_null' => true
]
],
'include' => [
],
'page_size' => 250,
'cursor' => '<string>'
]),
CURLOPT_HTTPHEADER => [
"Authorization: Bearer <token>",
"Content-Type: application/json",
"Team-SID: <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"
"strings"
"net/http"
"io"
)
func main() {
url := "https://app.gtm-api.com/id/v4/api/oauth-authorizations/search"
payload := strings.NewReader("{\n \"filter\": {\n \"oauth_client_sid\": {\n \"eq\": \"<string>\",\n \"in\": [\n \"<string>\"\n ]\n },\n \"status\": {\n \"in\": []\n },\n \"team_scope_mode\": {},\n \"created_at\": {\n \"gte\": \"<string>\",\n \"lte\": \"<string>\"\n },\n \"last_used_at\": {\n \"gte\": \"<string>\",\n \"lte\": \"<string>\",\n \"is_null\": true\n }\n },\n \"include\": [],\n \"page_size\": 250,\n \"cursor\": \"<string>\"\n}")
req, _ := http.NewRequest("POST", url, payload)
req.Header.Add("Authorization", "Bearer <token>")
req.Header.Add("Team-SID", "<api-key>")
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://app.gtm-api.com/id/v4/api/oauth-authorizations/search")
.header("Authorization", "Bearer <token>")
.header("Team-SID", "<api-key>")
.header("Content-Type", "application/json")
.body("{\n \"filter\": {\n \"oauth_client_sid\": {\n \"eq\": \"<string>\",\n \"in\": [\n \"<string>\"\n ]\n },\n \"status\": {\n \"in\": []\n },\n \"team_scope_mode\": {},\n \"created_at\": {\n \"gte\": \"<string>\",\n \"lte\": \"<string>\"\n },\n \"last_used_at\": {\n \"gte\": \"<string>\",\n \"lte\": \"<string>\",\n \"is_null\": true\n }\n },\n \"include\": [],\n \"page_size\": 250,\n \"cursor\": \"<string>\"\n}")
.asString();require 'uri'
require 'net/http'
url = URI("https://app.gtm-api.com/id/v4/api/oauth-authorizations/search")
http = Net::HTTP.new(url.host, url.port)
http.use_ssl = true
request = Net::HTTP::Post.new(url)
request["Authorization"] = 'Bearer <token>'
request["Team-SID"] = '<api-key>'
request["Content-Type"] = 'application/json'
request.body = "{\n \"filter\": {\n \"oauth_client_sid\": {\n \"eq\": \"<string>\",\n \"in\": [\n \"<string>\"\n ]\n },\n \"status\": {\n \"in\": []\n },\n \"team_scope_mode\": {},\n \"created_at\": {\n \"gte\": \"<string>\",\n \"lte\": \"<string>\"\n },\n \"last_used_at\": {\n \"gte\": \"<string>\",\n \"lte\": \"<string>\",\n \"is_null\": true\n }\n },\n \"include\": [],\n \"page_size\": 250,\n \"cursor\": \"<string>\"\n}"
response = http.request(request)
puts response.read_body{
"success": true,
"operation": "search",
"items": [
{
"item": {
"sid": "<string>",
"user_sid": "<string>",
"oauth_client_sid": "<string>",
"consented_team_sids": [
"<string>"
],
"permissions": [
"<string>"
],
"last_used_at": "<string>",
"created_at": "<string>",
"updated_at": "<string>"
},
"included": {}
}
],
"pagination": {
"next_cursor": "<string>",
"has_more": true,
"total_count": 123
},
"applied_filters": {},
"includes": [
"<string>"
],
"meta": {
"trace_id": "<string>",
"span_id": "<string>",
"timestamp": "<string>",
"duration_ms": 1,
"debug_url": "<string>"
},
"counts": {
"total_count": 123,
"groups": {}
}
}{
"success": false,
"error": {
"message": "<string>",
"recoverable": true,
"suggestion": "<string>",
"field_errors": {},
"blockers": [
{
"type": "<string>",
"description": "<string>",
"entity_sid": "<string>",
"resolution": "<string>",
"resolution_hint": "<string>",
"count": 123
}
],
"context": {}
},
"meta": {
"trace_id": "<string>",
"span_id": "<string>",
"timestamp": "<string>",
"duration_ms": 1,
"debug_url": "<string>"
}
}{
"success": false,
"error": {
"message": "<string>",
"recoverable": true,
"suggestion": "<string>",
"field_errors": {},
"blockers": [
{
"type": "<string>",
"description": "<string>",
"entity_sid": "<string>",
"resolution": "<string>",
"resolution_hint": "<string>",
"count": 123
}
],
"context": {}
},
"meta": {
"trace_id": "<string>",
"span_id": "<string>",
"timestamp": "<string>",
"duration_ms": 1,
"debug_url": "<string>"
}
}Authorizations
Access token issued by gtm.service.id. Its access_identity claim carries team_sid, actor_sid and actor_type, and that team scope is authoritative.
Team scope for tokens that do not carry one. Ignored when the token already names a team.
Body
Request body of search_oauth_authorizations.
Show child attributes
Show child attributes
Relations to eager-load (see entity Includes).
client, teams, active_sessions Show child attributes
Show child attributes
0..500, default 50. page_size=0 = count-only, page_size=1 = getFirst.
0 <= x <= 500Opaque forward cursor from a previous response pagination.next_cursor.
Response
search success envelope.
true search Show child attributes
Show child attributes
Show child attributes
Show child attributes
Show child attributes
Show child attributes
Show child attributes
Show child attributes
Show child attributes
Show child attributes