curl --request POST \
--url https://api.erdo.ai/v1/integrations/{integrationID}/managed-access \
--header 'Authorization: Bearer <token>' \
--header 'Content-Type: application/json' \
--data '
{
"managed_access": "<string>"
}
'import requests
url = "https://api.erdo.ai/v1/integrations/{integrationID}/managed-access"
payload = { "managed_access": "<string>" }
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({managed_access: '<string>'})
};
fetch('https://api.erdo.ai/v1/integrations/{integrationID}/managed-access', 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.erdo.ai/v1/integrations/{integrationID}/managed-access",
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([
'managed_access' => '<string>'
]),
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.erdo.ai/v1/integrations/{integrationID}/managed-access"
payload := strings.NewReader("{\n \"managed_access\": \"<string>\"\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.erdo.ai/v1/integrations/{integrationID}/managed-access")
.header("Authorization", "Bearer <token>")
.header("Content-Type", "application/json")
.body("{\n \"managed_access\": \"<string>\"\n}")
.asString();require 'uri'
require 'net/http'
url = URI("https://api.erdo.ai/v1/integrations/{integrationID}/managed-access")
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 \"managed_access\": \"<string>\"\n}"
response = http.request(request)
puts response.read_body{
"managed_access": "<string>",
"managed_organizations": [
{
"name": "<string>",
"slug": "<string>"
}
]
}{
"code": "not_found",
"details": {},
"message": "<string>"
}SetIntegrationManagedAccessAPI starts or stops providing a connection to the
organizations this one manages — an agency’s own vendor key, spendable by every client it operates for as long as the management link is live, instead of the same key connected by hand once per client and re-fanned out on every rotation.
Only a key-authenticated connection qualifies, and the caller must both hold admin on the connection and be an admin or owner of the organization that holds it; the integration service enforces both and this handler stays thin.
There is deliberately no MCP tool behind this endpoint. Widening the set of organizations a credential serves is not a decision a model should be able to take on its own — the same reasoning that keeps manager-key minting off the model-facing surface — so it is reachable from the app, the CLI and here.
curl --request POST \
--url https://api.erdo.ai/v1/integrations/{integrationID}/managed-access \
--header 'Authorization: Bearer <token>' \
--header 'Content-Type: application/json' \
--data '
{
"managed_access": "<string>"
}
'import requests
url = "https://api.erdo.ai/v1/integrations/{integrationID}/managed-access"
payload = { "managed_access": "<string>" }
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({managed_access: '<string>'})
};
fetch('https://api.erdo.ai/v1/integrations/{integrationID}/managed-access', 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.erdo.ai/v1/integrations/{integrationID}/managed-access",
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([
'managed_access' => '<string>'
]),
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.erdo.ai/v1/integrations/{integrationID}/managed-access"
payload := strings.NewReader("{\n \"managed_access\": \"<string>\"\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.erdo.ai/v1/integrations/{integrationID}/managed-access")
.header("Authorization", "Bearer <token>")
.header("Content-Type", "application/json")
.body("{\n \"managed_access\": \"<string>\"\n}")
.asString();require 'uri'
require 'net/http'
url = URI("https://api.erdo.ai/v1/integrations/{integrationID}/managed-access")
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 \"managed_access\": \"<string>\"\n}"
response = http.request(request)
puts response.read_body{
"managed_access": "<string>",
"managed_organizations": [
{
"name": "<string>",
"slug": "<string>"
}
]
}{
"code": "not_found",
"details": {},
"message": "<string>"
}Authorizations
An Erdo API key (erdo_api_...) or scoped token (erdo_token_...).
Path Parameters
Body
Response
Success response
manages nobody yet. The second case is a truthful answer rather than a refusal — being a manager IS holding live links, so an org with none has simply not adopted a client, and the fix is to link one rather than to ask for a permission.
Show child attributes
Show child attributes

