# Workspace Connectors

A **Workspace Connector** is an account-scoped connected account — Gmail, Slack, Salesforce, Google Sheets, and so on. In the app these are called workspace connectors; in the Public API they live under `/integrations`.

Each connector has a numeric `id` that you pass as `connectedAccountId` when wiring workflow/flow triggers and tool nodes. Setting up an automation almost always starts here: find the connector, confirm it is connected, and read its `id`.

These are **distinct from [Max Connectors](/docs/concepts/max/connectors)**, which belong to a single user and power that person's Max assistant.

The Public API is **read-only**. Connecting, renaming, visibility, and which tools a connector exposes are changed in the app — not via an API key. Requires a USER API key.

## Identity

| Field | Type | Notes |
|  --- | --- | --- |
| `id` | number | Use as `connectedAccountId` in triggers and `TOOLS_AI` nodes. |
| `toolkit` | string | Uppercase enum name, e.g. `GMAIL`, `SLACK`, `SALESFORCE`, `GOOGLESHEETS`. |
| `alias` | string? | Display name. |
| `visibility` | enum | `SHARED` · `PRIVATE`. |
| `isConnected` | boolean | Whether the OAuth grant is currently valid. |
| `isExpired` | boolean | Needs reconnect in the app. |
| `connectedEmail` | string? | Connected email/account identifier. |
| `allowedToolSlugs` | array | Currently enabled tool slugs. |
| `enabledToolsCount` | number |  |
| `availableToolsCount` | number |  |


Discover valid `toolkit` values with `GET /integrations/toolkits`. An unknown value on list filters returns 400.

## Where the `id` is used

- **Event trigger nodes** — a workflow `TRIGGER` with `triggerType: "COMPOSIO_TRIGGER"` needs `connectedAccountId`, `triggerToolkit`, and `triggerSlug`, plus `triggerConfig`. When the trigger fires, the payload is available downstream as `{trigger_payload}`.
- **`TOOLS_AI` nodes** — `data.connectedAccountConfigs` is an array of `{ connectedAccountId, useAllTools, selectedToolSlugs }`.
- References are validated server-side: a wrong `connectedAccountId` returns 400.


To resolve the ids a trigger config expects (spreadsheet, Drive folder, Gmail label, …), use **Integration Resources** (`GET /integrations/trigger-types` and `GET /integrations/trigger-resources/...`). Those are a separate tag from Workspace Connectors.

## Operations

| Verb | Path | Purpose |
|  --- | --- | --- |
| `GET` | `/public/v1/integrations` | List (filters: `toolkit`, `filterText`, connection state) |
| `GET` | `/public/v1/integrations/toolkits` | Catalog of connectable toolkits + tool slugs |
| `GET` | `/public/v1/integrations/{integrationId}` | Detail |
| `GET` | `/public/v1/integrations/{integrationId}/tools` | Enabled vs available tools, with required-scope status |


`hasRequiredScopes: false` on a tool means the OAuth grant is missing scopes that tool needs — it will fail at runtime until the user reconnects in the app with broader permissions.

Full list in the **[API Reference](/reference/openapi)** under the `Workspace Connectors` tag.

## CLI

```bash
frontline integrations list --toolkit GMAIL --connected --table
frontline integrations toolkits --table
frontline integrations get 42
frontline integrations tools 42 --table
```