Documentation/OAuth & External APIs
v2.0.0-beta.1Snapshot bebdcd1Markdown ↗

OAuth & External APIs

OAuth & External APIs

OAuth 2.0 authentication for external services

OAuthManager class

📍 src/connectors/oauth/OAuthManager.ts:13

Constructor

constructor

typescript
constructor(config: OAuthConfig)

Parameters:

  • config: OAuthConfig
Methods

getToken()

Get valid access token Automatically refreshes if expired

typescript
async getToken(userId?: string, accountId?: string): Promise<string>

Parameters:

  • userId: string | undefined (optional)
  • accountId: string | undefined (optional)

Returns: Promise<string>

refreshToken()

Force refresh the token

typescript
async refreshToken(userId?: string, accountId?: string): Promise<string>

Parameters:

  • userId: string | undefined (optional)
  • accountId: string | undefined (optional)

Returns: Promise<string>

isTokenValid()

Check if current token is valid

typescript
async isTokenValid(userId?: string, accountId?: string): Promise<boolean>

Parameters:

  • userId: string | undefined (optional)
  • accountId: string | undefined (optional)

Returns: Promise<boolean>

startAuthFlow()

Start authorization flow (Authorization Code only) Returns URL for user to visit

typescript
async startAuthFlow(userId?: string, accountId?: string): Promise<string>

Parameters:

  • userId: string | undefined (optional)
  • accountId: string | undefined (optional)

Returns: Promise<string>

handleCallback()

Handle OAuth callback (Authorization Code only) Call this with the callback URL after user authorizes

Returns an optional raw ID token for caller-side OIDC verification. The ID token is not verified or persisted by the library; non-OIDC flows return {}.

typescript
async handleCallback(callbackUrl: string, userId?: string, accountId?: string): Promise<OAuthCallbackResult>

Parameters:

  • callbackUrl: string
  • userId: string | undefined (optional)
  • accountId: string | undefined (optional)

Returns: Promise<OAuthCallbackResult>

revokeToken()

Revoke token (if supported by provider)

typescript
async revokeToken(revocationUrl?: string, userId?: string, accountId?: string): Promise<void>

Parameters:

  • revocationUrl: string | undefined (optional)
  • userId: string | undefined (optional)
  • accountId: string | undefined (optional)

Returns: Promise<void>

listAccounts()

List account aliases for a user (Authorization Code only)

typescript
async listAccounts(userId?: string): Promise<string[]>

Parameters:

  • userId: string | undefined (optional)

Returns: Promise<string[]>

rekeyAccount()

Re-key a token from one accountId to another (Authorization Code only).

typescript
async rekeyAccount(userId: string, oldAccountId: string, newAccountId: string): Promise<boolean>

Parameters:

  • userId: string
  • oldAccountId: string
  • newAccountId: string

Returns: Promise<boolean>

removeAccount()

Remove a specific account's stored token (Authorization Code only). Used when a user unlinks/disconnects one of their accounts.

typescript
async removeAccount(userId: string, accountId: string): Promise<boolean>

Parameters:

  • userId: string
  • accountId: string

Returns: Promise<boolean>


ApplyRefreshStrategyOptions interface

📍 src/connectors/vendors/helpers.ts:118

Options for applying provider refresh requirements to an existing configuration.

Properties
Property Type Description
enforce? enforce?: boolean; Enforce the strategy's authorization parameter over a conflicting value. Default: false.
requiredScope? requiredScope?: string; Other required scope tokens to preserve and merge, without importing template scopes.

AuthTemplate interface

📍 src/connectors/vendors/types.ts:44

Authentication template for a vendor Defines a single authentication method (e.g., API key, OAuth user flow)

Properties
Property Type Description
id id: string; Unique auth method ID within vendor (e.g., 'pat', 'oauth-user', 'github-app')
name name: string; Human-readable name (e.g., 'Personal Access Token')
type `type: 'api_key' 'oauth';`
flow? `flow?: 'authorization_code' 'client_credentials'
description description: string; When to use this auth method
requiredFields requiredFields: AuthTemplateField[]; Fields user must provide (e.g., ['apiKey'], ['clientId', 'clientSecret', 'redirectUri'])
optionalFields? optionalFields?: AuthTemplateField[]; Optional fields user may provide
defaults defaults: Partial<ConnectorAuth>; Pre-filled OAuth URLs and defaults
scopes? scopes?: string[]; Common scopes for this auth method
scopeDescriptions? scopeDescriptions?: Record<string, string>; Human-readable descriptions for scopes (key = scope ID)
refreshStrategy? refreshStrategy?: RefreshStrategy; How this vendor issues refresh tokens. Required when
flow === 'authorization_code'; ignored otherwise. Drives the force-merge
that requests refresh-capable access; provider consent/setup still applies.
Validated at registry-init time — missing on an auth-code template throws.

BuildAuthConfigOptions interface

📍 src/connectors/vendors/helpers.ts:181

Options for editing a same-method authorization-code configuration.

Properties
Property Type Description
existingAuth? existingAuth?: ConnectorAuth; Preserve saved settings; nonempty supplied template credentials replace their fields.

CreateConnectorOptions interface

📍 src/connectors/vendors/types.ts:212

Options for creating a connector from a template

Properties
Property Type Description
baseURL? baseURL?: string; Override the default baseURL
description? description?: string; Additional description for the connector
displayName? displayName?: string; Human-readable display name
timeout? timeout?: number; Request timeout in ms
logging? logging?: boolean; Enable request/response logging
vendorOptions? vendorOptions?: Record<string, unknown>; Vendor-specific options (e.g., defaultFromNumber for Twilio). Stored in connector.config.options.

ITokenStorage interface

📍 src/connectors/oauth/domain/ITokenStorage.ts:19

Token storage interface All implementations MUST encrypt tokens before storing

Methods

storeToken()

Store token (must be encrypted by implementation)

typescript
storeToken(key: string, token: StoredToken): Promise<void>;

Parameters:

  • key: string
  • token: StoredToken

Returns: Promise<void>

getToken()

Retrieve token (must be decrypted by implementation)

typescript
getToken(key: string): Promise<StoredToken | null>;

Parameters:

  • key: string

Returns: Promise<StoredToken | null>

deleteToken()

Delete token

typescript
deleteToken(key: string): Promise<void>;

Parameters:

  • key: string

Returns: Promise<void>

hasToken()

Check if token exists

typescript
hasToken(key: string): Promise<boolean>;

Parameters:

  • key: string

Returns: Promise<boolean>

listKeys()?

List all storage keys (for account enumeration). Optional — implementations that support it enable multi-account listing.

typescript
listKeys?(): Promise<string[]>;

Returns: Promise<string[]>


OAuthCallbackResult interface

📍 src/connectors/oauth/types.ts:80

Result of one authorization-code exchange; never persisted by token storage.

Properties
Property Type Description
idToken? idToken?: string; Raw, unverified ID token. Verify signature, issuer, audience, expiry and nonce before using its claims; do not log or expose it to untrusted clients.

OAuthConfig interface

📍 src/connectors/oauth/types.ts:9

Properties
Property Type Description
flow flow: OAuthFlow; -
tokenUrl tokenUrl: string; -
clientId clientId: string; -
authorizationUrl? authorizationUrl?: string; -
redirectUri? redirectUri?: string; -
scope? scope?: string; -
usePKCE? usePKCE?: boolean; -
requiredScope? requiredScope?: string; Vendor-mandated scope token for refresh-token issuance (e.g. offline_access,
refresh_token, offline.access). Sourced from the vendor template's
RefreshStrategy; force-merged into the authorize URL scope parameter
even when the operator overrides scope (e.g. Microsoft .default).
clientSecret? clientSecret?: string; -
privateKey? privateKey?: string; -
privateKeyPath? privateKeyPath?: string; -
tokenSigningAlg? tokenSigningAlg?: string; -
audience? audience?: string; -
tokenRequestStyle? `tokenRequestStyle?: 'form' 'bearer';`
  • 'form' (default, RFC 7523): POST application/x-www-form-urlencoded with grant_type=urn:ietf:params:oauth:grant-type:jwt-bearer&assertion=<JWT>.
  • 'bearer' (GitHub App installation tokens and similar): POST with an Authorization: Bearer <JWT> header and no body. Response field for the token is token (not access_token) and expiry is expires_at ISO string (not expires_in seconds). | | tokenLifetimeSeconds? | tokenLifetimeSeconds?: number; | JWT exp lifetime, in seconds. Default 3600. GitHub rejects JWTs with exp more than 10 minutes in the future; set to 540 for GitHub Apps. | | subject? | subject?: string; | JWT sub claim override. For Google Workspace domain-wide delegation this is the email of the user being impersonated; the resulting access token acts as that user. When unset, sub defaults to clientId (RFC 7523 convention for service-account self-auth). | | staticToken? | staticToken?: string; | - | | authorizationParams? | authorizationParams?: Record&lt;string, string&gt;; | Extra query parameters appended to the authorization URL. Used for vendor-specific requirements, e.g. Google's access_type: 'offline' to obtain a refresh token. scope here is a legacy fallback only when the dedicated scope field is absent; it cannot override requiredScope. | | autoRefresh? | autoRefresh?: boolean; | - | | refreshBeforeExpiry? | refreshBeforeExpiry?: number; | - | | storage? | storage?: ITokenStorage; | - | | storageKey? | storageKey?: string; | - |

OAuthConnectorAuth interface

📍 src/domain/entities/Connector.ts:36

OAuth 2.0 authentication for connectors Supports multiple OAuth flows

Properties
Property Type Description
type type: 'oauth'; -
flow `flow: 'authorization_code' 'client_credentials'
clientId clientId: string; -
clientSecret? clientSecret?: string; -
tokenUrl tokenUrl: string; -
authorizationUrl? authorizationUrl?: string; -
redirectUri? redirectUri?: string; -
scope? scope?: string; -
usePKCE? usePKCE?: boolean; -
requiredScope? requiredScope?: string; Vendor-mandated scope token that must appear in every authorize URL for
refresh-token issuance (e.g. offline_access for Microsoft / Atlassian,
refresh_token for Salesforce, offline.access for Twitter/X). Stamped
by buildAuthConfig from the template's RefreshStrategy. Force-merged
into scope at URL-build time so operator scope overrides
(e.g. Microsoft .default) can't drop it. Idempotent.
privateKey? privateKey?: string; -
privateKeyPath? privateKeyPath?: string; -
issuer? issuer?: string; -
subject? subject?: string; -
audience? audience?: string; -
tokenRequestStyle? `tokenRequestStyle?: 'form' 'bearer';`
  • 'form' (default, RFC 7523): POST with grant_type + assertion body.
  • 'bearer' (GitHub App installation tokens): POST with Authorization: Bearer <JWT> header and no body. | | tokenLifetimeSeconds? | tokenLifetimeSeconds?: number; | JWT exp lifetime in seconds (default 3600; GitHub caps at 600). | | refreshBeforeExpiry? | refreshBeforeExpiry?: number; | - | | storageKey? | storageKey?: string; | - | | authorizationParams? | authorizationParams?: Record&lt;string, string&gt;; | Extra query parameters appended to the authorization URL. Used for vendor-specific requirements, e.g. Google's access_type: 'offline'. scope here is a legacy fallback only when the dedicated scope field is absent; it cannot override requiredScope. | | extra? | extra?: Record&lt;string, string&gt;; | Vendor-specific extra credentials |

OptionField interface

📍 src/connectors/vendors/types.ts:117

Vendor-specific option field definition. Declares a configurable option that UI apps render as form fields. Values are stored in connector.config.options and accessed via connector.getOptions().

Properties
Property Type Description
key key: string; Option key stored in connector.config.options (e.g., 'defaultFromNumber')
label label: string; Human-readable label for UI display (e.g., 'Default From Number')
description description: string; Help text / placeholder shown in the UI
required? required?: boolean; Whether the option must be provided (default: false)
type? `type?: 'string' 'number'
defaultValue? `defaultValue?: string number
placeholder? placeholder?: string; Placeholder text for the input field

SimpleIcon interface

📍 src/connectors/vendors/logos.ts:11

Simple Icons icon data structure

Properties
Property Type Description
title title: string; -
slug slug: string; -
svg svg: string; -
path path: string; -
source source: string; -
hex hex: string; -
guidelines? guidelines?: string; -
license? `license?: {
type: string;
url?: string;

};` | - |


StoredToken interface

📍 src/connectors/oauth/types.ts:95

Properties
Property Type Description
access_token access_token: string; -
refresh_token? refresh_token?: string; -
expires_in expires_in: number; -
token_type token_type: string; -
scope? scope?: string; -
obtained_at obtained_at: number; -

StoredToken interface

📍 src/connectors/oauth/domain/ITokenStorage.ts:6

Token storage interface (Clean Architecture - Domain Layer) All implementations must encrypt tokens at rest

Properties
Property Type Description
access_token access_token: string; -
refresh_token? refresh_token?: string; -
expires_in expires_in: number; -
token_type token_type: string; -
scope? scope?: string; -
obtained_at obtained_at: number; -

VendorInfo interface

📍 src/connectors/vendors/helpers.ts:520

Get vendor template information for display

Properties
Property Type Description
id id: string; -
name name: string; -
category category: string; -
docsURL? docsURL?: string; -
credentialsSetupURL? credentialsSetupURL?: string; -
authMethods `authMethods: {
id: string;
name: string;
type: string;
description: string;
requiredFields: string[];
scopes?: string[];
scopeDescriptions?: Record&lt;string, string&gt;;

}[];` | - |


VendorLogo interface

📍 src/connectors/vendors/logos.ts:184

Vendor logo information

Properties
Property Type Description
vendorId vendorId: string; Vendor ID
svg svg: string; SVG content
hex hex: string; Brand color (hex without #)
isPlaceholder isPlaceholder: boolean; Whether this is a placeholder (no official icon)
simpleIconsSlug? simpleIconsSlug?: string; Simple Icons slug (if available)

VendorRegistryEntry interface

📍 src/connectors/vendors/types.ts:179

Registry entry for a vendor (generated at build time)

Properties
Property Type Description
id id: string; Vendor ID
name name: string; Human-readable name
serviceType serviceType: string; Service type for ConnectorTools integration
category category: ServiceCategory; Category from Services.ts
authMethods authMethods: string[]; List of supported auth method IDs
credentialsSetupURL? credentialsSetupURL?: string; URL for credential setup
template template: VendorTemplate; Full vendor template (for programmatic access)

VendorTemplate interface

📍 src/connectors/vendors/types.ts:144

Vendor template definition Complete configuration for a vendor's supported authentication methods

Properties
Property Type Description
id id: string; Unique vendor ID (matches Services.ts id, e.g., 'github', 'slack')
name name: string; Human-readable name (e.g., 'GitHub', 'Slack')
serviceType serviceType: string; Service type for ConnectorTools integration (matches serviceType in ConnectorConfig)
baseURL baseURL: string; Default API base URL
docsURL? docsURL?: string; API documentation URL
credentialsSetupURL? credentialsSetupURL?: string; URL for setting up credentials on vendor's side
authTemplates authTemplates: AuthTemplate[]; All supported authentication methods
category category: ServiceCategory; Category from Services.ts
notes? notes?: string; Additional notes about the vendor's authentication
optionFields? optionFields?: OptionField[]; Vendor-specific option fields (stored in connector.config.options). UI apps render these as form fields.

AuthTemplateField type

📍 src/connectors/vendors/types.ts:87

Known fields that can be required/optional in auth templates

typescript
type AuthTemplateField = | 'apiKey'
  | 'clientId'
  | 'clientSecret'
  | 'redirectUri'
  | 'scope'
  | 'privateKey'
  | 'privateKeyPath'
  | 'appId'
  | 'installationId'
  | 'tenantId'
  | 'username'
  | 'subject'
  | 'audience'
  | 'userScope'
  | 'accountId'
  | 'subdomain'
  | 'region'
  | 'accessKeyId'
  | 'secretAccessKey'
  | 'applicationKey'
  // Vendor-specific extra fields (stored in auth.extra)
  | 'appToken'
  | 'signingSecret'

OAuthFlow type

📍 src/connectors/oauth/types.ts:7

typescript
type OAuthFlow = 'authorization_code' | 'client_credentials' | 'jwt_bearer' | 'static_token'

RefreshStrategy type

📍 src/connectors/vendors/types.ts:33

How a vendor issues refresh tokens for authorization_code flows. Determines what (if anything) the library merges into authorize URLs to request renewal capability. Issuance still depends on provider policy and existing consent. Required for every authorization_code template — the registry initializer fails fast if absent.

  • automatic: vendor issues a refresh token unconditionally (Discord, Asana, HubSpot, Stripe, QuickBooks, Box, Zoom, Pipedrive, Ramp, Atlassian-Bitbucket).
  • never_expires: tokens don't expire (or have multi-year lifetime), no refresh ever needed (Notion, Linear, Airtable PAT, GitHub OAuth Apps, Slack classic bot tokens).
  • scope: a specific scope token must be in the authorize request. Microsoft / Atlassian / GitLab use offline_access; Salesforce uses refresh_token; Twitter/X uses offline.access (note the dot). Force-merged on every authorize URL to survive operator scope overrides.
  • auth_param: a query param must be on the authorize URL. Google uses access_type=offline; Dropbox uses token_access_type=offline. Stamped into the persisted authorizationParams.
  • manual_setup: refresh tokens require out-of-band IdP / app config the library can't enforce (GitHub App "expire user tokens" toggle, Slack token rotation enable). Surfaces a warning at template-import time.
typescript
type RefreshStrategy = | { kind: 'automatic' }
  | { kind: 'never_expires' }
  | { kind: 'scope'; scope: string }
  | { kind: 'auth_param'; key: string; value: string }
  | { kind: 'manual_setup'; description: string }

TemplateCredentials type

📍 src/connectors/vendors/types.ts:205

Credentials provided by user when creating connector from template

typescript
type TemplateCredentials = {
  [K in AuthTemplateField]?: string;
}

applyRefreshStrategy function

📍 src/connectors/vendors/helpers.ts:136

Apply only a provider's refresh requirements. Pure and idempotent: configured API scopes and unrelated parameters (including prompt) are preserved. scope is authoritative, including an explicit empty string. When absent, fall back to authorizationParams.scope; remove that duplicate parameter from the returned patch so it cannot override edits or required scopes. With enforce enabled, a missing strategy is an error and the strategy's authorization parameter wins. Existing three-argument calls keep their operator-value precedence. This requests renewal capability; it does not guarantee a refresh token in every response or perform manual provider setup.

typescript
export function applyRefreshStrategy(
  scope: string | undefined,
  authorizationParams: Record&lt;string, string&gt; | undefined,
  strategy: RefreshStrategy | undefined,
  options: ApplyRefreshStrategyOptions = {},
): {
  scope: string;
  requiredScope: string | undefined;
  authorizationParams: Record&lt;string, string&gt; | undefined;
}

authenticatedFetch function

📍 src/connectors/authenticatedFetch.ts:51

Fetch with automatic authentication using connector's configured auth scheme

Same API as standard fetch(), but with additional authProvider and optional userId/accountId parameters. Authentication is handled automatically based on the connector's configuration:

  • Bearer tokens (GitHub, Slack, Stripe)
  • Bot tokens (Discord)
  • Basic auth (Twilio, Zendesk)
  • Custom headers (e.g., X-Shopify-Access-Token)
typescript
export async function authenticatedFetch(
  url: string | URL,
  options: RequestInit | undefined,
  authProvider: string,
  userId?: string,
  accountId?: string
): Promise&lt;Response&gt;

Example:

Single-user mode:

typescript
const response = await authenticatedFetch(
'https://graph.microsoft.com/v1.0/me',
{ method: 'GET' },
'microsoft'
);
const data = await response.json();

Multi-account mode:

typescript
const response = await authenticatedFetch(
'https://graph.microsoft.com/v1.0/me',
{ method: 'GET' },
'microsoft',
'alice',
'work'  // Use Alice's work Microsoft account
);

buildAuthConfig function

📍 src/connectors/vendors/helpers.ts:259

Build ConnectorAuth from a template and credentials. Creation uses template defaults. With existingAuth, preserve saved authorization-code settings and apply only the nonempty credential patch plus provider refresh requirements.

typescript
export function buildAuthConfig(
  authTemplate: AuthTemplate,
  credentials: TemplateCredentials,
  options: BuildAuthConfigOptions = {},
): ConnectorAuth

createAuthenticatedFetch function

📍 src/connectors/authenticatedFetch.ts:98

Create an authenticated fetch function bound to a specific connector and optionally a user/account

Useful for creating reusable fetch functions for a specific API and/or user. Uses connector's configured auth scheme (Bearer, Bot, Basic, custom headers).

typescript
export function createAuthenticatedFetch(
  authProvider: string,
  userId?: string,
  accountId?: string
): (url: string | URL, options?: RequestInit) =&gt; Promise&lt;Response&gt;

Example:

Single-user mode:

typescript
const msftFetch = createAuthenticatedFetch('microsoft');

// Use like normal fetch (auth automatic)
const me = await msftFetch('https://graph.microsoft.com/v1.0/me');
const emails = await msftFetch('https://graph.microsoft.com/v1.0/me/messages');

Multi-account mode:

typescript
// Create fetch for Alice's work Microsoft account
const workFetch = createAuthenticatedFetch('microsoft', 'alice', 'work');
const personalFetch = createAuthenticatedFetch('microsoft', 'alice', 'personal');

const workEmails = await workFetch('/me/messages');
const personalEmails = await personalFetch('/me/messages');

createConnectorFromTemplate function

📍 src/connectors/vendors/helpers.ts:452

Create a Connector from a vendor template

typescript
export function createConnectorFromTemplate(
  name: string,
  vendorId: string,
  authTemplateId: string,
  credentials: TemplateCredentials,
  options?: CreateConnectorOptions
): Connector

Example:

typescript
const connector = createConnectorFromTemplate(
  'my-github',
  'github',
  'pat',
  { apiKey: process.env.GITHUB_TOKEN }
);

extractNonSecretCredentials function

📍 src/connectors/vendors/helpers.ts:393

Extract non-secret credentials from a raw credentials dict. Used by ConnectorConfigStore.saveFromTemplate() to preserve template field values for round-trip editing without storing secrets.

typescript
export function extractNonSecretCredentials(
  authTemplate: AuthTemplate,
  credentials: TemplateCredentials,
): Record&lt;string, string&gt;

generateEncryptionKey function

📍 src/connectors/oauth/utils/encryption.ts:107

Generate a secure random encryption key Use this to generate OAUTH_ENCRYPTION_KEY for your .env file

typescript
export function generateEncryptionKey(): string

getAllVendorLogos function

📍 src/connectors/vendors/logos.ts:298

Get all available vendor logos

typescript
export function getAllVendorLogos(): Map&lt;string, VendorLogo&gt;

getAllVendorTemplates function

📍 src/connectors/vendors/helpers.ts:65

Get all vendor templates

typescript
export function getAllVendorTemplates(): VendorTemplate[]

getCredentialsSetupURL function

📍 src/connectors/vendors/helpers.ts:603

Get credentials setup URL for a vendor

typescript
export function getCredentialsSetupURL(vendorId: string): string | undefined

getDocsURL function

📍 src/connectors/vendors/helpers.ts:611

Get docs URL for a vendor

typescript
export function getDocsURL(vendorId: string): string | undefined

getVendorAuthTemplate function

📍 src/connectors/vendors/helpers.ts:77

Get auth template for a vendor

typescript
export function getVendorAuthTemplate(
  vendorId: string,
  authId: string
): AuthTemplate | undefined

getVendorColor function

📍 src/connectors/vendors/logos.ts:288

Get the brand color for a vendor

typescript
export function getVendorColor(vendorId: string): string | undefined

getVendorInfo function

📍 src/connectors/vendors/helpers.ts:540

Get vendor information suitable for display

typescript
export function getVendorInfo(vendorId: string): VendorInfo | undefined

getVendorLogo function

📍 src/connectors/vendors/logos.ts:227

Get logo for a vendor

typescript
export function getVendorLogo(vendorId: string): VendorLogo | undefined

Example:

typescript
const logo = getVendorLogo('github');
if (logo) {
  console.log(logo.svg);  // SVG content
  console.log(logo.hex);  // Brand color
}

getVendorLogoCdnUrl function

📍 src/connectors/vendors/logos.ts:330

Get CDN URL for a vendor's logo

typescript
export function getVendorLogoCdnUrl(vendorId: string, color?: string): string | undefined

getVendorLogoSvg function

📍 src/connectors/vendors/logos.ts:270

Get SVG content for a vendor logo

typescript
export function getVendorLogoSvg(vendorId: string, color?: string): string | undefined

getVendorTemplate function

📍 src/connectors/vendors/helpers.ts:53

Get vendor template by ID

typescript
export function getVendorTemplate(vendorId: string): VendorTemplate | undefined

hasVendorLogo function

📍 src/connectors/vendors/logos.ts:200

Check if a vendor has a logo available

typescript
export function hasVendorLogo(vendorId: string): boolean

listVendorIds function

📍 src/connectors/vendors/helpers.ts:89

List all vendor IDs

typescript
export function listVendorIds(): string[]

listVendors function

📍 src/connectors/vendors/helpers.ts:565

List all vendors with basic info

typescript
export function listVendors(): VendorInfo[]

listVendorsByAuthType function

📍 src/connectors/vendors/helpers.ts:594

List vendors that support a specific auth type

typescript
export function listVendorsByAuthType(authType: 'api_key' | 'oauth'): VendorInfo[]

listVendorsByCategory function

📍 src/connectors/vendors/helpers.ts:587

List vendors by category

typescript
export function listVendorsByCategory(category: string): VendorInfo[]

listVendorsWithLogos function

📍 src/connectors/vendors/logos.ts:314

List vendor IDs that have logos available

typescript
export function listVendorsWithLogos(): string[]

VENDOR_ICON_MAP const

📍 src/connectors/vendors/logos.ts:26

Mapping from our vendor IDs to Simple Icons slugs

Properties
Property Type Description
microsoft 'microsoft' -
google 'google' -
'google-api' 'google' -
aws 'amazonwebservices' -
azure 'microsoftazure' -
gcp 'googlecloud' -
discord 'discord' -
slack 'slack' -
telegram 'telegram' -
twitter 'x' -
'microsoft-teams' 'microsoftteams' -
salesforce 'salesforce' -
hubspot 'hubspot' -
pipedrive 'pipedrive' -
'cal-com' 'caldotcom' -
calendly 'calendly' -
heyreach null -
emailbison null -
clay null -
github 'github' -
gitlab 'gitlab' -
bitbucket 'bitbucket' -
jira 'jira' -
confluence 'confluence' -
trello 'trello' -
linear 'linear' -
asana 'asana' -
notion 'notion' -
airtable 'airtable' -
'google-workspace' 'google' -
'google-drive' 'googledrive' -
'microsoft-365' 'microsoft365' -
onedrive 'onedrive' -
stripe 'stripe' -
paypal 'paypal' -
quickbooks 'quickbooks' -
ramp null -
sendgrid 'sendgrid' -
mailchimp 'mailchimp' -
postmark 'postmark' -
dropbox 'dropbox' -
box 'box' -
datadog 'datadog' -
pagerduty 'pagerduty' -
sentry 'sentry' -
serper null -
'brave-search' 'brave' -
tavily null -
rapidapi 'rapidapi' -
zenrows null -
twilio 'twilio' -
zendesk 'zendesk' -
intercom 'intercom' -
shopify 'shopify' -

Documentation snapshot · 2026-11-02Suggest a correction ↗

Search documentation

Type to search the v2 documentation.