# Integrations overview

Integration setup and status, with workspace connections routed per project.

Source: https://docs.annot8.app/docs/integrations/overview



Integrations are connected **once for the whole workspace**, in
**Integrations** in the sidebar, then routed per project.

<Callout type="info">
  Except for email, integrations require **Pro** or above.
</Callout>

## What's available [#whats-available]

### Notify your team [#notify-your-team]

| Integration         | Setup                                | Page                                    |
| ------------------- | ------------------------------------ | --------------------------------------- |
| **Slack**           | Authorize Slack and choose a channel | [Slack](/docs/integrations/slack)       |
| **Discord**         | Channel webhook URL                  | [Discord](/docs/integrations/discord)   |
| **Microsoft Teams** | Channel webhook URL                  | [Teams](/docs/integrations/teams)       |
| **Email**           | An address                           | [Email](/docs/integrations/email)       |
| **Webhook**         | Any URL you control                  | [Webhooks](/docs/integrations/webhooks) |

### Create issues and tasks [#create-issues-and-tasks]

| Integration | Setup                                    | Page                                |
| ----------- | ---------------------------------------- | ----------------------------------- |
| **Linear**  | Authorize Linear and choose a team       | [Linear](/docs/integrations/linear) |
| **Jira**    | Authorize Atlassian and choose a site    | [Jira](/docs/integrations/jira)     |
| **GitHub**  | Authorize GitHub and choose a repository | [GitHub](/docs/integrations/github) |
| **GitLab**  | Personal access token + project id       | [GitLab](/docs/integrations/gitlab) |
| **Asana**   | Personal access token + project id       | [Asana](/docs/integrations/asana)   |
| **Trello**  | API key + token + list id                | [Trello](/docs/integrations/trello) |

## Two ways feedback reaches a tool [#two-ways-feedback-reaches-a-tool]

**Automatic, on every new thread.** Every connected integration fires when
feedback arrives on a project, unless that project has switched it off. Notification channels
post a message; issue trackers create an issue, task, or card.

<Callout type="warn">
  Connecting Linear, Jira, GitHub, GitLab, Asana, or Trello means **every new
  thread becomes a ticket** on every project that leaves it on. That's right for
  a dedicated triage board and wrong for a shared sprint board. If you only want
  *some* threads to become tickets, switch the tracker off for the project and
  create tickets on demand instead.
</Callout>

**On demand, per thread.** Right-click a thread in the inbox and choose
**Create issue** to create one in **Linear**, **Jira**, or **GitHub**. The
thread's detail panel offers the same under **Links**.

The on-demand path sends more: the thread's title, page path and URL, issue
type, priority, status, expected and actual behaviour, and the element selector.
The automatic path sends the comment, the author, and a link back to the page.
Where you have the choice, on demand produces the better ticket.

For conditional routing — say, only critical production threads — use an
[automation](/docs/feedback/automations) or a
[webhook](/docs/integrations/webhooks) into your own logic.

## Connecting one [#connecting-one]

<Steps>
  <Step>
    ### Pick the provider [#pick-the-provider]

    **Integrations** in the sidebar → pick the provider. Each provider's page walks
    through its setup.

    * **Slack, Linear, Jira, and GitHub** use guided setup: authorize the provider,
      land back in the dashboard, and choose a channel, team, site, or repository
      from a list. Nothing to copy or paste.
    * **Discord and Microsoft Teams** take a channel webhook URL, **Email** takes
      an address, and **Webhook** takes your own URL.
    * **GitLab, Asana, and Trello** take an access token plus the destination's
      id.
  </Step>

  <Step>
    ### Connect it [#connect-it]

    Finish the provider's flow and save. Stored credentials are encrypted at rest
    with AES-256-GCM. For guided providers, the OAuth tokens are held by the
    connection service and refreshed as needed, never stored in Annot8's
    database.
  </Step>

  <Step>
    ### Test it [#test-it]

    Hit **Test**. Alert integrations send a test message; issue trackers check
    access to the selected destination without creating a ticket. The integration
    row shows the result of the most recent check or delivery, so
    "is this actually working?" is visible instead of hidden in a log.
  </Step>

  <Step>
    ### Route it to projects [#route-it-to-projects]

    A new connection is on for **every project**. **Project → Integrations** lists
    every workspace integration with a toggle: switch off the ones a project
    shouldn't use, such as a staging site.
  </Step>
</Steps>

## Per-project overrides [#per-project-overrides]

A project can override the workspace configuration for an integration — most
usefully, a different Slack channel per project or a different Linear team.

Set it in **Project → Integrations**: choose **Route…** next to the
integration, pick the destination, and **Save route**. **Use workspace
default** removes the override again. Routes are available for Slack (channel),
Linear (team), GitHub (repository and branch), Jira (project key on the same
site), and webhooks (URL).

That means one authorization and per-project routing, rather than a separate
connection per project.

## Delivery status and failures [#delivery-status-and-failures]

Every integration records the outcome of its last delivery, with the error text
when something went wrong.

A failing integration never blocks feedback. A thread is created and stored
first; delivery is attempted afterwards, and a broken webhook produces a visible
error on the integration rather than a lost thread.

## Disconnecting [#disconnecting]

**Disconnect** removes the integration and its stored credentials. New feedback
stops being delivered there. Threads, tickets, and messages that already exist
are untouched.

## Not seeing anything arrive? [#not-seeing-anything-arrive]

In order:

1. Is the integration switched off for **this project**?
2. Does the integration row show **Failing** or **Reconnect needed**?
3. Does the **Test** button succeed?
4. Is the destination still there? Discord and Teams webhooks die with the
   channel they were created for, and archived Slack channels stop accepting
   posts.
5. Is your plan still paid? Integrations stop when a subscription lapses.
