Confluence Server Connector
Genly connects to pages, blog posts, attachments, comments, spaces, labels, likes, and related metadata in Confluence Server. It parses and indexes pages, blog posts, and attachments while inheriting source-system permissions during search.
- Currently supported
- Confluence Server 6.5
- Sync mechanism
- Full crawl + webhook incremental
- Access boundary
- Inherited source permissions
- Data location
- Customer private environment
1. Key capabilities
- Genly crawls Confluence pages (including parent/child hierarchy), blog posts, labels, attachments, comments, and related data.
- Genly respects all user access permissions so users only see search results for documents they are allowed to access. When a user clicks a search result, they are redirected to the Confluence web application, which enforces permissions.
- The connector uses a hybrid sync model of "full crawl + webhook incremental listening + permission compensation scans." For changes to pages, blogs, attachments, labels, likes, content permissions, space permissions, and user/group relationships, the system can collect and process updates near-real-time after events fire. Content changes continue through parsing and indexing, and search visibility depends on parse, ingest, and index task completion. New or edited comments sync as interaction data attached to pages or blogs and appear in content details, but comment bodies are not independently full-text indexed. Content deleted before it was ever synced cannot be re-fetched from Confluence and can only be cleaned up from historical snapshots.
- All data is stored in the customer's private environment, ensuring no data leaves the customer environment.
- Genly uses Atlassian's standard Confluence REST API to retrieve all data.
- Confluence 6.5 has no native webhook capability. To enable near-real-time sync, Genly provides a proprietary Confluence plugin that listens to Confluence events to deliver webhook functionality.
2. Supported versions
- Supports Confluence Server 6.5. Contact your Confluence administrator for version information.
- Genly plans to support Confluence Data Center/Cloud.
3. Crawl and index scope
The Genly Confluence connector crawls three categories of data—content, identity, and activity—to keep indexes fast, comprehensive, and securely manageable.
3.1 Content
- Crawls pages, blog posts, spaces, attachments, page comments, labels, likes, and related data; indexes pages, blog posts, attachments, and related content.
- Pages keep their original hierarchy; blog posts are organized by year and month. Both are crawled through standard content list APIs.
- If the configured connector account can access restricted pages, those pages can be indexed while search results still enforce permissions.
3.2 Activity data and webhooks
Genly handles create, update, delete, move, and permission-change events for fast updates. The tables below list change events supported by the Genly plugin.
3.2.1 Content events
| Event ID | Confluence event class | Description |
|---|---|---|
confluence_page_created | PageCreateEvent | Page created |
confluence_page_updated | PageUpdateEvent | Page updated |
confluence_page_trashed | PageTrashedEvent | Page moved to trash |
confluence_blogpost_created | BlogPostCreateEvent | Blog post created |
confluence_blogpost_updated | BlogPostUpdateEvent | Blog post updated |
confluence_blogpost_trashed | BlogPostTrashedEvent | Blog post moved to trash |
confluence_attachment_created | AttachmentCreateEvent | Attachment created |
confluence_attachment_updated | AttachmentUpdateEvent | Attachment updated |
confluence_attachment_removed | AttachmentRemoveEvent | Attachment removed |
confluence_comment_created | CommentCreateEvent | Comment created |
confluence_comment_updated | CommentUpdateEvent | Comment updated |
confluence_comment_removed | CommentRemoveEvent | Comment removed |
confluence_like_created | LikeCreatedEvent | Like added |
confluence_like_removed | LikeRemovedEvent | Like removed |
3.2.2 Space, label, and permission events
| Event ID | Confluence event class | Description |
|---|---|---|
confluence_space_created | SpaceCreateEvent | Space created |
confluence_space_removed | SpaceRemoveEvent | Space removed |
confluence_label_added | LabelAddEvent | Label added |
confluence_label_removed | LabelRemoveEvent | Label removed |
confluence_content_permission_changed | ContentPermissionEvent | Content permission changed |
confluence_space_permission_saved | SpacePermissionSaveEvent | Space permission saved |
confluence_space_permission_removed | SpacePermissionRemoveEvent | Space permission removed |
3.2.3 User, group, and membership events
| Event ID | Event class | Description |
|---|---|---|
confluence_user_created | UserCreateEvent / UserCreatedEvent | User created |
confluence_user_removed | UserRemoveEvent | User removed |
confluence_user_deactivated | UserDeactivateEvent | User deactivated |
confluence_user_reactivated | UserReactivateEvent | User reactivated |
confluence_user_profile_picture_updated | UserProfilePictureUpdateEvent | Profile picture updated |
confluence_user_renamed | DirectoryUserRenamedEvent | User renamed |
confluence_user_signup | UserSignupEvent | User signed up |
crowd_user_email_changed | UserEmailChangedEvent | Crowd user email changed |
crowd_user_edited | UserEditedEvent | Crowd user profile edited |
confluence_group_created | GroupCreateEvent / GroupCreatedEvent | Group created |
confluence_group_removed | GroupRemoveEvent / GroupDeletedEvent | Group removed |
crowd_group_updated | GroupUpdatedEvent | Crowd group updated |
crowd_group_membership_created | GroupMembershipCreatedEvent | Group membership added |
crowd_group_membership_deleted | GroupMembershipDeletedEvent | Group membership removed |
3.3 Identity data
- Crawls all Confluence user information, including usernames, account names, and email addresses.
- When Confluence version limitations cause user records to diverge from the identity provider, the Genly admin console also supports manual person matching.
4. Known limitations
- Comments and likes are not indexed, but related comments can be found by searching the commented page or blog.
- Deleted pages, blogs, attachments, spaces, and similar objects cannot be crawled.
- After permissions are revoked, the connector account may no longer read restricted pages, blogs, or attachments. The system can refresh visibility through permission events, but re-fetching body content or attachments may fail if the account lacks access.
- For changes that occurred before deletion but were not delivered by webhook or processed while the connector was offline, the system can only detect differences during the next full crawl or from historical snapshots. If an object was deleted before the full crawl, its content can no longer be fetched.
- After a user, group, or external directory object is deleted, detail APIs may no longer return complete information. Organization sync tries to delete or unlink using usernames, group names, and historical org data from events, but cannot reconstruct full records for objects that no longer exist.
5. Update frequency
| Data category | Crawl frequency | Webhook incremental capability | Notes |
|---|---|---|---|
| Identity data | Every 12–24 hours | Supported | Includes users, groups, and memberships. Webhooks handle user/group create/delete and membership add/remove. Scheduled crawls calibrate external directory drift, missed events, and historical baselines. For frequent org changes or strong permission dependencies, every 12 hours is recommended; once daily is sufficient for typical scenarios. |
| Content data (pages/blog posts/attachments/comments/likes/labels) | Every 24 hours (adjusted by data volume) | Supported | Includes pages, blogs, attachments, comments, likes, and labels. Page, blog, and attachment create/update/delete can be triggered near-real-time via webhooks. Comments, likes, and labels refresh as attached data when parent content is re-fetched. Full crawls discover missed webhooks, backfill metadata, and reconcile deletion state. |
| Space permissions | No dedicated full crawl for space permissions alone | Supports triggering space backfill | There is no scheduled full crawl task scoped only to space permissions. Space permission changes trigger permission backfill for content in that space via webhooks, ultimately affecting page/blog-level visibility. Completion time depends on the number of pages, blogs, and attachments in the space and Confluence API response speed. |
| Content permissions | Snapshot during document full crawl; permission reconciliation queue processed every 1–3 hours | Supported | Page/blog permission changes can trigger single-content refresh via webhooks. Permission reconciliation does not re-enumerate all space or content permissions; it consumes the page-level permission scan queue written during document ingestion and re-fetches permission snapshots for queued content. |
In this table, "webhook incremental" means the system starts collecting and processing changes after an event fires—it does not mean users immediately see final search results. Content changes still require file upload, metadata ingestion, parsing, and indexing. Searchable time depends on queue backlog, file size, parse duration, and index service throughput.
6. How crawling works
The crawler follows traditional crawl strategies, using APIs and the approaches below to fetch and update data:
- Identity crawl:Updates and adds people data, including users, accounts, and email information.
- Webhook:Messages sent by the application to notify Genly of changes in near-real-time; Genly then starts a crawl or picks up the change on the next crawl.
- Content crawl:Full crawl of the application's entire defined scope.
7. Required permissions
The user configuring this connector must have administrator permissions. The Confluence account used must have access to the content being synced.
8. Setup
Follow these steps to connect Confluence Server to Genly.
8.1 Create a service account for Genly
- Sign in to Confluence as an administrator.
- Go to User management.
- Create a user with any name, email, and password.
- Click Edit groups.
- Add the service account to confluence-administrators.
8.2 Create a Confluence data source
- In the Genly admin console, create a Confluence data source and enter the server base URL on the setup page—for example, https://confluence.mydomain.com.
- Enter the username and password created in step 8.1.
- Click Test connection to verify connectivity to the Confluence instance.
- Click Save to create the Confluence data source.
8.3 Create a Confluence identity connector
- In the Genly admin console, open People & Organization and click Sync from other apps.
- Click Add people sync, choose Confluence, and select the Confluence data source instance in the dialog.
- Click Create to finish creating the identity connector.
8.4 Install the Confluence plugin and create the Confluence connector
- In the Genly admin console, open Connectors and click Add connector.
- Choose Confluence, click Next, and select the Confluence data source instance.
- On the confirm connection step, click [Plugin] to download the Confluence plugin.
- In the Confluence admin console, open the plugin management page, upload, and install the Confluence plugin.
- Confirm that Atlassian WebHooks Genly Plugin is installed and enabled.
- In the Genly admin console, click Test connection, then Next. Select specific spaces or all spaces in Confluence to sync, check the content types to sync below, and create a flat label taxonomy in Knowledge Labels first if you need label sync.
- Click Next to finish creating the Confluence connector.
9. Confluence API endpoints
| Purpose | Path | Method |
|---|---|---|
| Verify Confluence connectivity and authentication | /rest/api/user/current | GET |
| List spaces for full crawl enumeration | /rest/api/space?start={start}&limit={limit} | GET |
| List pages in a space | /rest/api/space/{spaceKey}/content/page?start={start}&limit={limit}&expand=body.storage,body.export_view,version,history,space,ancestors | GET |
| List blog posts in a space | /rest/api/space/{spaceKey}/content/blogpost?start={start}&limit={limit}&expand=body.storage,body.export_view,version,history,space,ancestors | GET |
| Fetch page/blog details, body, version, history, space, and ancestors | /rest/api/content/{id}?expand=body.storage,body.export_view,version,history,space,ancestors | GET |
| Fetch content restrictions for view and edit permissions | /rest/api/content/{id}/restriction/byOperation | GET |
| List content attachments for ingestion and event enrichment | /rest/api/content/{id}/child/attachment?start={start}&limit={limit}&expand=version,history,container,metadata,extensions | GET |
| Download attachment binary content | {downloadUrl},通常来自附件 _links.download,例如 /download/attachments/... | GET |
| List content labels | /rest/api/content/{id}/label?start={start}&limit={limit} | GET |
| List comments and comment bodies | /rest/api/content/{id}/child/comment?start={start}&limit={limit}&expand=body.storage,version | GET |
| List content likes | /rest/likes/1.0/content/{id}/likes | GET |
| Query all users via CQL for org sync and anonymous permission fallback | /rest/api/search?cql=type=user&start={start}&limit={limit} | GET |
| Fetch a user for username to userKey mapping | /rest/api/user?username={username} | GET |
| Fetch user profile by key or username in org sync flows | /rest/api/user?key={userKey} 或 /rest/api/user?username={username} | GET |
| Fetch groups for a user to refresh membership | /rest/api/user/memberof?key={userKey} 或 /rest/api/user/memberof?username={username} | GET |
| Fetch mobile profile details such as email and avatar | /rest/mobile/1.0/profile/{username} | GET |
| List groups for org sync and user fallback enumeration | /rest/api/group?start={start}&limit={limit} | GET |
| List members of a group | /rest/api/group/{groupName}/member?start={start}&limit={limit} | GET |
| Fetch space permission sets to expand visibility | /rpc/json-rpc/confluenceservice-v2?os_authType=basic,body method 为 getSpacePermissionSets | POST |
| List registered webhooks | /rest/webhooks/1.0/webhook | GET |
| Register a webhook listener | /rest/webhooks/1.0/webhook | POST |
| Delete a webhook listener | /rest/webhooks/1.0/webhook/{id} | DELETE |