Technical enablement · 07

Integrations & swapping third-party systems

Clients rarely have the same technology stack as the reference implementation. This page documents how {{product.name}} connects to external systems, which of those connections are pluggable, and the recipe for replacing one provider with another.

⚠

Be explicit about status. For every integration, state whether the adapter is shipped, pluggable but not implemented, or would require refactoring. Do not describe planned work as available. Third-party licensing and data-sharing terms are for Legal and Procurement, not engineering.

The model: ports and adapters

Product code talks to a small, product-owned interface (the port). Each provider implements that interface in an adapter. Switching providers then means writing or configuring one adapter, not changing business logic. [Replace: name the real base class or interface and where it lives.]

Product code business logic Port (interface) search() · fetch() · push() [Replace: real methods] Adapter: Provider A shipped (default) Adapter: Provider B shipped / pilot Adapter: client system to be written External A External B Client's
Figure 1 — Provider adapter pattern. Product code depends only on the port; each external system sits behind an adapter selected by configuration.

Integration inventory

One row per external dependency, with an honest status.

IntegrationDefault providerPurposeStatusSwap effort
Identity[Replace]Authentication and SSOPluggableLow (configuration)
AI model provider[Replace]Generation and embeddingsPluggableLow to medium
Content / asset store[Replace]Files and mediaAdapter neededMedium
Data source (CRM, CDP)[Replace]Customer or reference dataAdapter neededMedium
Messaging / notifications[Replace]Email and chat deliveryRefactor neededHigh

The general recipe

  1. Confirm the port

    Find the interface the product uses for this integration. If none exists, extract one before writing an adapter.

  2. Map the capability gap

    List what the old provider did that the new one cannot (or does differently): limits, data shapes, auth model, latency.

  3. Implement and register the adapter

    Implement the port, handle errors and rate limits consistently, and register it under a configuration name.

  4. Test with contract tests

    Run the same contract test suite against every adapter so behaviour stays interchangeable.

  5. Roll out behind a flag

    Enable per tenant, monitor, then make default if appropriate. Keep the previous adapter available for rollback.

Adapter skeleton (language-neutral pseudocode)
interface AssetStore:
    search(query, filters) -> list[Asset]
    fetch(asset_id)        -> Asset
    publish(asset)         -> asset_id

class ClientAssetStore implements AssetStore:
    # translate between the client's API and the product's Asset model
    # map errors to the product's error types; honour rate limits

Swap guides

One section per swappable system. Replace the examples with the integrations that matter for {{product.name}}.

Example: replacing the content / asset store

AspectGuidance
Port[Replace: AssetStore] in [replace/path]
Current adapter[Replace]
What to implementsearch, fetch, publish, metadata mapping
Configuration[REPLACE_PROVIDER_KEY], credentials via the secret store
Known gaps[Replace: features the new provider lacks]
Effort[Replace: days/weeks, and what drives it]

Example: replacing the AI model provider

Model providers differ in context limits, tool-calling support, safety behaviour and data-handling terms. Route all calls through the AI service so a swap touches one adapter, and re-run your evaluation set before switching. Confirm data-processing terms with Legal and the Data Privacy Officer first.

API & agent access

ⓘ

Programmatic access. If {{product.name}} exposes a public API, document the OpenAPI location, authentication and rate limits here. If it also offers an MCP server or agent tools so AI assistants can call it, list the tools, the scopes each requires and the human-approval expectations. [Replace: details, or delete if not offered.] Apply the same tenant isolation and audit logging as the UI.

Effort summary

IntegrationTypical effortMain risk
Identity[Replace]Claim and group mapping
AI model provider[Replace]Behavioural drift; evaluation needed
Asset store[Replace]Metadata model differences
Data source[Replace]Data quality and volume
💡

Capture lessons from each client integration back into this page so the next team starts further ahead. See also the deployment models for network and access requirements.