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

# Confluence Cloud

Confluence Cloud (OAuth) connects your organization's pages, spaces, comments, and attachments to Airia agents, backed directly by Atlassian's own REST API. Each person connects with their own Atlassian account, and access follows Confluence's own permissions on top of whatever scopes the connection is granted.

## What It Can Do

| Category               | Capability                                                                                                                                                        |
| ---------------------- | ----------------------------------------------------------------------------------------------------------------------------------------------------------------- |
| **Pages**              | Create, read, update, delete, copy, and move pages. View and restore page version history, and navigate page hierarchies by ancestors, descendants, and children. |
| **Spaces**             | Create, read, update, and delete spaces, and list all pages in a space.                                                                                           |
| **Content**            | Search content using CQL (Confluence Query Language), and convert content between body formats asynchronously.                                                    |
| **Comments**           | Read and write footer comments, and read inline comments.                                                                                                         |
| **Attachments**        | Upload, download, update, and delete attachments.                                                                                                                 |
| **Labels**             | Read, add, and remove labels on a page.                                                                                                                           |
| **Templates**          | List page templates and create a page from one.                                                                                                                   |
| **Tasks**              | Search inline tasks and update their status.                                                                                                                      |
| **Content Properties** | Read, create, update, and delete custom content properties.                                                                                                       |
| **Restrictions**       | Read and manage page access restrictions, and check content permissions.                                                                                          |
| **Users and Groups**   | Search users, look up a user or the current authenticated user, and read group membership.                                                                        |

See [Tools and Required Scopes](#tools-and-required-scopes) below for the full list of tools behind these capabilities.

## Connecting

<Steps>
  <Step title="Register an OAuth app">
    Go to the [Atlassian Developer Console](https://developer.atlassian.com/console/myapps/) and select **Create** → **OAuth 2.0 integration**. Give the app a name, for example "Airia Confluence," and save.
  </Step>

  <Step title="Add the callback URL">
    Select **Authorization** in the left sidebar, then click **Add** next to OAuth 2.0 (3LO). Add the following callback URL and save:

    ```
    https://auth.airia.ai/OAuth/callback
    ```
  </Step>

  <Step title="Add API permissions">
    Select **Permissions** in the left sidebar, click **Add** next to the Confluence API, and enable every scope listed under [Tools and Required Scopes](#tools-and-required-scopes) below. The [Granting All Scopes](#granting-all-scopes) section has both scope lists ready to paste in.
  </Step>

  <Step title="Copy your credentials">
    Select **Settings** and copy the **Client ID** and **Secret**.
  </Step>

  <Step title="Find your Cloud ID">
    Your Cloud ID is a UUID Airia uses to reach your specific Confluence site. Visit the following URL, replacing `{your-site}` with your Atlassian domain, and copy the `cloudId` value from the response:

    ```
    https://{your-site}.atlassian.net/_edge/tenant_info
    ```
  </Step>

  <Step title="Add it to Airia">
    Add **Confluence Cloud (OAuth)** as a server on a Gateway or Deployment, then enter your **Client ID**, **Client Secret**, and **Cloud ID**.
  </Step>
</Steps>

<Note>
  The **OAuth Scopes** field in Airia is optional. Leave it blank to request the standard scopes above, or fill it in to request a different set. If you customize it, make sure to include `offline_access` so your connection can refresh automatically.
</Note>

## Tools and Required Scopes

Every tool below needs a specific Confluence scope before it will work. Tool names are what an agent actually calls, the same names you'd see in an agent's tool call log.

<Note>
  Atlassian scopes come in two flavors. **Classic** scopes are broad and recommended, granting one alone is enough for every tool that lists one. **Granular** scopes are narrower and only needed if you're building an OAuth app without classic scopes, in which case a tool needs every listed granular scope granted together. Most of Confluence's newer page, space, comment, and attachment-reading tools run on Confluence's v2 API, which has no classic scope equivalent at all, so those always need their granular scope regardless of which approach you use.
</Note>

### Pages

| Tool                                           | What it does                                   | Scope(s) required                                                                                                   |
| ---------------------------------------------- | ---------------------------------------------- | ------------------------------------------------------------------------------------------------------------------- |
| `confluence_cloud_rest_api_listpages`          | List pages in Confluence.                      | `read:page:confluence`                                                                                              |
| `confluence_cloud_rest_api_createpage`         | Create a new Confluence page.                  | `write:page:confluence`                                                                                             |
| `confluence_cloud_rest_api_getpage`            | Get a specific page by ID.                     | `read:page:confluence`                                                                                              |
| `confluence_cloud_rest_api_updatepage`         | Update an existing page.                       | `write:page:confluence`                                                                                             |
| `confluence_cloud_rest_api_deletepage`         | Delete a page.                                 | `delete:page:confluence`                                                                                            |
| `confluence_cloud_rest_api_searchcontent`      | Search Confluence content using CQL.           | `search:confluence` (Classic) or `read:content-details:confluence` (Granular)                                       |
| `confluence_cloud_rest_api_getpageversions`    | Get page version history.                      | `read:page:confluence`                                                                                              |
| `confluence_cloud_rest_api_getpageversion`     | Get a specific version of a page.              | `read:page:confluence`                                                                                              |
| `confluence_cloud_rest_api_restorepageversion` | Restore a previous version of a page.          | `write:confluence-content` (Classic) or `read:content-details:confluence` and `write:content:confluence` (Granular) |
| `confluence_cloud_rest_api_getchildpages`      | Get child pages.                               | `read:page:confluence`                                                                                              |
| `confluence_cloud_rest_api_getpageancestors`   | Get page ancestors (parent hierarchy).         | `read:content.metadata:confluence`                                                                                  |
| `confluence_cloud_rest_api_getpagedescendants` | Get all descendant pages (recursive children). | `read:hierarchical-content:confluence`                                                                              |
| `confluence_cloud_rest_api_movepage`           | Move a page to a new location.                 | `write:confluence-content` (Classic) or `write:page:confluence` (Granular)                                          |
| `confluence_cloud_rest_api_copypage`           | Copy a page.                                   | `write:confluence-content` (Classic) or `read:content-details:confluence` and `write:page:confluence` (Granular)    |
| `confluence_cloud_rest_api_copypagehierarchy`  | Copy a page and all its children.              | `write:confluence-content` (Classic) or `read:content.metadata:confluence` and `write:page:confluence` (Granular)   |

### Content Body

| Tool                                                 | What it does                           | Scope(s) required                                                                        |
| ---------------------------------------------------- | -------------------------------------- | ---------------------------------------------------------------------------------------- |
| `confluence_cloud_rest_api_startasyncconversion`     | Start async content format conversion. | `read:confluence-content.all` (Classic) or `read:content.metadata:confluence` (Granular) |
| `confluence_cloud_rest_api_getasyncconversionresult` | Get async conversion result.           | `read:confluence-content.all` (Classic) or `read:content.metadata:confluence` (Granular) |
| `confluence_cloud_rest_api_getmacrobody`             | Get macro body content by ID.          | `read:confluence-content.all` (Classic) or `read:content.metadata:confluence` (Granular) |

### Spaces

| Tool                                      | What it does                | Scope(s) required                                                                                                                                     |
| ----------------------------------------- | --------------------------- | ----------------------------------------------------------------------------------------------------------------------------------------------------- |
| `confluence_cloud_rest_api_getspaces`     | List all Confluence spaces. | `read:space:confluence`                                                                                                                               |
| `confluence_cloud_rest_api_createspace`   | Create a new space.         | `write:space:confluence`                                                                                                                              |
| `confluence_cloud_rest_api_getspace`      | Get a specific space.       | `read:space:confluence`                                                                                                                               |
| `confluence_cloud_rest_api_updatespace`   | Update a space.             | `write:confluence-space` (Classic) or `read:space-details:confluence` and `write:space:confluence` and `write:space.permission:confluence` (Granular) |
| `confluence_cloud_rest_api_deletespace`   | Delete a space.             | `write:confluence-space` (Classic) or `read:content.metadata:confluence` and `delete:space:confluence` (Granular)                                     |
| `confluence_cloud_rest_api_getspacepages` | Get all pages in a space.   | `read:page:confluence`                                                                                                                                |

### Comments

| Tool                                          | What it does                         | Scope(s) required           |
| --------------------------------------------- | ------------------------------------ | --------------------------- |
| `confluence_cloud_rest_api_getpagecomments`   | Get page comments (footer comments). | `read:comment:confluence`   |
| `confluence_cloud_rest_api_addpagecomment`    | Add a comment to a page.             | `write:comment:confluence`  |
| `confluence_cloud_rest_api_getcomment`        | Get a specific comment.              | `read:comment:confluence`   |
| `confluence_cloud_rest_api_updatecomment`     | Update a comment.                    | `write:comment:confluence`  |
| `confluence_cloud_rest_api_deletecomment`     | Delete a comment.                    | `delete:comment:confluence` |
| `confluence_cloud_rest_api_getinlinecomments` | Get inline comments on a page.       | `read:comment:confluence`   |

### Attachments

| Tool                                           | What it does                       | Scope(s) required                                                                                                   |
| ---------------------------------------------- | ---------------------------------- | ------------------------------------------------------------------------------------------------------------------- |
| `confluence_cloud_rest_api_getattachments`     | Get attachments on a page.         | `read:attachment:confluence`                                                                                        |
| `confluence_cloud_rest_api_uploadattachment`   | Upload an attachment to a page.    | `write:confluence-file` (Classic) or `read:content-details:confluence` and `write:attachment:confluence` (Granular) |
| `confluence_cloud_rest_api_downloadattachment` | Download an attachment.            | `readonly:content.attachment:confluence` (Classic) or `read:attachment:confluence` (Granular)                       |
| `confluence_cloud_rest_api_updateattachment`   | Update/replace an attachment file. | `write:confluence-file` (Classic) or `read:content-details:confluence` and `write:attachment:confluence` (Granular) |
| `confluence_cloud_rest_api_deleteattachment`   | Delete an attachment.              | `delete:attachment:confluence`                                                                                      |

### Labels

| Tool                                    | What it does                | Scope(s) required                                                                                       |
| --------------------------------------- | --------------------------- | ------------------------------------------------------------------------------------------------------- |
| `confluence_cloud_rest_api_getlabels`   | Get labels on a page.       | `read:page:confluence`                                                                                  |
| `confluence_cloud_rest_api_addlabel`    | Add a label to a page.      | `write:confluence-content` (Classic) or `read:label:confluence` and `write:label:confluence` (Granular) |
| `confluence_cloud_rest_api_removelabel` | Remove a label from a page. | `write:confluence-content` (Classic) or `write:label:confluence` (Granular)                             |

### Templates

| Tool                                               | What it does                   | Scope(s) required                                                                                                          |
| -------------------------------------------------- | ------------------------------ | -------------------------------------------------------------------------------------------------------------------------- |
| `confluence_cloud_rest_api_gettemplates`           | Get available page templates.  | `read:confluence-content.summary` (Classic) or `read:template:confluence` and `read:content-details:confluence` (Granular) |
| `confluence_cloud_rest_api_gettemplate`            | Get a specific template.       | `read:confluence-content.summary` (Classic) or `read:template:confluence` and `read:content-details:confluence` (Granular) |
| `confluence_cloud_rest_api_createpagefromtemplate` | Create a page from a template. | `write:confluence-content` (Classic) or `read:content-details:confluence` and `write:content:confluence` (Granular)        |

### Tasks

| Tool                                         | What it does             | Scope(s) required       |
| -------------------------------------------- | ------------------------ | ----------------------- |
| `confluence_cloud_rest_api_searchtasks`      | Search for inline tasks. | `read:task:confluence`  |
| `confluence_cloud_rest_api_gettask`          | Get a specific task.     | `read:task:confluence`  |
| `confluence_cloud_rest_api_updatetaskstatus` | Update task status.      | `write:task:confluence` |

### Content Properties

| Tool                                              | What it does                              | Scope(s) required                                  |
| ------------------------------------------------- | ----------------------------------------- | -------------------------------------------------- |
| `confluence_cloud_rest_api_getcontentproperties`  | Get content properties (custom metadata). | `read:page:confluence`                             |
| `confluence_cloud_rest_api_createcontentproperty` | Create a content property.                | `read:page:confluence` and `write:page:confluence` |
| `confluence_cloud_rest_api_getcontentproperty`    | Get a specific content property.          | `read:page:confluence`                             |
| `confluence_cloud_rest_api_updatecontentproperty` | Update a content property.                | `read:page:confluence` and `write:page:confluence` |
| `confluence_cloud_rest_api_deletecontentproperty` | Delete a content property.                | `read:page:confluence` and `write:page:confluence` |

### Restrictions

| Tool                                               | What it does                         | Scope(s) required                                                                                                               |
| -------------------------------------------------- | ------------------------------------ | ------------------------------------------------------------------------------------------------------------------------------- |
| `confluence_cloud_rest_api_getrestrictions`        | Get page restrictions.               | `read:confluence-content.all` (Classic) or `read:content-details:confluence` (Granular)                                         |
| `confluence_cloud_rest_api_addrestriction`         | Add a restriction to a page.         | `write:confluence-content` (Classic) or `read:content-details:confluence` and `write:content.restriction:confluence` (Granular) |
| `confluence_cloud_rest_api_removerestriction`      | Remove all restrictions from a page. | `write:confluence-content` (Classic) or `read:content-details:confluence` and `write:content.restriction:confluence` (Granular) |
| `confluence_cloud_rest_api_checkcontentpermission` | Check if a user has permission.      | `read:confluence-content.permission` (Classic) or `read:content.permission:confluence` (Granular)                               |

### Users

| Tool                                        | What it does                    | Scope(s) required                                                                                   |
| ------------------------------------------- | ------------------------------- | --------------------------------------------------------------------------------------------------- |
| `confluence_cloud_rest_api_searchusers`     | Search for Confluence users.    | `read:content-details:confluence`                                                                   |
| `confluence_cloud_rest_api_getuser`         | Get user by account ID.         | `read:confluence-user` (Classic) or `read:content-details:confluence` (Granular)                    |
| `confluence_cloud_rest_api_getcurrentuser`  | Get current authenticated user. | `read:confluence-user` (Classic) or `read:content-details:confluence` (Granular)                    |
| `confluence_cloud_rest_api_getusergroups`   | Get groups a user belongs to.   | `read:confluence-user` (Classic) or `read:user:confluence` and `read:group:confluence` (Granular)   |
| `confluence_cloud_rest_api_getgroupmembers` | Get members of a group.         | `read:confluence-groups` (Classic) or `read:group:confluence` and `read:user:confluence` (Granular) |

## Granting All Scopes

If you'd rather not cross-reference the table above tool by tool, enable every scope below in the Atlassian console and every tool becomes available at once.

**Classic scopes**

```
read:confluence-content.all write:confluence-content read:confluence-content.summary read:confluence-space.summary write:confluence-space read:confluence-props write:confluence-props write:confluence-file readonly:content.attachment:confluence read:confluence-user read:confluence-groups search:confluence read:confluence-content.permission
```

**Granular scopes**

```
read:page:confluence write:page:confluence delete:page:confluence read:comment:confluence write:comment:confluence delete:comment:confluence read:attachment:confluence write:attachment:confluence delete:attachment:confluence read:space:confluence read:content-details:confluence read:content.metadata:confluence read:space-details:confluence read:hierarchical-content:confluence read:template:confluence read:group:confluence read:task:confluence write:task:confluence write:label:confluence write:content.restriction:confluence
```

<Note>
  Together, these two lists cover every tool in the reference above. The Classic list covers every tool that lists a Classic option, and the Granular list adds the scopes Confluence's newer v2 API tools need, since most of them, mainly page, space, comment, and attachment-reading tools, have no Classic equivalent at all.
</Note>

## Troubleshooting

<AccordionGroup>
  <Accordion title="Sign-in fails or a consent screen shows an error" icon="user-lock">
    Double check the callback URL on your OAuth app is exactly `https://auth.airia.ai/OAuth/callback`, and that your Cloud ID is correct. A wrong Cloud ID connects successfully but every tool call fails, since Airia is pointed at a site that doesn't match the app's authorization.
  </Accordion>

  <Accordion title="A specific tool fails even though the connection works" icon="triangle-exclamation">
    Check the [Tools and Required Scopes](#tools-and-required-scopes) table above for the exact scope that tool needs, add it to your app registration, and reconnect.
  </Accordion>

  <Accordion title="The connection stops working after about an hour" icon="clock-rotate-left">
    This happens when `offline_access` wasn't included in the granted scopes, so Airia has no way to refresh the session. If you customized the **OAuth Scopes** field in Airia, add `offline_access` back in and reconnect.
  </Accordion>
</AccordionGroup>

## Learn More

* [Confluence Cloud REST API v2](https://developer.atlassian.com/cloud/confluence/rest/v2/intro/)
* [Confluence Cloud scopes for OAuth 2.0](https://developer.atlassian.com/cloud/confluence/scopes-for-oauth-2-3LO-and-forge-apps/)
* [Atlassian Developer Console](https://developer.atlassian.com/console/myapps/)
* [OAuth 2.0 for Atlassian apps](https://developer.atlassian.com/cloud/jira/platform/oauth-2-3lo-apps/)

## Confluence Cloud (API Token)

<Tip>
  Airia also offers **Confluence Cloud (API Token)**, a separate, Restricted server that most organizations will never see or need. It's not enabled by default. If you want to use it, talk to your Airia contact about adding it to your tenant, after which a Platform Admin, Admin, or Security Admin can turn it on from [Server Management](/mcps/admin-controls/server-management) using **Add Restricted Server**.
</Tip>

It exposes the exact same tools as Confluence Cloud (OAuth) above, just with a different way of authenticating: every request runs as whichever Atlassian account owns the token, so there's no OAuth app, no Cloud ID, and no scopes to grant. The token has full access to whatever that account can already do in Confluence.

<Steps>
  <Step title="Create an API token">
    Go to your Atlassian [API token settings](https://id.atlassian.com/manage-profile/security/api-tokens) and create a new token. Copy it, along with the email address of the Atlassian account it belongs to.
  </Step>

  <Step title="Base64 encode your credential">
    Combine your email and token as `{your email}:{your API token}`, then Base64 encode the whole string. On macOS or Linux, you can run:

    ```bash theme={null}
    echo -n "you@example.com:your-api-token" | base64
    ```
  </Step>

  <Step title="Add it to Airia">
    Add **Confluence Cloud (API Token)** as a server on a Gateway or Deployment, then enter the encoded string as the credential, along with your Atlassian domain, the part before `.atlassian.net` in your site's URL.
  </Step>
</Steps>

<Note>
  The credential Airia needs is the Base64 encoding of `email:apitoken`, not the API token by itself. This method authenticates every request with a single token rather than individual user sign-in, so it's best suited to simpler or single-account setups.
</Note>
