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

# Bundled sources

> Data sources that ship with Coral.

Coral supports connecting to some data sources out of the box. These bundled specs live in [sources/core](https://github.com/withcoral/coral/tree/main/sources/core).<br />
If the source you need is not available, you can extend Coral by [writing a custom source spec](/docs/guides/write-a-custom-source).

<Tip>
  Run `coral source discover` to see the bundled sources available in your
  build.
</Tip>

## Bundled data sources

| Source                                     | Backend | Description                                                                                                                                                       |
| ------------------------------------------ | ------- | ----------------------------------------------------------------------------------------------------------------------------------------------------------------- |
| [claude](#claude)                          | `file`  | Query local Claude Code transcript events and prompt history from \~/.claude.                                                                                     |
| [clickup](#clickup)                        | `http`  | Query tasks, spaces, folders, lists, goals, time entries, comments, views, tags, custom fields, teams, and users from ClickUp.                                    |
| [cloudwatch\_logs](#cloudwatch_logs)       | `http`  | Query Amazon CloudWatch Logs groups, streams, and events.                                                                                                         |
| [cloudwatch\_metrics](#cloudwatch_metrics) | `http`  | Query Amazon CloudWatch metrics and monitoring metadata.                                                                                                          |
| [codex](#codex)                            | `file`  | Query local Codex session event logs from \~/.codex/sessions.                                                                                                     |
| [confluence](#confluence)                  | `http`  | Query spaces, pages, blog posts, comments, attachments, labels, and related metadata from Confluence Cloud.                                                       |
| [datadog](#datadog)                        | `http`  | Query monitors, events, incidents, dashboards, hosts, services, APM dependencies, downtimes, SLOs, synthetic tests, users, logs, spans, and metrics from Datadog. |
| [github](#github)                          | `http`  | Query repositories, issues, pull requests, workflows, organizations, users, teams, and API metadata from GitHub (Cloud or Enterprise).                            |
| [gitlab](#gitlab)                          | `http`  | Query projects, groups, issues, merge requests, pipelines, deployments, packages, users, and instance metadata from GitLab (Cloud or self-hosted).                |
| [gmail](#gmail)                            | `http`  | Query Gmail profile metadata, labels, messages, threads, drafts, history, filters, and send-as aliases from the authenticated mailbox.                            |
| [google\_calendar](#google_calendar)       | `http`  | Query Google Calendar calendars, events, user settings, and color palettes.                                                                                       |
| [grafana](#grafana)                        | `http`  | Query dashboards, folders, datasources, alert rules, annotations, contact points, teams, users, and dashboard panels from Grafana (Cloud or self-hosted).         |
| [incident\_io](#incident_io)               | `http`  | Query incidents, alerts, escalations, schedules, status pages, workflows, teams, users, and catalog resources from incident.io.                                   |
| [intercom](#intercom)                      | `http`  | Query contacts, companies, conversations, admins, tags, teams, segments, data attributes, collections, articles, and ticket types from Intercom.                  |
| [jira](#jira)                              | `http`  | Query projects, issues, comments, worklogs, versions, components, issue types, priorities, and related metadata from Jira Cloud.                                  |
| [launchdarkly](#launchdarkly)              | `http`  | Query projects, feature flags, environments, segments, members, roles, and audit logs from LaunchDarkly.                                                          |
| [linear](#linear)                          | `http`  | Query Linear teams, users, issues, issue relations, projects, project milestones, cycles, initiatives, initiative-project links, labels, and attachments.         |
| [notion](#notion)                          | `http`  | Query pages, data sources, databases, blocks, users, templates, and properties from Notion.                                                                       |
| [openobserve](#openobserve)                | `http`  | Query streams, logs, metrics, and traces from OpenObserve (Cloud or self-hosted).                                                                                 |
| [pagerduty](#pagerduty)                    | `http`  | Query incidents, services, teams, users, schedules, oncalls, escalation policies, log entries, change events, status pages, and workflows from PagerDuty.         |
| [posthog](#posthog)                        | `http`  | Query events, persons, sessions, feature flags, experiments, insights, dashboards, cohorts, projects, organizations, and related PostHog resources.               |
| [sentry](#sentry)                          | `http`  | Query issues, events, projects, releases, deployments, teams, and members from Sentry.                                                                            |
| [slack](#slack)                            | `http`  | Query channels, messages, thread replies, and users from your Slack workspace.                                                                                    |
| [statusgator](#statusgator)                | `http`  | Query status boards, monitors, incidents, history, service components, subscribers, users, and monitoring regions from StatusGator.                               |
| [stripe](#stripe)                          | `http`  | Query customers, charges, subscriptions, invoices, payments, products, prices, refunds, disputes, payouts, balance transactions, and events from Stripe.          |
| [wandb](#wandb)                            | `http`  | Query the authenticated viewer, projects, runs, and sampled run metrics from Weights & Biases (W\&B Cloud or self-hosted).                                        |

## Supported data source types

Supported sources fall into two categories.

* **HTTP API** — Coral translates SQL queries into paginated HTTP requests against a provider's REST API.
* **File-backed** — Coral reads Parquet, JSONL, JSON, or CSV files directly.

## Upgrading bundled sources

To update bundled sources, upgrade the Coral binary. Coral resolves each bundled manifest from the current binary at validate or query time, so spec fixes and newly required inputs are picked up automatically, you don't need to remove and re-add the source. Your configured variables and secrets stay in local state across upgrades.

## Configure a source

Each source has its own set of interactive inputs — API tokens, base URLs, or
other per-install configuration.

### `claude`

No configuration required.

### `clickup`

`CLICKUP_API_TOKEN` (required)

Use a personal ClickUp API token that begins with `pk_`.
The token inherits your account's permissions and provides access
to the workspaces you belong to.

If you're logged in to ClickUp, you can go to
[App Settings](https://app.clickup.com/settings/apps) to find your token.
For more details, see the
[ClickUp authentication guide](https://developer.clickup.com/docs/authentication).

### `cloudwatch_logs`

`AWS_REGION` (optional)<br />
default `us-east-1`

AWS region for CloudWatch Logs API requests, for example `us-east-1`.

`AWS_ENDPOINT_SUFFIX` (optional)<br />
default `amazonaws.com`

AWS endpoint DNS suffix. Keep `amazonaws.com` for standard AWS
regions. Use the appropriate suffix for other partitions.

`AWS_ACCESS_KEY_ID` (required)

AWS access key ID with CloudWatch Logs read permissions.

`AWS_SECRET_ACCESS_KEY` (required)

AWS secret access key.
Coral does not read your AWS CLI profile, AWS SSO cache, or
`AWS_PROFILE` at query time for this bundled source.

### `cloudwatch_metrics`

`AWS_REGION` (optional)<br />
default `us-east-1`

AWS region for CloudWatch API requests, for example `us-east-1`.

`AWS_ENDPOINT_SUFFIX` (optional)<br />
default `amazonaws.com`

AWS endpoint DNS suffix. Keep `amazonaws.com` for standard AWS
regions. Use the appropriate suffix for other partitions.

`AWS_ACCESS_KEY_ID` (required)

AWS access key ID with the CloudWatch read permissions.

`AWS_SECRET_ACCESS_KEY` (required)

AWS secret access key.
Coral does not read your AWS CLI profile, AWS SSO cache, or
`AWS_PROFILE` at query time for this bundled source.

### `codex`

No configuration required.

### `confluence`

`CONFLUENCE_BASE_URL` (required)

Base URL of your Atlassian Cloud site, without the `/wiki` suffix
(for example `https://acme.atlassian.net`).

`CONFLUENCE_EMAIL` (required)

Email address for your Atlassian account.

`CONFLUENCE_API_TOKEN` (required)

Create an API token at
[Atlassian API token settings](https://id.atlassian.com/manage-profile/security/api-tokens).

### `datadog`

`DD_SITE` (optional)<br />
default `datadoghq.com`

Datadog site host for your org (for example `datadoghq.com`,
`datadoghq.eu`, `us3.datadoghq.com`, `us5.datadoghq.com`,
`ap1.datadoghq.com`, or `ddog-gov.com`).

For site and region details, see the
[Datadog site guide](https://docs.datadoghq.com/getting_started/site/).

`DD_API_KEY` (required)

Use a Datadog API key. This key is required for all Datadog API
requests.

See [Datadog API keys](https://docs.datadoghq.com/account_management/api-app-keys/#api-keys).

`DD_APPLICATION_KEY` (required)

Use a Datadog application key with read access to the resources
you plan to query (for example monitors, incidents, logs, APM,
and metrics).

See [Datadog application keys](https://docs.datadoghq.com/account_management/api-app-keys/#application-keys).

### `github`

`GITHUB_API_BASE` (optional)<br />
default `https://api.github.com`

Base URL for the GitHub REST API. Keep the default for GitHub
Cloud; for GitHub Enterprise Server, use
`https://<host>/api/v3`.

`GITHUB_TOKEN` (required)

Connect with GitHub OAuth or paste a personal access token. The
OAuth methods request the `repo`, `read:org`, `read:user`, and
`user:email` scopes.

Credential methods:

* **Connect with GitHub device code** — Signs you in through GitHub, with no app setup or client secret needed. Requests the `repo`, `read:org`, `read:user`, and `user:email` scopes. To use your own GitHub app instead, set GITHUB\_OAUTH\_CLIENT\_ID to its Client ID and enable device flow on the app.
* **Connect with GitHub OAuth app** — Uses your own GitHub OAuth app. Register one with its Authorization callback URL set to `http://127.0.0.1:53682/oauth/callback`, then enter the app's Client ID and Client secret below. Requests the `repo`, `read:org`, `read:user`, and `user:email` scopes. See [GitHub's guide](https://docs.github.com/en/apps/creating-github-apps/registering-a-github-app).
* **Paste token** — If you use GitHub CLI, run `gh auth token`. Otherwise create a personal access token with read access to the repositories and organizations you query; some admin tables need elevated scopes. Works with GitHub Enterprise Server. See [GitHub PAT docs](https://docs.github.com/en/authentication/keeping-your-account-and-data-secure/managing-your-personal-access-tokens).

### `gitlab`

`GITLAB_API_BASE` (optional)<br />
default `https://gitlab.com`

Base URL of your GitLab instance. Keep the default for
`gitlab.com`; for self-hosted GitLab, use your instance URL
(for example `https://gitlab.example.com`).

`GITLAB_TOKEN` (required)

Connect with GitLab OAuth or paste a personal access token. Both
need the `read_api` scope; some admin tables require elevated scopes.

Credential methods:

* **Connect with GitLab.com OAuth** — Sign in to GitLab.com in your browser. Requests the `read_api` scope. To use your own GitLab OAuth application, set GITLAB\_OAUTH\_CLIENT\_ID to its Application ID.
* **Paste token** — Create a personal access token with the `read_api` scope; some admin tables need elevated scopes. See [GitLab PAT docs](https://docs.gitlab.com/user/profile/personal_access_tokens/).

### `gmail`

`GMAIL_USER_ID` (optional)<br />
default `me`

Gmail user ID to query. Use `me` for the authenticated Google
account, or an email address when the token has delegated access.

`GMAIL_TOKEN` (required)

Connect with Google OAuth or paste an access token. Either way the
token needs the `https://www.googleapis.com/auth/gmail.readonly` scope.

Credential methods:

* **Connect with Google** — Enable the Gmail API in a Google Cloud project and create an OAuth 2.0 client of type "Desktop app", then enter its Client ID and Client secret below. Requests read-only access with the `https://www.googleapis.com/auth/gmail.readonly` scope. See [Google OAuth client setup](https://support.google.com/cloud/answer/6158849).
* **Paste access token** — Paste a read-only OAuth 2.0 access token issued with the `https://www.googleapis.com/auth/gmail.readonly` scope.

### `google_calendar`

`GOOGLE_CALENDAR_API_BASE` (optional)<br />
default `https://www.googleapis.com/calendar/v3`

Base URL for the Google Calendar API. Keep the default unless you are
testing against a mock Calendar-compatible API.

`GOOGLE_CALENDAR_ACCESS_TOKEN` (required)

Connect with Google OAuth or paste an access token. Either way the
token needs the read-only
`https://www.googleapis.com/auth/calendar.readonly` scope.

Credential methods:

* **Connect Google Calendar** — Enable the Google Calendar API in a Google Cloud project and create an OAuth 2.0 client of type "Desktop app", then enter its Client ID and Client secret below. Requests read-only access with the `https://www.googleapis.com/auth/calendar.readonly` scope. See [Google OAuth client setup](https://support.google.com/cloud/answer/6158849).
* **Paste access token** — Paste a read-only OAuth 2.0 access token issued with the `https://www.googleapis.com/auth/calendar.readonly` scope.

### `grafana`

`GRAFANA_URL` (required)

Base URL of your Grafana instance (e.g. `https://my-org.grafana.net`).
For self-hosted Grafana, use your instance URL
(e.g. `https://grafana.example.com`).

`GRAFANA_TOKEN` (required)

Create an Org Admin service account and generate a token for it.
This provides read access for all the bundled tables.
See [Grafana service account docs](https://grafana.com/docs/grafana/latest/administration/service-accounts/).

### `incident_io`

`INCIDENT_IO_API_KEY` (required)

Create an API key with read permissions for the resources you
plan to query.
See [incident.io API key docs](https://docs.incident.io/admin/api-keys).

### `intercom`

`INTERCOM_ACCESS_TOKEN` (required)

Create a private app and copy its access token. The token
provides read access to your workspace data.
See [Intercom authentication docs](https://developers.intercom.com/docs/build-an-integration/learn-more/authentication).

### `jira`

`JIRA_BASE_URL` (required)

Base URL of your Jira Cloud site (for example
`https://acme.atlassian.net`).

`JIRA_EMAIL` (required)

Email address for your Atlassian account.

`JIRA_API_TOKEN` (required)

Create an API token at
[Atlassian API token settings](https://id.atlassian.com/manage-profile/security/api-tokens).

### `launchdarkly`

`LAUNCHDARKLY_API_BASE` (optional)<br />
default `https://app.launchdarkly.com`

For self-hosted LaunchDarkly, set to your relay or app host

`LAUNCHDARKLY_TOKEN` (required)

Create an API access token with the Reader role, which gives
read-only access to all tables.
See [LaunchDarkly API token docs](https://launchdarkly.com/docs/home/account/api-create).

### `linear`

`LINEAR_API_KEY` (required)

Create a personal API key with the Read permission, which gives
read-only access to all tables. You can optionally scope the key
to specific teams.
See [Linear API key docs](https://linear.app/docs/api-and-webhooks#api-keys).

### `notion`

`NOTION_API_KEY` (required)

Notion doesn't ship a workspace-wide read token. You must create a
connection on a workspace you own, then grant it access to the pages
and databases you want to query.

Create the connection at [notion.so/developers](https://www.notion.so/developers)
and copy its internal integration token. Then open the integration's
content access settings and give it edit access to each page or
database you want Coral to read.

The token needs read content capabilities for most tables. See the
[Notion authorization docs](https://developers.notion.com/guides/get-started/authorization).

### `openobserve`

`OPENOBSERVE_URL` (required)

Base URL of your OpenObserve instance (for example
`https://api.openobserve.ai` or `http://localhost:5080`).

`OPENOBSERVE_ORG` (optional)<br />
default `default`

Organization slug in OpenObserve. Keep the default `default` for
single-tenant setups.

`OPENOBSERVE_USERNAME` (required)

OpenObserve username or email for HTTP Basic auth.

`OPENOBSERVE_PASSWORD` (required)

OpenObserve password for HTTP Basic auth.

### `pagerduty`

`PAGERDUTY_API_TOKEN` (required)

Use a read-only General Access REST API key or a personal User
Token REST API key. General Access keys require admin privileges
to create; User Token keys can be created by any user but are
scoped to that user's permissions.
See [PagerDuty API access docs](https://developer.pagerduty.com/docs/authentication).

### `posthog`

`POSTHOG_API_BASE` (optional)<br />
default `https://us.posthog.com`

Base URL of your PostHog instance. Use `https://us.posthog.com`
for US Cloud, `https://eu.posthog.com` for EU Cloud, or your
self-hosted URL.

`POSTHOG_API_KEY` (required)

Create a personal API key and select only the read scopes for
the resources you plan to query.
See [PostHog API docs](https://posthog.com/docs/api).

### `sentry`

`SENTRY_ORG` (required)

Your Sentry organization slug (found in the Sentry URL after `/organizations/`)

`SENTRY_TOKEN` (required)

Connect with Sentry OAuth or paste an internal-integration token.
Both need the `org:read`, `event:read`, `member:read`, `project:read`,
`project:releases`, and `team:read` scopes.

Credential methods:

* **Connect with Sentry device flow** — Sign in to Sentry with a device code. Enter your Sentry OAuth app's Client ID when prompted. Requests the `org:read`, `event:read`, `member:read`, `project:read`, `project:releases`, and `team:read` scopes. See [Sentry auth docs](https://docs.sentry.io/api/auth/).
* **Paste auth token** — Create an internal integration and paste its token, granting the `org:read`, `event:read`, `member:read`, `project:read`, `project:releases`, and `team:read` read scopes. See [Sentry auth docs](https://docs.sentry.io/api/auth/).

### `slack`

`SLACK_TOKEN` (required)

Slack has no general-purpose API for reading messages, so you need
a Slack app with an OAuth token. Both methods use these scopes:
`channels:read`, `channels:history`, `groups:read`,
`groups:history`, `users:read`, `users:read.email`. See the
[Slack app setup guide](https://docs.slack.dev/app-management/quickstart-app-settings).

Credential methods:

* **Connect with Slack** — Create a [user-token app](https://api.slack.com/apps?new_app=1\&manifest_json=%7B%22display_information%22%3A%7B%22name%22%3A%22Coral%22%7D%2C%22oauth_config%22%3A%7B%22redirect_urls%22%3A%5B%22http%3A%2F%2Flocalhost%3A53682%2Foauth%2Fcallback%22%5D%2C%22scopes%22%3A%7B%22user%22%3A%5B%22channels%3Ahistory%22%2C%22groups%3Aread%22%2C%22channels%3Aread%22%2C%22groups%3Ahistory%22%2C%22users%3Aread%22%2C%22users%3Aread.email%22%5D%7D%2C%22pkce_enabled%22%3Atrue%7D%2C%22settings%22%3A%7B%22org_deploy_enabled%22%3Afalse%2C%22socket_mode_enabled%22%3Afalse%2C%22token_rotation_enabled%22%3Afalse%2C%22is_mcp_enabled%22%3Afalse%7D%7D), which pre-fills the scopes and redirect URL, then enter its Client ID below and authorize in your browser. Reads the channels the authorizing user belongs to.
* **Paste Slack OAuth Token** — Paste the OAuth token from your app's OAuth & Permissions page. If you don't have an app, create a [bot-token app](https://api.slack.com/apps?new_app=1\&manifest_json=%7B%22display_information%22%3A%7B%22name%22%3A%22Coral%22%2C%22description%22%3A%22Coral+data+access%22%7D%2C%22oauth_config%22%3A%7B%22scopes%22%3A%7B%22bot%22%3A%5B%22channels%3Aread%22%2C%22groups%3Aread%22%2C%22channels%3Ahistory%22%2C%22groups%3Ahistory%22%2C%22users%3Aread%22%2C%22users%3Aread.email%22%5D%7D%7D%2C%22features%22%3A%7B%22bot_user%22%3A%7B%22display_name%22%3A%22Coral%22%2C%22always_online%22%3Afalse%7D%7D%7D), install it, then paste its bot token. Reads the channels the bot has been added to.

### `statusgator`

`STATUSGATOR_API_TOKEN` (required)

Create a read-only API token from the API menu in your
StatusGator dashboard. Only organization admins can generate
tokens.
See [StatusGator API docs](https://statusgator.com/api/v3/docs).

### `stripe`

`STRIPE_API_KEY` (required)

Create a restricted API key (`rk_test_` or `rk_live_`) with Read
permissions for the resources you plan to query.
You can also use secret keys (`sk_test_` or `sk_live_`), but
restricted keys limit access to only the required endpoints.
See [Stripe API key docs](https://docs.stripe.com/keys).

### `wandb`

`WANDB_BASE_URL` (optional)<br />
default `https://api.wandb.ai`

Base URL of your W\&B instance. Use `https://api.wandb.ai` for W\&B
Cloud (the default) or your self-hosted host (for example
`https://wandb.example.com`). The GraphQL endpoint is at `/graphql`.

`WANDB_API_KEY` (required)

Personal API key for W\&B. Generate one at
[https://wandb.ai/authorize](https://wandb.ai/authorize) (or
`https://<your-host>/authorize` for self-hosted). Coral uses the
key for HTTP Basic auth with username `api`.

## Don't see what you need?

The bundled set is growing. If your data source is not listed, [write a custom source](/docs/guides/write-a-custom-source), or reach out to us via [Discord](https://discord.gg/h9aun8KpFF) or [GitHub](https://github.com/withcoral/coral/issues).
