companies merge
curl --request POST \
--url https://api.interfere.com/v3/workspaces/{workspaceSlug}/tenants/merge \
--header 'Authorization: Bearer <token>' \
--header 'Content-Type: application/json' \
--data '
{
"keepId": "3c90c3cc-0d44-4b50-8888-8dd25736052a",
"absorbId": "3c90c3cc-0d44-4b50-8888-8dd25736052a"
}
'import requests
url = "https://api.interfere.com/v3/workspaces/{workspaceSlug}/tenants/merge"
payload = {
"keepId": "3c90c3cc-0d44-4b50-8888-8dd25736052a",
"absorbId": "3c90c3cc-0d44-4b50-8888-8dd25736052a"
}
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({
keepId: '3c90c3cc-0d44-4b50-8888-8dd25736052a',
absorbId: '3c90c3cc-0d44-4b50-8888-8dd25736052a'
})
};
fetch('https://api.interfere.com/v3/workspaces/{workspaceSlug}/tenants/merge', 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.interfere.com/v3/workspaces/{workspaceSlug}/tenants/merge",
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([
'keepId' => '3c90c3cc-0d44-4b50-8888-8dd25736052a',
'absorbId' => '3c90c3cc-0d44-4b50-8888-8dd25736052a'
]),
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://api.interfere.com/v3/workspaces/{workspaceSlug}/tenants/merge"
payload := strings.NewReader("{\n \"keepId\": \"3c90c3cc-0d44-4b50-8888-8dd25736052a\",\n \"absorbId\": \"3c90c3cc-0d44-4b50-8888-8dd25736052a\"\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://api.interfere.com/v3/workspaces/{workspaceSlug}/tenants/merge")
.header("Authorization", "Bearer <token>")
.header("Content-Type", "application/json")
.body("{\n \"keepId\": \"3c90c3cc-0d44-4b50-8888-8dd25736052a\",\n \"absorbId\": \"3c90c3cc-0d44-4b50-8888-8dd25736052a\"\n}")
.asString();require 'uri'
require 'net/http'
url = URI("https://api.interfere.com/v3/workspaces/{workspaceSlug}/tenants/merge")
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 \"keepId\": \"3c90c3cc-0d44-4b50-8888-8dd25736052a\",\n \"absorbId\": \"3c90c3cc-0d44-4b50-8888-8dd25736052a\"\n}"
response = http.request(request)
puts response.read_body{
"keep": {
"endUserOrgId": "3c90c3cc-0d44-4b50-8888-8dd25736052a"
},
"absorb": {
"endUserOrgId": "3c90c3cc-0d44-4b50-8888-8dd25736052a"
},
"alreadyMerged": true,
"moved": {
"domains": 4503599627370495,
"users": 4503599627370495
}
}{
"defined": false,
"code": "<string>",
"status": 123,
"message": "<string>",
"data": "<unknown>"
}{
"defined": true,
"code": "AUTH_MISSING",
"status": 401,
"message": "Request is missing session credentials.",
"data": "<unknown>"
}{
"defined": true,
"code": "NETWORK_ACCESS_DENIED",
"status": 403,
"message": "This network is not allowed to access the workspace. Connect to an allowed network and try again.",
"data": "<unknown>"
}{
"defined": true,
"code": "COMPANY_NOT_FOUND",
"status": 404,
"message": "Company not found.",
"data": "<unknown>"
}{
"defined": true,
"code": "COMPANY_MERGE_CONFLICT",
"status": 409,
"message": "These companies have different revenue or tiers. Edit one of them so the values agree, then merge again.",
"data": "<unknown>"
}{
"defined": true,
"code": "NETWORK_ACCESS_UNAVAILABLE",
"status": 503,
"message": "Network access could not be checked. Try again shortly.",
"data": "<unknown>"
}companies merge
Moves every domain and user of the absorbed company onto the kept company, keeps the kept company’s revenue and tier (filling blanks from the absorbed one), and removes the absorbed company from the list. Refuses when both companies carry different revenue or tiers. Safe to repeat: a pair that is already merged returns alreadyMerged. Requires workspace admin.
POST
/
v3
/
workspaces
/
{workspaceSlug}
/
tenants
/
merge
companies merge
curl --request POST \
--url https://api.interfere.com/v3/workspaces/{workspaceSlug}/tenants/merge \
--header 'Authorization: Bearer <token>' \
--header 'Content-Type: application/json' \
--data '
{
"keepId": "3c90c3cc-0d44-4b50-8888-8dd25736052a",
"absorbId": "3c90c3cc-0d44-4b50-8888-8dd25736052a"
}
'import requests
url = "https://api.interfere.com/v3/workspaces/{workspaceSlug}/tenants/merge"
payload = {
"keepId": "3c90c3cc-0d44-4b50-8888-8dd25736052a",
"absorbId": "3c90c3cc-0d44-4b50-8888-8dd25736052a"
}
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({
keepId: '3c90c3cc-0d44-4b50-8888-8dd25736052a',
absorbId: '3c90c3cc-0d44-4b50-8888-8dd25736052a'
})
};
fetch('https://api.interfere.com/v3/workspaces/{workspaceSlug}/tenants/merge', 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.interfere.com/v3/workspaces/{workspaceSlug}/tenants/merge",
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([
'keepId' => '3c90c3cc-0d44-4b50-8888-8dd25736052a',
'absorbId' => '3c90c3cc-0d44-4b50-8888-8dd25736052a'
]),
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://api.interfere.com/v3/workspaces/{workspaceSlug}/tenants/merge"
payload := strings.NewReader("{\n \"keepId\": \"3c90c3cc-0d44-4b50-8888-8dd25736052a\",\n \"absorbId\": \"3c90c3cc-0d44-4b50-8888-8dd25736052a\"\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://api.interfere.com/v3/workspaces/{workspaceSlug}/tenants/merge")
.header("Authorization", "Bearer <token>")
.header("Content-Type", "application/json")
.body("{\n \"keepId\": \"3c90c3cc-0d44-4b50-8888-8dd25736052a\",\n \"absorbId\": \"3c90c3cc-0d44-4b50-8888-8dd25736052a\"\n}")
.asString();require 'uri'
require 'net/http'
url = URI("https://api.interfere.com/v3/workspaces/{workspaceSlug}/tenants/merge")
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 \"keepId\": \"3c90c3cc-0d44-4b50-8888-8dd25736052a\",\n \"absorbId\": \"3c90c3cc-0d44-4b50-8888-8dd25736052a\"\n}"
response = http.request(request)
puts response.read_body{
"keep": {
"endUserOrgId": "3c90c3cc-0d44-4b50-8888-8dd25736052a"
},
"absorb": {
"endUserOrgId": "3c90c3cc-0d44-4b50-8888-8dd25736052a"
},
"alreadyMerged": true,
"moved": {
"domains": 4503599627370495,
"users": 4503599627370495
}
}{
"defined": false,
"code": "<string>",
"status": 123,
"message": "<string>",
"data": "<unknown>"
}{
"defined": true,
"code": "AUTH_MISSING",
"status": 401,
"message": "Request is missing session credentials.",
"data": "<unknown>"
}{
"defined": true,
"code": "NETWORK_ACCESS_DENIED",
"status": 403,
"message": "This network is not allowed to access the workspace. Connect to an allowed network and try again.",
"data": "<unknown>"
}{
"defined": true,
"code": "COMPANY_NOT_FOUND",
"status": 404,
"message": "Company not found.",
"data": "<unknown>"
}{
"defined": true,
"code": "COMPANY_MERGE_CONFLICT",
"status": 409,
"message": "These companies have different revenue or tiers. Edit one of them so the values agree, then merge again.",
"data": "<unknown>"
}{
"defined": true,
"code": "NETWORK_ACCESS_UNAVAILABLE",
"status": 503,
"message": "Network access could not be checked. Try again shortly.",
"data": "<unknown>"
}Authorizations
Clerk session or delegated OAuth access token of an Interfere user. Workspace routes also accept API keys with explicit permission scopes.
Path Parameters
Minimum string length:
1Was this page helpful?
⌘I