Skip to main content

Get availability

GET /api/connectors/availability
Returns a boolean for each known tool id, indicating whether the server currently has the credentials needed to make that connector usable. The endpoint never returns or echoes secret values — booleans only. The dashboard fetches this on every mount and filters PERSONAL_TOOLS / TEAM_TOOLS / BUILTIN_TOOLS by the result, so users don’t see tiles for connectors that would silently fail when clicked. Response:
{
  "availability": {
    "github": true,
    "google": true,
    "slack": false,
    "linear": true,
    "quickbooks": false,
    "gcp": true,
    "docusign": false,
    "carta": false,
    "attio": true,
    "browserbase": true,
    "firecrawl": true,
    "perplexity": true,
    "granola-personal": true,
    "granola-enterprise": true,
    "edgar": true,
    "cloudflare": true
  }
}

How each id is decided

CategoryTool idsAvailability rule
OAuth providersgithub, google, slack, linear, quickbooks, gcp, docusign, cartatrue iff both ${UPPER}_CLIENT_ID and ${UPPER}_CLIENT_SECRET are set in env
Env-backed API keysattio, browserbase, firecrawl, perplexitytrue iff ${UPPER}_API_KEY is set in env
Always availablegranola-personal, granola-enterprise, edgar, cloudflareAlways true (user-supplied API keys handled at runtime, or no auth needed)
Any provider id not present in the response should be treated as true (don’t filter out unknowns) — that way adding a new connector to the dashboard doesn’t silently hide it before the registry list is updated.

Auth

The endpoint sits behind the standard server auth middleware (Better Auth session cookie or TOOLSHED_API_SECRET Bearer token). The dashboard’s session cookie is sufficient.

Source

apps/server/src/routes/connector-registry.ts. The id lists are hard-coded in that file; update them when a new connector is added.