> ## Documentation Index
> Fetch the complete documentation index at: https://docs.worksong.ai/llms.txt
> Use this file to discover all available pages before exploring further.

# Integrations, imports and realtime

> Connect email, calendar, directory and webhooks, import from Excel, attach files, and see changes live.

## Providers

A **provider** is an outside service that your organization connects to Work. Each organization has its own settings, and an Owner or a member with Manage on the organization sets them.

| Provider | Used for |
| - | - |
| Llm | AI columns and AI answers |
| Email | Sending email that was approved |
| Calendar | Creating calendar events that were approved |
| Voice | Voice features |
| Directory | Importing your people (see below) |
| LinkedIn | Looking up public profile details |

Set one with `PUT /v1/settings/providers/{provider}`. Send `settings` (plain values) and `secrets` (keys and passwords). **Secrets are write-only**: Work never returns them. `GET /v1/settings/providers` shows which providers are set up. `POST /v1/settings/providers/email/test` sends a test email.

Email and calendar actions that an Agent or an automation proposes wait for a [gate](/work/people-and-permissions.md#gates), if you set one.

## Directory sync

Directory sync adds the people of your Google or Microsoft directory as members.

* Set up the **Directory** provider first, with the vendor (Google is the default) and its credentials.
* Call `POST /v1/integrations/directory/sync`. It needs Manage on the organization.
* The result tells you how many people were `imported` and how many were `skipped`. Running it again adds only new people.
* If Directory is not set up, the call answers `501` ("Directory sync is not configured for this organization").

## Outbound connections

Register a connection with `POST /v1/integrations`: a `name`, a `type` (for example a webhook), a `target` address and, if needed, a `secret`. You can enable, disable, change or delete it later. The target is shown shortened in responses, and the secret is never returned. `POST /v1/email` sends an email through a registered email connection.

Each person can also connect their own Google account (`/v1/integrations/google/connect`) and disconnect it. `GET /v1/me/integrations` lists what you connected and `GET /v1/me/calendar/events` reads your calendar events.

## Apps that use your account

An MCP client or another app that you signed in with is listed under `GET /v1/oauth/clients`. Revoke one with `DELETE /v1/oauth/clients/{id}` and it stops working at once. See [Work MCP tools](/work/mcp-tools.md).

## Webhooks

An automation can send data out with the `CallWebhook` action. See [Automations reference](/work/automations-reference.md). Public forms are the way to receive data from outside: see [Views, forms and dashboards](/work/views-forms-dashboards.md).

## Import from Excel

Upload an `.xlsx` file as `multipart/form-data`.

* `POST /v1/imports/excel` makes a **new board**: its columns and every row, in one step.
* `POST /v1/boards/{boardId}/imports/excel` adds rows to an **existing board**.

If anything fails, nothing is created: you never get half a board. Send an `Idempotency-Key` header so a retry does not import twice. A file over the size limit is refused before it is read.

## Files and docs

An item can have attachments. Upload is in two steps: ask for an upload address, send the file, then **finalize**. Download uses a short-lived signed address (`POST /v1/attachments/{id}/signed-url`). Files are stored per organization and are not reachable without that address. Docs take uploads the same way.

## Realtime

Open boards update without a refresh. Work uses a SignalR hub at `/hubs/board`.

* A client first asks for a **hub ticket**: `POST /v1/hub-ticket`, with its normal sign-in. The ticket is valid for 60 seconds and works only for the hub. Your session token is never put in a URL.
* The client joins the groups of the boards it may read. A member only receives events for those boards.
* A board also shows who else is looking at it (presence).
* Most events carry no data. They tell the client to read the board again, so a live update never leaks a value.
* When a member is suspended or removed, their open connection is closed.

<sub>Source: `worksong-ai/worksong:services/work/src/Boardy.Api/Program.cs@9f0684f`, `worksong-ai/worksong:services/work/src/Boardy.Adapters/Http/DirectoryConnectors.cs@9f0684f`, `worksong-ai/worksong:services/work/src/Boardy.Api/Realtime/BoardHub.cs@9f0684f`. Docs version: Worksong 2.0 with Work 1.2.</sub>


This documentation is built and hosted on [Mintlify](https://mintlify.com), a developer documentation platform.