Update custom connector
/connector/{slug}
**`config` is REPLACED wholesale when present** — send the complete definition, since anything omitted is gone. `label` and `category` are ordinary merge-patch fields. Org-owned connectors only, and the caller needs edit access (ownership or an `edit` share). Existing connections keep working, but tools removed from the config stop resolving in every toolbox that names them. A remote MCP connector (`kind: "remote_mcp"`) takes a different body: `label`, `category`, `logo`, `description`, `auth_config` (`custom` sign-in only; replaces the declaration whole, and the response carries `reconnect_required: true` when its fields changed so existing connections must sign in again), `client_id` / `client_secret` (`oauth_client` only; an omitted secret keeps the stored one) and `omit_refresh_scope` (OAuth only, else 400 `omit_refresh_scope_not_oauth`; `true` sets it, `false` removes it, read at the next token refresh, so no `reconnect_required`) and `connect_notes` / `connect_notes_link` (OAuth only, else 400 `connect_notes_not_oauth`; `null` clears; stored in place in the OAuth config as `permissions_text` / `documentation_link`, so no `reconnect_required`). Its `url` cannot be changed (400: it would send members' tokens to a different host — create a new connector) and neither can its raw `config` (400).
Path Parameters
Connector slug of an org-owned connector.
Request Body
Remote MCP connectors with custom sign-in only.
Remote MCP connectors with oauth_client sign-in only.
As client_id. Write-only.
Replaces the stored config entirely. Refused on a remote MCP connector.
Remote MCP connectors with OAuth sign-in only. Markdown shown before sign-in (trimmed). null clears it.
As connect_notes. An https link with no credentials. null clears it.
Remote MCP connectors only.
Remote MCP connectors only. An https URL.
Remote MCP connectors with OAuth sign-in only. true: a token refresh sends no scope; false: back to the default. Members do not need to reconnect.
curl -X PATCH 'https://api.elaichi.ai/connector/<slug>' \
-H 'Authorization: Bearer $ELAICHI_API_TOKEN' \
-H 'Content-Type: application/json' \
-d '{"label":"your_label","config":{},"logo":"your_logo","description":"your_description","auth_config":{},"client_id":"your_client_id","client_secret":"your_client_secret","omit_refresh_scope":true}'const body = {
"label": "your_label",
"config": {},
"logo": "your_logo",
"description": "your_description",
"auth_config": {},
"client_id": "your_client_id",
"client_secret": "your_client_secret",
"omit_refresh_scope": true
};
const response = await fetch('https://api.elaichi.ai/connector/<slug>', {
method: 'PATCH',
headers: {
'Authorization': 'Bearer ' + process.env.ELAICHI_API_TOKEN,
'Content-Type': 'application/json',
},
body: JSON.stringify(body),
});
const data = await response.json();
console.log(data);import os
import requests
url = "https://api.elaichi.ai/connector/<slug>"
headers = {
"Authorization": f"Bearer {os.environ['ELAICHI_API_TOKEN']}",
"Content-Type": "application/json",
}
payload = {
"label": "your_label",
"config": {},
"logo": "your_logo",
"description": "your_description",
"auth_config": {},
"client_id": "your_client_id",
"client_secret": "your_client_secret",
"omit_refresh_scope": True
}
response = requests.patch(url, headers=headers, json=payload)
print(response.json())