Scan a cross-organization user transfer for warnings and conflicts (SuperAdmin only)
curl --request POST \
--url https://your-instance.example.com/api/organizations/transfer/scan \
--header 'Authorization: Bearer <token>' \
--header 'Content-Type: application/json' \
--data '
{
"userId": "5f7b1c2e8a1d4e0012c3b4a6",
"targetOrganizationId": "5f7b1c2e8a1d4e0012c3b401",
"reassigneeUserId": "5f7b1c2e8a1d4e0012c3b4a8"
}
'import requests
url = "https://your-instance.example.com/api/organizations/transfer/scan"
payload = {
"userId": "5f7b1c2e8a1d4e0012c3b4a6",
"targetOrganizationId": "5f7b1c2e8a1d4e0012c3b401",
"reassigneeUserId": "5f7b1c2e8a1d4e0012c3b4a8"
}
headers = {
"Authorization": "Bearer <token>",
"Content-Type": "application/json"
}
response = requests.post(url, json=payload, headers=headers)
print(response.text)const options = {
method: 'POST',
headers: {Authorization: 'Bearer <token>', 'Content-Type': 'application/json'},
body: JSON.stringify({
userId: '5f7b1c2e8a1d4e0012c3b4a6',
targetOrganizationId: '5f7b1c2e8a1d4e0012c3b401',
reassigneeUserId: '5f7b1c2e8a1d4e0012c3b4a8'
})
};
fetch('https://your-instance.example.com/api/organizations/transfer/scan', 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://your-instance.example.com/api/organizations/transfer/scan",
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([
'userId' => '5f7b1c2e8a1d4e0012c3b4a6',
'targetOrganizationId' => '5f7b1c2e8a1d4e0012c3b401',
'reassigneeUserId' => '5f7b1c2e8a1d4e0012c3b4a8'
]),
CURLOPT_HTTPHEADER => [
"Authorization: Bearer <token>",
"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://your-instance.example.com/api/organizations/transfer/scan"
payload := strings.NewReader("{\n \"userId\": \"5f7b1c2e8a1d4e0012c3b4a6\",\n \"targetOrganizationId\": \"5f7b1c2e8a1d4e0012c3b401\",\n \"reassigneeUserId\": \"5f7b1c2e8a1d4e0012c3b4a8\"\n}")
req, _ := http.NewRequest("POST", url, payload)
req.Header.Add("Authorization", "Bearer <token>")
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://your-instance.example.com/api/organizations/transfer/scan")
.header("Authorization", "Bearer <token>")
.header("Content-Type", "application/json")
.body("{\n \"userId\": \"5f7b1c2e8a1d4e0012c3b4a6\",\n \"targetOrganizationId\": \"5f7b1c2e8a1d4e0012c3b401\",\n \"reassigneeUserId\": \"5f7b1c2e8a1d4e0012c3b4a8\"\n}")
.asString();require 'uri'
require 'net/http'
url = URI("https://your-instance.example.com/api/organizations/transfer/scan")
http = Net::HTTP.new(url.host, url.port)
http.use_ssl = true
request = Net::HTTP::Post.new(url)
request["Authorization"] = 'Bearer <token>'
request["Content-Type"] = 'application/json'
request.body = "{\n \"userId\": \"5f7b1c2e8a1d4e0012c3b4a6\",\n \"targetOrganizationId\": \"5f7b1c2e8a1d4e0012c3b401\",\n \"reassigneeUserId\": \"5f7b1c2e8a1d4e0012c3b4a8\"\n}"
response = http.request(request)
puts response.read_body{
"scanVersion": "scan-2026-05-18T14:30:00Z-abc123",
"scannedAt": "2026-05-18T14:30:00.000Z",
"userId": "5f7b1c2e8a1d4e0012c3b4a6",
"fromOrganizationId": "5f7b1c2e8a1d4e0012c3b400",
"toOrganizationId": "5f7b1c2e8a1d4e0012c3b401",
"warnings": [],
"ownedCounts": {
"contacts": 1240,
"conversations": 3580,
"assigneeConversations": 412,
"automations": 7,
"workflows": 3
},
"agentUsage": [
{
"agentId": "5f7b1c2e8a1d4e0012c3b610",
"agentName": "Sales Outbound Agent",
"total": 124,
"autopilot": 80,
"isDeleted": false
}
],
"reassigneeAgents": [],
"isSourceDepartmentManager": false,
"isSuperadmin": true
}{
"error": "Organization not found",
"details": "No organization exists with the provided id"
}{
"error": "Organization not found",
"details": "No organization exists with the provided id"
}{
"error": "Organization not found",
"details": "No organization exists with the provided id"
}Organizations
Scan a cross-organization user transfer for warnings and conflicts (SuperAdmin only)
Performs the deeper scan that produces a scanVersion (required by /transfer/execute): warnings, owned-resource counts, agent usage breakdowns, reassignee agents, and role hints. Does not mutate state.
POST
/
api
/
organizations
/
transfer
/
scan
Scan a cross-organization user transfer for warnings and conflicts (SuperAdmin only)
curl --request POST \
--url https://your-instance.example.com/api/organizations/transfer/scan \
--header 'Authorization: Bearer <token>' \
--header 'Content-Type: application/json' \
--data '
{
"userId": "5f7b1c2e8a1d4e0012c3b4a6",
"targetOrganizationId": "5f7b1c2e8a1d4e0012c3b401",
"reassigneeUserId": "5f7b1c2e8a1d4e0012c3b4a8"
}
'import requests
url = "https://your-instance.example.com/api/organizations/transfer/scan"
payload = {
"userId": "5f7b1c2e8a1d4e0012c3b4a6",
"targetOrganizationId": "5f7b1c2e8a1d4e0012c3b401",
"reassigneeUserId": "5f7b1c2e8a1d4e0012c3b4a8"
}
headers = {
"Authorization": "Bearer <token>",
"Content-Type": "application/json"
}
response = requests.post(url, json=payload, headers=headers)
print(response.text)const options = {
method: 'POST',
headers: {Authorization: 'Bearer <token>', 'Content-Type': 'application/json'},
body: JSON.stringify({
userId: '5f7b1c2e8a1d4e0012c3b4a6',
targetOrganizationId: '5f7b1c2e8a1d4e0012c3b401',
reassigneeUserId: '5f7b1c2e8a1d4e0012c3b4a8'
})
};
fetch('https://your-instance.example.com/api/organizations/transfer/scan', 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://your-instance.example.com/api/organizations/transfer/scan",
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([
'userId' => '5f7b1c2e8a1d4e0012c3b4a6',
'targetOrganizationId' => '5f7b1c2e8a1d4e0012c3b401',
'reassigneeUserId' => '5f7b1c2e8a1d4e0012c3b4a8'
]),
CURLOPT_HTTPHEADER => [
"Authorization: Bearer <token>",
"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://your-instance.example.com/api/organizations/transfer/scan"
payload := strings.NewReader("{\n \"userId\": \"5f7b1c2e8a1d4e0012c3b4a6\",\n \"targetOrganizationId\": \"5f7b1c2e8a1d4e0012c3b401\",\n \"reassigneeUserId\": \"5f7b1c2e8a1d4e0012c3b4a8\"\n}")
req, _ := http.NewRequest("POST", url, payload)
req.Header.Add("Authorization", "Bearer <token>")
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://your-instance.example.com/api/organizations/transfer/scan")
.header("Authorization", "Bearer <token>")
.header("Content-Type", "application/json")
.body("{\n \"userId\": \"5f7b1c2e8a1d4e0012c3b4a6\",\n \"targetOrganizationId\": \"5f7b1c2e8a1d4e0012c3b401\",\n \"reassigneeUserId\": \"5f7b1c2e8a1d4e0012c3b4a8\"\n}")
.asString();require 'uri'
require 'net/http'
url = URI("https://your-instance.example.com/api/organizations/transfer/scan")
http = Net::HTTP.new(url.host, url.port)
http.use_ssl = true
request = Net::HTTP::Post.new(url)
request["Authorization"] = 'Bearer <token>'
request["Content-Type"] = 'application/json'
request.body = "{\n \"userId\": \"5f7b1c2e8a1d4e0012c3b4a6\",\n \"targetOrganizationId\": \"5f7b1c2e8a1d4e0012c3b401\",\n \"reassigneeUserId\": \"5f7b1c2e8a1d4e0012c3b4a8\"\n}"
response = http.request(request)
puts response.read_body{
"scanVersion": "scan-2026-05-18T14:30:00Z-abc123",
"scannedAt": "2026-05-18T14:30:00.000Z",
"userId": "5f7b1c2e8a1d4e0012c3b4a6",
"fromOrganizationId": "5f7b1c2e8a1d4e0012c3b400",
"toOrganizationId": "5f7b1c2e8a1d4e0012c3b401",
"warnings": [],
"ownedCounts": {
"contacts": 1240,
"conversations": 3580,
"assigneeConversations": 412,
"automations": 7,
"workflows": 3
},
"agentUsage": [
{
"agentId": "5f7b1c2e8a1d4e0012c3b610",
"agentName": "Sales Outbound Agent",
"total": 124,
"autopilot": 80,
"isDeleted": false
}
],
"reassigneeAgents": [],
"isSourceDepartmentManager": false,
"isSuperadmin": true
}{
"error": "Organization not found",
"details": "No organization exists with the provided id"
}{
"error": "Organization not found",
"details": "No organization exists with the provided id"
}{
"error": "Organization not found",
"details": "No organization exists with the provided id"
}Authorizations
Bearer authentication header of the form Bearer <token>, where <token> is your auth token.
Body
application/json
User being transferred out of the source organization.
Destination organization the user will move into.
User in the source org who will inherit the transferring user's contacts, conversations, automations, workflows, and prompts; used to compute the scan version and surface their existing agents.
Response
Scan result returned
Show child attributes
Show child attributes
Show child attributes
Show child attributes
Show child attributes
Show child attributes
Show child attributes
Show child attributes
⌘I