Listen
0:00 / ~3:06
First-party shims for third-party providers. Connections are per-user. Every provider exposes /oauth/start and /oauth/callback, and the provider catalog is available at GET /api/integrations.
/api/integrations/api/integrations/{provider}/api/integrations/{provider}/oauth/start/api/integrations/{provider}/oauth/callback/api/integrations/{provider}/testtest performs a no-op call to verify the stored credential is still valid; non-200 results mark the connection as error.
/api/integrations/gmail/inbox/status/api/integrations/gmail/inbox/messages/api/integrations/gmail/inbox/sendThese are the endpoints the Inbox's Gmail tab actually calls, and the ones to prefer. A user can be connected through either the AngelSend bridge or native Google OAuth; the resolver tries AngelSend first and falls back to native, so one set of endpoints serves both. Pass ?id= to /messages to fetch a single message with its body (the list returns envelopes only).
has_gmail_read: false means the stored token predates the gmail.readonly scope — the user must reconnect, not connect. Surfacing that as "not connected" sends them down the wrong path./api/integrations/gmail/profile/api/integrations/gmail/messages/api/integrations/gmail/messages/{id}/api/integrations/gmail/watch/api/integrations/gmail/push/api/integrations/google-calendar/calendars/api/integrations/google-calendar/events/api/integrations/google-calendar/watch/register/api/integrations/google-drive/files/api/integrations/google-drive/changes/api/integrations/slack/channels/api/integrations/slack/messages/api/integrations/slack/events/api/integrations/asana/tasks/api/integrations/asana/webhooks/register/api/integrations/telegram/link/api/integrations/telegram/webhook/api/integrations/angelsend/gmail/messages/api/integrations/angelsend/gmail/send/api/integrations/cloudcode/projects/api/integrations/multiverseai/agents/api/integrations/multiverseai/workflows/{id}/execute/api/integrations/scrappy/webhooks/api/integrations/protonmail/messages/api/integrations/protonmail/messagesReads synced envelopes from the local cache (the IMAP poller stores envelopes — bodies aren't mirrored) and sends via SMTP through the ProtonMail Bridge. The credential is an IMAP/SMTP bundle, not an OAuth token, so this only works where the server can reach a running Bridge instance (desktop / self-hosted).
/api/integrations/microsoft365/messages/api/integrations/microsoft365/messages/api/integrations/microsoft365/events/api/integrations/microsoft365/eventsMail, calendar, and contacts over the Microsoft Graph API, against the common tenant (work/school and personal accounts). Mail list reads come from synced envelopes; pass ?id= to fetch a body live. Calendar events are read live from calendarView.
/api/integrations/icloud/messages/api/integrations/icloud/messages/api/integrations/icloud/events/api/integrations/icloud/eventsApple publishes no REST API, so iCloud rides the open protocols: IMAP and SMTP for Mail, CalDAV for Calendar, CardDAV for Contacts. The credential is an Apple ID plus an app-specific password(which requires 2FA on the Apple account). Unlike ProtonMail's Bridge these endpoints are public, so this works from a cloud deployment. Mail reads are envelope-only; calendar events are read live over CalDAV.
Both surfaces return 412 when iCloud is not connected. iCloud Drive and Notes have no API and are out of scope.
/api/integrations/notion/connect-token/api/integrations/notion/import/api/integrations/notion/importConnect with OAuth or by pasting an internal integration token. The import endpoint lists databases and imports one as tasks; re-running it skips rows already imported rather than duplicating them.
ClearBooks is connected with a per-user cb_ API key through the generic PUT /api/integrations/clearbooks route. On connect the key is verified against the ClearBooks /me endpoint and the returned scopes, organization id, and tier are persisted on the integration metadata so the UI knows which surfaces are reachable without re-probing.
Consumption (invoices, payments, customers, vendors, bills, journals, ACH, bank accounts, GL codes, cap table, metrics, forecasts) flows through the AI agent tool surface — 25 ClearBooks tools gated behind the Finance persona scope — not dedicated REST endpoints. List/sync pulls run on the integrations-sync cron and mirror invoices, customers, and transactions into the integration cache.
docs/openapi.yaml under the Integrations tag.