Hub / Topics / Connector classes

Two ways to build a connector

Every integration decision downstream — who operates it, where credentials live, what happens when it breaks, how members upgrade — is decided by one question about your platform. Ask it first, because the answer is not yours to choose.

Topic Integration architecture Grounded in Five platforms Audience Anyone scoping an integration Updated 2026-09-13

The question

Will the platform run your code inside the member's own tenant?

That is the whole taxonomy. Not which CRM it is, not how good the API is, not whether it has webhooks — whether the platform will host and execute integration code on the member's behalf, inside their instance.

It sounds like an implementation detail and it is the opposite. It determines who is on call when the integration breaks, whose infrastructure holds the member's case data in transit, whether connector faults are independent or correlated across members, and whether shipping a fix means asking every member to upgrade something. Get it wrong at scoping time and you discover it during the build, when the cost of changing course is highest.

The answer is a property of the platform, not a preference. No amount of design work turns a platform that hosts no third-party code into one that does. What you choose is how much lives where the platform does allow it — which is a real decision, and a different one.

The three classes

Where the platforms actually fall

In-tenant

Salesforce · Dynamics

The platform runs real code in the member's own instance. Apex classes, plugin assemblies, declarative automation — all executing under the member's governance.

  • The member operates it
  • Credentials never leave their tenant
  • State lives in first-class platform objects
  • Connector faults are isolated per member
  • Shipping a fix means every member upgrades

Partial

Zendesk

Client-side apps in a sandbox and platform-hosted declarative flows, but nowhere to put arbitrary server code. Some logic has a home in-tenant; not all of it.

  • The member still operates it
  • Credentials stay in their tenant
  • State lives in platform fields and tags
  • Connector faults are isolated per member
  • Anything the sandbox cannot express has no home

Gateway

Fin / Intercom

The platform hosts no third-party code at all. Panels are pages served from elsewhere and framed in; there is no installed package — the member connects an app in their workspace (for Fin / Intercom, a connected Intercom app) and TSANet hosts the rest. The shared machinery this class runs on is the Connect Gateway.

  • TSANet operates it
  • Credentials sit with TSANet, one set per member
  • The gateway must hold lifecycle state itself
  • Connector faults are shared — one hosted service for every member on it
  • Fixes ship centrally, with nothing to upgrade
In-tenant Partial Gateway Salesforce · Dynamics Zendesk Fin / Intercom Operated by the member the member TSANet Credentials their tenant their tenant with TSANet Connector fault one member one member shared — one hosted service Platform outage everyone everyone everyone Shipping a fix every member upgrades every member upgrades centrally, nothing to do
The trade is symmetric, which is what makes it a real decision rather than a ranking. In-tenant distributes both the operating burden and the failure domain; a gateway centralises both. Neither is better in the abstract.

What follows

The consequences you inherit

Every row here was a design decision on at least one shipped connector, made because of the class rather than in spite of it.
 In-tenantGateway
ReconciliationScheduled jobs the platform runs for youA poller you build, operate and monitor
Durable statePlatform objects — reportable, governed by their sharing modelA store you run, back up and keep consistent with the platform
Inbound deliveryAn endpoint inside the tenant, or the platform's own event machineryYour endpoint, your signature verification, your dedupe
DeploymentA package a member installs and later upgradesA service you deploy; members connect an app and install little else
Data residencyCase content never leaves the member's tenantCase content transits infrastructure TSANet operates
Connector faultsIndependent — one member's misconfiguration cannot affect anotherCorrelated across members on the gateway — one shared service, which is what its durability and rollout design exists to manage
Platform outageAffects everyone, in every class — the Connect API is a shared dependency regardless of where connector code runs
Release cadenceGated by member upgrade appetite and any store reviewAs fast as you can deploy safely

The row that most often gets under-weighted at scoping time is data residency, because it is a procurement question rather than an engineering one. A member whose policy says case content stays on their infrastructure has effectively ruled out the gateway class before the first design meeting — and will say so late, after review, unless someone asks early.

The two failure rows are the ones most often reasoned about badly, including by us — an earlier version of this page got them wrong, so it is worth being precise.

Every class already shares a dependency. The Connect API is the shared floor: a platform outage stops collaboration for every member regardless of where their connector code runs. An in-tenant Salesforce package does not keep working when the platform is down. So "in-tenant means one member is affected" is only ever true of faults in the connector itself, and stating it without that qualifier flatters the in-tenant column.

What the gateway changes is correlation, not fragility. It adds one more component shared by the members on it, so a fault there is correlated rather than independent. That is a design input, not a verdict: correlation is what durability, recovery and staged rollout exist to manage, and a gateway built that way targets availability in the same range members expect from the platform itself. The honest comparison is that in-tenant distributes connector faults across members while a gateway concentrates them into something engineered — and operated — to a higher standard than any individual member's install.

Where that genuinely bites is not uptime but change. A bad release to the gateway still reaches everyone on it at once, which is why deployment discipline matters more there than in a world where each member upgrades on their own schedule.

Two consequences of the class are worked through on their own pages: what it means for accepting cases automatically, and for receiving files.

Deciding

Working out which class your platform is

Four questions, in this order. The first "no" usually settles it.

  1. Can third-party code be installed and executed in a customer's instance? Managed packages, scoped apps, plugin assemblies. If yes, in-tenant is available.
  2. Does the platform host an agent-facing surface for third-party code? If the only way to show an agent anything is a page you serve and the platform frames in, you are at least partly gateway-shaped whatever else is true.
  3. Are there native outbound events? No webhooks means either something installed emits them, or you poll. Both are real answers; polling is not a failure.
  4. Where can durable state live? If the platform gives you no first-class object to hold case linkage, something you operate has to hold it — and that thing becomes precious.
Ask a fifth question of the member, not the platform: does their policy allow case content to transit infrastructure they do not operate? A "no" collapses the choice regardless of what the platform supports, and it is cheaper to hear at scoping than at security review.

Where the shipped connectors landed

PlatformClassWhy
SalesforceIn-tenantApex is real server-side code running under the member's governance
DynamicsIn-tenantPlugin assembly plus Power Automate, all in the member's environment
ZendeskPartialSandboxed client app and hosted declarative flows, but no arbitrary server code
Fin / IntercomGatewayNo third-party code hosting and no native webhooks, so the service must be elsewhere
ServiceNowUndecidedAnswers both ways: it runs installed code, but hosts no UI and has no native webhooks

The awkward case

When the platform answers "sort of"

Two of the five platforms above do not answer cleanly, and they are instructive in different ways.

Zendesk: yes to installation, no to a server

Code installs and runs — but the app is a browser sandbox with no storage and no server, and the flow engine is declarative. So background work lives in a page that exists only while an agent has a tab open, and anything the flow language cannot express has nowhere to go. The class question resolves to Partial — in-tenant, within limits — and the limits are the design.

ServiceNow: yes to installation, no to hosting

Installed scoped applications are the native extension model, so code can certainly run in the member's instance. But the platform hosts no UI surface for you and provides no native webhooks — so something must be installed and something must be served from elsewhere. The remaining decision is not "app or no app"; it is how much of the connector lives inside that app, and therefore how often members have to upgrade it.

That reframing is the practical value of the taxonomy. When a platform answers ambiguously, the question stops being which class is this and becomes what is the smallest thing that has to be installed — because that is what determines the upgrade burden you are signing members up for. See the ServiceNow assessment for that worked through in detail.