Confluence Source
What it ingests
Page activity from Confluence Cloud — pages and their comments — optionally scoped to specific spaces or narrowed with an extra CQL filter. Confluence Server / Data Center is not yet supported.
Confluence is the document counterpart to the Jira source: Jira carries the tickets, Confluence carries the specs, decisions, and runbooks those tickets point at. Both authenticate with the same Atlassian API token, so one stored credential covers a whole site.
Credential
References a jira_api_token credential by id — the vault type is shared with Jira because Confluence Cloud uses the same Atlassian Cloud API token. In the credentials UI it is labelled Atlassian API token (Jira / Confluence). Together with the account email and site URL (both on the source config below) it forms the Basic-auth pair the source sends on every REST call.
curl -sS -X POST https://your-corveil-host/api/credentials \
-H "Authorization: Bearer <admin>" -H "Content-Type: application/json" \
-d '{"type":"jira_api_token","name":"acme-atlassian-token","secret":"ATATT..."}'If you already created a token for the Jira source, reuse that credential id here rather than storing the same secret twice — rotating it then updates both sources at once.
Config fields
| Key | Required | Notes |
|---|---|---|
site_url | yes | Your Confluence Cloud site URL, e.g. https://acme.atlassian.net. A pasted /wiki/... path is trimmed automatically. |
email | yes | Email of the Atlassian account that owns the API token. |
space_keys | no | Comma-separated space keys, e.g. ENG, OPS. Blank ingests every space the token can read. Personal space keys (~accountid) are accepted. |
cql_filter | no | Optional CQL clauses ANDed into every poll, e.g. label = engineering. Interpolated verbatim into queries scoped to this source's own token/site; a malformed fragment surfaces as a Confluence 400. |
Provider-side setup
- Sign in as the Atlassian account that should own the token.
- Create an API token at id.atlassian.com/manage/api-tokens.
- Make sure that account can view the spaces you want to ingest. Confluence space permissions are separate from Jira project permissions — an account that reads every Jira project may still be missing spaces.
Wire-up
POST /api/sensors
{
"sensor_type": "confluence",
"name": "Acme Confluence",
"config": {
"site_url": "https://acme.atlassian.net",
"email": "integrations@acme.com",
"space_keys": "ENG, OPS"
},
"credentials": { "api_token": "<jira_api_token credential id>" }
}Verify
Run Test connection to confirm the site URL, email, and token authenticate. Once polling, created and updated pages in the selected spaces appear as document events, and their comments as conversation events.
Notes
Entity naming. Confluence guarantees page-title uniqueness only within a space, so page entities are named SPACE/Title (e.g. ENG/Onboarding). Without the prefix, the Onboarding page in every space would collapse onto a single entity.
Occurred-at semantics. A page event is stamped with the version's modification time, recorded as an ingest-fallback occurred-at (eligible for title-date inference) rather than a true source event time — a page titled 2026-08-12 Architecture Review edited months later should anchor on its subject, not the edit. Comments are stamped metadata: a comment's timestamp really is when it was written.
First poll. A new source seeds its watermark to "now" and emits nothing on the first tick, so adding a source does not drag in the entire wiki. Use backfill to ingest history.