---
title: "Intercom"
description: "Use Intercom for MainSDK feedback and support - access token, main.yaml, opening reports and tickets, local testing and swapping."
section: "integrations"
canonical: "https://mainsdk.dev/docs/integrations/intercom"
updated: "2026-10-28"
---

# Intercom

> Use Intercom for MainSDK feedback and support - access token, main.yaml, opening reports and tickets, local testing and swapping.

Canonical: https://mainsdk.dev/docs/integrations/intercom · Updated: 2026-10-28

Intercom is one of the drivers behind [`feedback`](https://mainsdk.dev/docs/interfaces/feedback). Your app calls `feedback.open()` for a "Report a problem" button and `support.ticket()` to open a ticket, and the report lands in your Intercom workspace with the trace, app version, device and steps attached. Pick Intercom when your support team already answers customers there; pick the built-in driver when you only need reports in the MainSDK console.

> **Note:** `feedback` has no spec yet. The calls and options on this page are provisional, taken from the catalog and the product requirements, and may change when the spec lands.

## Interfaces it serves

### Feedback and support (`feedback`)

- Status: Building for 0.6 · ships as a beta API
- Driver: `intercom` (Intercom)
- Docs: https://mainsdk.dev/docs/interfaces/feedback.md

```yaml
feedback:
  driver: intercom
```

Swap to another provider: `builtin`, `zendesk`, `plain`.

## Before you start

You need an Intercom workspace.

1. **Create an app in Intercom's developer hub.** Apps there give you an access token for Intercom's REST API. Grant only the permissions your support flow needs, such as reading and writing conversations, tickets and contacts.
2. **Copy the access token.** Treat it like a password: it can read your customers' conversations.
3. **Set up your inbox.** Decide which team or inbox receives reports from your app, and the ticket types you use if your workspace uses tickets.

Store the token in your secrets manager, never in code or a committed env file.

## Configure

```yaml title="main.yaml"
feedback:
  driver: intercom
  # [TBD] key name; the token goes in as secret:INTERCOM_ACCESS_TOKEN (suggested name)
```

Provider keys go in as `secret:NAME` references; a literal key fails `mainsdk check` with `MAIN-CONFIG-0004`. The exact key names for the Intercom driver are not decided yet.

## Use it

```tsx title="app/report-button.tsx"
"use client";
import { feedback } from "mainsdk";

export function ReportButton({ user }: { user: { id: string } }) {
  return (
    <button onClick={() => feedback.open({ for: user, context: { screen: "checkout" } })}>
      Report a problem
    </button>
  );
}
```

`support.ticket()` opens a ticket in Intercom with the same trace and version attached. Its arguments arrive with the spec.

## Local development and testing

- **No Intercom workspace:** use the built-in driver in a development overlay, so reports stay in your app while you build.
- **Tests:** `createTestApp()` from `@mainsdk/testing` runs `feedback` on an in-memory fake, so tests open no real conversations, and `chaos.on("feedback", { outage: true })` simulates Intercom being down.

```yaml title="main.env.dev.yaml"
feedback:
  driver: builtin
```

## What MainSDK adds on top

- Screenshots redacted before they leave the device.
- Support access to a user's data audited.
- Every report carries the trace, version, device and steps, grouped with the matching error.
- Replies go back to the customer through [`notify`](https://mainsdk.dev/docs/interfaces/notify).

See [Feedback and support](https://mainsdk.dev/docs/interfaces/feedback) for the full contract.

## Limits and notes

- Planned driver, not in a spec yet: `feedback` is phase 2.
- Reports carry personal data. Intercom offers more than one data hosting region; pick the one that matches where your users' data must stay (MainSDK regions are US, EU and India).
- Capturing reports is free. MainSDK Cloud Teams adds inbox history and triage of reports.

## Swap to or from it

```yaml title="main.yaml"
feedback:
  driver: zendesk   # was intercom
```

Your `feedback.open()` and `support.ticket()` calls stay the same. Past conversations and tickets stay in Intercom; MainSDK does not move them.

## FAQ

**Does this replace the Intercom Messenger?** No. The driver sends reports and tickets into Intercom. How it relates to a Messenger you already embed is not specified yet [TBD].

**Can I send reports to Intercom and keep them in the MainSDK console?** The console inbox is part of MainSDK Cloud Teams; whether it mirrors reports sent to a third-party driver is not decided yet [TBD].

## Next

- [Feedback and support](https://mainsdk.dev/docs/interfaces/feedback) and [Notifications](https://mainsdk.dev/docs/interfaces/notify)
- [Zendesk](https://mainsdk.dev/docs/integrations/zendesk), [Plain](https://mainsdk.dev/docs/integrations/plain) and [Built-in and local drivers](https://mainsdk.dev/docs/integrations/built-in)
- [Swap a driver](https://mainsdk.dev/docs/guides/swap-a-driver)
