Skip to content
Docs
Docs & knowledge

Confluence

Let hires search and read your Confluence pages, write new ones, keep existing ones up to date and comment, on Confluence Cloud or your own Data Center.

Explore 6 actions and their permissionsExact inputs, sign-in scopes, access limits and approval rules.

With Confluence, a hire can:

  • list your spaces and search pages and blog posts by the words in them,
  • read a page as plain text, with its latest comments,
  • write a new page in a space, under a parent page if you like,
  • add to a page (new paragraphs at the end, leaving its tables and macros as they are), or replace its text and rename it when asked,
  • comment at the bottom of a page.

Your runbooks, specs, postmortems and help articles become something hires answer from, and keep up to date. It works on Confluence Cloud (atlassian.net) and on Confluence Data Center or Server that you run yourself.

Using Jira Service Management?

Service desk requests are Jira issues, so the Jira integration already lets hires find, read, comment on and move them. Connect Confluence for the knowledge base behind them.

1. Choose how Roster signs in

Confluence signs in the same three ways as Jira:

  • Confluence Cloud: email and API token. Open your Atlassian API tokens (the form in Roster links there too) as the account hires should act as, click Create API token, name it Roster and copy it.
  • Confluence Cloud: an OAuth app of yours. At developer.atlassian.com/console/myapps, create an OAuth 2.0 integration, add the Confluence API with read:page:confluence, write:page:confluence, read:space:confluence, read:comment:confluence, write:comment:confluence and search:confluence, and set the callback URL to the address Roster shows on the connection (it ends in /api/integrations/confluence/oauth/callback).
  • Confluence Data Center or Server: personal access token. In Confluence, click your avatar → Settings → Personal Access Tokens → Create token.

What hires write shows as the account the token or app belongs to, so you may want an account just for Roster, with access to the spaces hires work in.

2. Connect it in Roster

  1. Open Integrations → Tools → Add a tool, search for Confluence and choose it.
  2. How Roster signs in: pick the way you chose above. Only its fields are shown.
  3. Paste the email and API token, the personal access token, or the OAuth app's client ID and secret.
  4. Confluence address: like https://acme.atlassian.net (with or without /wiki), or your own server's address, like https://wiki.example.com/confluence.
  5. Click Connect. With an API token or a personal access token, Roster asks Confluence who it belongs to, and the connection shows Connected as that account and your site. If Confluence refuses it, Roster says so and saves nothing. With an OAuth app, then click Connect with Confluence and accept.

3. Give hires access

On the hire's Tools tab, click Give access on Confluence:

  • Read only: it can list spaces, search and read pages, and nothing else.
  • Read and write: it can also write pages, add to or rewrite them, and comment.
  • Spaces: space keys like ENG or SUPPORT. Leave it empty for every space the account can reach. Anything outside the list is refused, searches included, and a new page can only go under a parent in the same space.

Hires refer to pages by their id, the number in the page's address. Every change a hire makes is a new version of the page, so Confluence's page history shows it and can undo it.

Watching for changes

A hire's responsibility can watch Confluence: when pages in its spaces change, the hire is woken with the list. Checking is one search and costs nothing when nothing changed.

If something goes wrong

  • "Didn't accept the connection's credential": the token was revoked or expired, or the email doesn't match the token's account.
  • "Says that conflicts" when updating: someone saved the page at the same moment. Ask the hire to try again; it reads the latest version first.
  • Search finds nothing new: Confluence indexes changes within a minute or so.

Tools and permissions reference

This reference is built from the same definitions Roster uses to connect Confluence and give hires access. It updates with each release.

Authentication and requested permissions

The account or app you connect sets the outer limit. Each hire's access can narrow it further. Connecting a tool gives it to no hire until you give access on that hire's Tools tab.

User name and password or key pair

The email of the Atlassian account hires act as. Make the token at id.atlassian.com → Security → API tokens.

For: How Roster signs in: Confluence Cloud: email and API token.

API key or access token

In Confluence: your avatar → Profile → Personal Access Tokens → Create token.

For: How Roster signs in: Confluence Data Center or Server: personal access token.

OAuth 2.0

From the OAuth 2.0 (3LO) app you made at developer.atlassian.com.

For: How Roster signs in: Confluence Cloud: an OAuth app of yours.

Requested scopes:

  • read:page:confluence
  • write:page:confluence
  • read:space:confluence
  • read:comment:confluence
  • write:comment:confluence
  • search:confluence
  • offline_access

Connection fields

Confluence connection fields
FieldWhat to provide
How Roster signs in
signIn
Optional
Confluence Cloud (atlassian.net) with an API token is quickest. Data Center and Server use a personal access token.

Choices: Confluence Cloud: email and API token (cloud-token); Confluence Cloud: an OAuth app of yours (cloud-oauth); Confluence Data Center or Server: personal access token (datacenter).

Starts with: cloud-token.

Atlassian account email
email
Required
The email of the Atlassian account hires act as. Make the token at id.atlassian.com → Security → API tokens.

Shown when signIn: cloud-token.

API token
apiToken
Required · sealed secret
Use the value for your account or connection.

Shown when signIn: cloud-token.

Personal access token
personalToken
Required · sealed secret
In Confluence: your avatar → Profile → Personal Access Tokens → Create token.

Shown when signIn: datacenter.

OAuth app client ID
clientId
Optional
From the OAuth 2.0 (3LO) app you made at developer.atlassian.com.

Shown when signIn: cloud-oauth.

OAuth app client secret
clientSecret
Optional · sealed secret
Use the value for your account or connection.

Shown when signIn: cloud-oauth.

Confluence address
url
Required
The address you open Confluence at: https://acme.atlassian.net for Cloud, or your own server's address (with any path, like /jira).

Per-hire limits

Read-only hires receive only actions that read. Read-and-write access also allows actions that change things, where the connection itself permits them. An empty resource allowlist usually means everything the connected account can reach; each field below explains its meaning.

Confluence per-hire limits
FieldWhat to provide
Spaces
spaces
Optional
Space keys like ENG or SUPPORT, one per line. Leave empty for every space the account can reach.

Actions

6 actions: 3 only read and 3 change something. A read action may still need approval when your workspace or hire is set to ask. A locked approval requirement always applies.

6 of 6 actions. Open an action for its arguments and full input schema.

list_spacesRead only

The Confluence spaces this hire can use, with their keys.

Approval: Uses your workspace and hire approval settings.

This action takes no arguments.

Full input schema (JSON)
{
  "$schema": "http://json-schema.org/draft-07/schema#",
  "type": "object",
  "properties": {}
}
searchRead only

Find pages and blog posts by words in their title or text, most recently changed first.

Approval: Uses your workspace and hire approval settings.

Arguments for search
ArgumentTypeDetails
textRequiredstringwords to look for
spaceOptionalstringspace key, e.g. ENG
limitOptionalintegerSee input schema below.Default: 15
Full input schema (JSON)
{
  "$schema": "http://json-schema.org/draft-07/schema#",
  "type": "object",
  "properties": {
    "text": {
      "type": "string",
      "minLength": 1,
      "maxLength": 500,
      "description": "words to look for"
    },
    "space": {
      "type": "string",
      "pattern": "^~?[A-Za-z0-9][A-Za-z0-9:_-]{0,254}$",
      "description": "space key, e.g. ENG"
    },
    "limit": {
      "default": 15,
      "type": "integer",
      "minimum": 1,
      "maximum": 50
    }
  },
  "required": [
    "text"
  ]
}
get_pageRead only

A page's text (tables and macros as plain text) and its latest comments.

Approval: Uses your workspace and hire approval settings.

Arguments for get_page
ArgumentTypeDetails
idRequiredstringthe page's id, the number in its address
Full input schema (JSON)
{
  "$schema": "http://json-schema.org/draft-07/schema#",
  "type": "object",
  "properties": {
    "id": {
      "type": "string",
      "pattern": "^\\d{1,20}$",
      "description": "the page's id, the number in its address"
    }
  },
  "required": [
    "id"
  ]
}
create_pageRead and write

Write a new page in a space, optionally under a parent page.

Approval: Uses your workspace and hire approval settings.

Arguments for create_page
ArgumentTypeDetails
spaceRequiredstringspace key, e.g. ENG
titleRequiredstringSee input schema below.
bodyRequiredstringplain text; blank lines start new paragraphs
parentOptionalstringthe parent page's id; it must be in the same space
Full input schema (JSON)
{
  "$schema": "http://json-schema.org/draft-07/schema#",
  "type": "object",
  "properties": {
    "space": {
      "type": "string",
      "pattern": "^~?[A-Za-z0-9][A-Za-z0-9:_-]{0,254}$",
      "description": "space key, e.g. ENG"
    },
    "title": {
      "type": "string",
      "minLength": 1,
      "maxLength": 255
    },
    "body": {
      "type": "string",
      "minLength": 1,
      "description": "plain text; blank lines start new paragraphs"
    },
    "parent": {
      "description": "the parent page's id; it must be in the same space",
      "type": "string",
      "pattern": "^\\d{1,20}$"
    }
  },
  "required": [
    "space",
    "title",
    "body"
  ]
}
update_pageRead and write

Add to a page (the default: new paragraphs at the end, keeping its tables and macros) or replace its whole text, and optionally rename it.

Approval: Uses your workspace and hire approval settings.

Arguments for update_page
ArgumentTypeDetails
idRequiredstringthe page's id, the number in its address
bodyOptionalstringplain text to add, or the whole new text with mode replace
modeOptional"append" | "replace"See input schema below.Default: "append"
titleOptionalstringSee input schema below.
Full input schema (JSON)
{
  "$schema": "http://json-schema.org/draft-07/schema#",
  "type": "object",
  "properties": {
    "id": {
      "type": "string",
      "pattern": "^\\d{1,20}$",
      "description": "the page's id, the number in its address"
    },
    "body": {
      "description": "plain text to add, or the whole new text with mode replace",
      "type": "string"
    },
    "mode": {
      "default": "append",
      "type": "string",
      "enum": [
        "append",
        "replace"
      ]
    },
    "title": {
      "type": "string",
      "minLength": 1,
      "maxLength": 255
    }
  },
  "required": [
    "id"
  ]
}
commentRead and write

Comment at the bottom of a page.

Approval: Uses your workspace and hire approval settings.

Arguments for comment
ArgumentTypeDetails
idRequiredstringthe page's id, the number in its address
bodyRequiredstringplain text
Full input schema (JSON)
{
  "$schema": "http://json-schema.org/draft-07/schema#",
  "type": "object",
  "properties": {
    "id": {
      "type": "string",
      "pattern": "^\\d{1,20}$",
      "description": "the page's id, the number in its address"
    },
    "body": {
      "type": "string",
      "minLength": 1,
      "description": "plain text"
    }
  },
  "required": [
    "id",
    "body"
  ]
}

Watches and incoming events

  • This integration supports a responsibility that watches for changes. The guide above explains what it checks and how to limit it.
  • No incoming webhook handler is declared for this integration.

Limits and troubleshooting

  • Permission errors: check both the connected account's rights and the hire's resource and read/write limits.
  • Expired or revoked access: reconnect or replace the key on the connection.
  • Rate limits and unavailable services can interrupt work. The hire's timecard records the outcome.
  • The action schema describes accepted inputs. It does not grant additional access or bypass approvals.

Service documentation · Integration source reference

On this page