---
title: "Connect Granola with an API key"
method: POST
path: "/v1/integrations/granola/connect"
tags: ["integrations"]
---

# Connect Granola with an API key

`POST /v1/integrations/granola/connect`

Connect Granola using a customer-provided API key.

## Request body

- GranolaManualConnectBody — Request body for connecting Granola with an API key.
  - `api_key` string, required — Granola API key
  - `store_name` string, nullable — Optional ingestion store name
  - `store_config` IntegrationStoreConfig — Store and file configuration chosen when connecting a data source. Applied to the ingestion store when the connector creates it and to every imported file. The defaults (contextualization on, high-quality ingestion) give the best retrieval quality and downstream availability. A pre-existing store keeps its own configuration; only the ingestion mode still applies to newly imported files.
    - `metadata_contextualization` boolean — Contextualize chunks with the connector's curated metadata fields
    - `file_contextualization` boolean — Generate an LLM context for each chunk situating it within the full document
    - `ingestion_mode` 'fast' | 'high_quality' — Strategy for adding a file to a store.
  - `sync_schedule_interval` 'off' | 'ten_minutes' | 'hourly' | 'daily' | 'weekly' — Initial periodic sync interval
  - `account_name` string, nullable — Name of the person the API key belongs to
  - `account_email` string, nullable — Email of the person the API key belongs to

## Response `200`

The connected Granola installation

- ConnectorInstallationResponse — Response containing one connected account.
  - `data` ConnectorInstallation, required — A connected account and the store it feeds, described the same way for every connector.
    - `installation_id` string, required — Installation ID
    - `provider` 'google_drive' | 'gmail' | 'slack' | 'granola', required — Connector provider
    - `status` string, required — Installation status
    - `account` ConnectorAccount, required — The third-party account an installation is authorized as.
      - `id` string, required — Provider-side account identifier (email, user ID, or team ID)
      - `name` string, nullable — Human-readable account name
      - `email` string, nullable — Account email, when the provider exposes one
      - `workspace` string, nullable — Workspace or organization the account belongs to, for providers that have one
    - `store_id` string, nullable — Store the installation ingests into
    - `store_name` string, nullable — Name of that store
    - `sync` ConnectorInstallationSync — Account-level sync facts: how many resources are in error, and the last failure of an account-wide job.
      - `failed_resource_count` integer — Resources whose last sync job failed
      - `last_error` string, nullable — Last failure of a job covering the whole account, such as a changes sync
      - `last_error_operation` string, nullable — Which account-wide job failed
      - `last_error_at` string, date-time, nullable — When it failed

## Other responses

- `409` — The external account is already connected to a different Mixedbread organization
- `422` — The request failed validation, or the credentials it carries were rejected

## Changes

- **2026-09-15** `957bf8ec8df8` — 2 warning
  - added the new `store_frozen_error` enum value to the `code/anyOf[subschema #1: ErrorCode]/` response property for the response status `409`
  - added the new `store_frozen_error` enum value to the `code/anyOf[subschema #1: ErrorCode]/` response property for the response status `422`
- **2026-09-10** `adde8ecfa74f` — 1 warning, 4 info
  - removed the optional property `detail` from the response with the `422` status
  - added the non-success response with the status `409`
  - added the required property `code` to the response with the `422` status
  - added the required property `message` to the response with the `422` status
  - …1 more
- **2026-09-08** `ce403656bc18` — 9 breaking, 4 warning, 5 info
  - removed the required property `data/created_at` from the response with the `200` status
  - removed the required property `data/external_account_id` from the response with the `200` status
  - removed the required property `data/external_account_name` from the response with the `200` status
  - removed the required property `data/id` from the response with the `200` status
  - …14 more
- **2026-09-07** `1a6549d3e64d` — 2 info
  - added the new optional request property `account_email`
  - added the new optional request property `account_name`

[Change history](https://skmtc.dev/mixedbread/apis/mxbai-omni/changes/v1/integrations/granola/connect/post.md)

---

[API](https://skmtc.dev/mixedbread/apis/mxbai-omni.md) · [All operations](https://skmtc.dev/mixedbread/apis/mxbai-omni/llms.txt) · [OpenAPI document](https://skmtc.dev/mixedbread/apis/mxbai-omni/revisions/427a5c58f68a?raw)
