Integrations

System Role Direction Page

Retell AI

AI voice calls, SMS chats, agent configuration

out + webhooks in

Retell AI

Resend

Campaign and transactional email, delivery events

out + webhooks in

Resend

HubSpot

CRM contacts, companies, engagements, tasks, deals

out via SQS + webhooks in

HubSpot

Nooks

Human-dialer call outcomes

webhooks in

Carriers, MessagingApp, Nooks and JustCall

Twilio / Plivo

Carrier numbers imported into Retell over SIP

out

Carriers, MessagingApp, Nooks and JustCall

MessagingApp

Internal microservice that buys and releases numbers

out

Carriers, MessagingApp, Nooks and JustCall

Five9

Call payload capture (stored only)

webhooks in

Carriers, MessagingApp, Nooks and JustCall

JustCall

Legacy telephony and agent availability

webhooks in

Carriers, MessagingApp, Nooks and JustCall

Supabase

PostgreSQL, Auth, Realtime, Edge Functions

both

Platform services

Vercel AI Gateway

One endpoint fronting OpenAI, Anthropic, xAI, Google

out

Platform services

Google BigQuery

Read-only CRM/engagement mirror for sequence data gates

out

Platform services

AWS SQS

CRM and email-categorisation message queues

out

Platform services

Redis

In-flight call counter

both

Platform services

Sentry

Error and performance monitoring

out

Platform services

Wiring conventions

Clients live in lib/plugins/ or a dedicated folder

lib/plugins/ holds inngest-client.ts, redis-client.ts, resend-client.ts, and sqs-client.ts. HubSpot HTTP clients live in lib/plugins/hubspot/ (HubSpotClient plus feature clients such as HubSpotListsClient; pyb.ts wraps @payability/pyb-hubspot). Retell has its own folder (lib/retellai/) because it carries types, agent config and the post-call analysis schema alongside the client.

Errors are wrapped, not leaked

RetellClient wraps SDK failures in RetellError; the calling service converts them to RetellCallError or a CallSkipReason. A provider’s error shape never reaches a route handler.

Configuration is registry-driven where it varies

Carriers are entries in EXTERNAL_PROVIDER_CONFIGS, models in AI_GATEWAY_MODELS, CRM event types in CRM_EVENT_TYPES. Adding one is a single-entry change.

Missing configuration degrades rather than crashes

Realtime broadcast logs a warning and returns when Supabase keys are absent; Svix verification is skipped when the Resend secret is unset; SQS publishers return false when a queue URL is missing. The two exceptions that fail closed are verifyInternalSecret() and HubSpot signature verification, because both guard write paths.

Best-effort side effects are explicit

Activity logging, HubSpot engagement logging and CRM publishing are wrapped in try/catch that warns and continues. The comment // best-effort marks them in the source.

Environment variables

See Environment variables for the full list with descriptions.