List connectors
/connector
The platform catalog — visible to every role, `connector:view` included — plus this organization's own custom connectors, which (unlike connections and toolboxes) are already browseable by every member regardless of any grant: a custom connector's existence, name and category are catalog metadata, not a private resource (`connector:view` is the universal catalog-browse permission; see customConnectorRouter.ts's module doc). There is no `?visibility=org` oversight mode here (removed 2026-09-04): `connector:manage` no longer surfaces per-row attribution for a connector the caller was never explicitly granted access to — `can_manage` on an org-owned row reflects only a real `edit` grant of their own, present on every row regardless of any query parameter. Platform catalog rows omit `can_manage` (no ACL concept). Connectors the caller's restrictions block are RETURNED, flagged `restricted`/`restricted_by`, not filtered out — so a restricted caller's page is the same length as anyone else's. `prev_cursor` is always null here.
Query Parameters
Substring match on the connector name/label.
Exact category match.
Send true to narrow to this organization's own connectors.
Response Body
How the CALLER reaches this connector — not who else can. owner — they own it. direct — a grant naming them personally. team — a grant to a team they belong to (or, per §6.2, one they administer), named in access_via_team. org — an organization-wide grant. When several sources apply the BROADEST wins and the caller's access level is not consulted: owner, else org, else team, else direct. So a caller granted edit personally AND view org-wide reads org — a narrower grant must never mask org-wide exposure, since this field says how far the connector reaches, not what the caller may do with it. Deliberately NOT gated on can_see_shares, and deliberately not a widening of it: this is the caller's OWN grant and their OWN team memberships, so a view/use grantee receives it while the grantee list — information about colleagues — stays closed to them. No other member is ever named. ABSENT when nothing reaches the caller — a transfer answering the ex-owner of a resource that was never shared, or a catalog row browsed with no grant behind it. Absent means "no source to name", never "not permitted", and never an implied org.
ownerdirectteamorg
Present exactly when access_via is team, absent otherwise. The team the caller reaches this connector through — one of their own teams, never a disclosure about anybody else.
2 properties
Team id (team_…).
Team display name, or null when the team no longer resolves in the directory — the same null contract every resolved grantee name carries.
True when the connector needs a customer OAuth app (BYOA) — a placeholder client id, a real id with a placeholder secret, or a real id with no platform OAuth secret stored for it. The first two are derived from the config on the catalog summary, so they are on every row; the third comes from one cached platform-credential read.
Present only on org-owned/custom connector rows (omitted for platform catalog rows, which have no ACL concept). Whether the caller may edit this connector's config — a real edit grant of their own. connector:manage alone no longer implies this (removed 2026-09-04): org owners/admins do not manage-by-default a connector nobody explicitly shared with them.
True for a connector this organization authored or forked.
Catalog owner. Org-owned values mark this org's custom connectors.
Always null. Unlike a connection or toolbox, a custom connector has no durable per-user owner — only resource_acl grants (the creator receives an ordinary, revocable edit grant at creation time, the same as anyone shared with later; see customConnectorRouter.ts's module doc). Kept for shape parity with the other two resources' summaries.
True when the caller's restrictions block this whole connector. A blocked connector is LISTED and flagged, never omitted — a picker that only got "no match" could not tell "your admin blocked it" from "that provider does not exist". It still cannot be connected: POST /connection and GET /connector/{slug}/tools refuse it.
Which precedence layer the winning rule came from, or null when nothing blocks this connector. Adds which to restricted's whether and nothing else — no rule id, author, reason or coverage. Same field and same meaning as on GET /connector/{slug} and on a connection row.
roleusernull
Stable connector key — this is the identifier everywhere, not an id.
curl -X GET 'https://api.elaichi.ai/connector' \
-H 'Authorization: Bearer $ELAICHI_API_TOKEN' \
-H 'Content-Type: application/json'const response = await fetch('https://api.elaichi.ai/connector', {
method: 'GET',
headers: {
'Authorization': 'Bearer ' + process.env.ELAICHI_API_TOKEN,
'Content-Type': 'application/json',
},
});
const data = await response.json();
console.log(data);import os
import requests
url = "https://api.elaichi.ai/connector"
headers = {
"Authorization": f"Bearer {os.environ['ELAICHI_API_TOKEN']}",
"Content-Type": "application/json",
}
response = requests.get(url, headers=headers)
print(response.json())