*.discourse.group), and with sites on your own domain or self-hosted once Oleria support allows that domain (see Known limitations).
What Oleria discovers
Once connected, Oleria continuously discovers and maps the following from your Discourse site:- Accounts - every member, with their username, name, email address, status (active, suspended, deactivated, or staged), trust level, when they were created, when they were last seen, and when they last changed their password. Administrators are marked as administrators. Oleria shows whether each member has two-factor authentication enabled and whether your site requires it.
- Non-human identities - Discourse’s own system and AI bot users, every admin API key (with the user it acts as, its scope, who created it, and when it was last used), every webhook that has a signing secret, and the User API keys that administrators and moderators have issued to apps (with the app, scopes, and when each was last used). API keys and webhook secrets appear as credentials. Oleria never reads or stores the key or secret values.
- Roles - Administrator, Moderator, and Trust Level 0 to 4, and which members hold each one.
- Groups - automatic groups (such as
staffandtrust_level_1) and custom groups, with their members and owners, and the trust level a group grants its members. Access granted to Discourse’severyonegroup appears on thetrust_level_0group, which contains every signed-in member. - Resources - categories and sub-categories, with a link to each one.
- Access - which groups can see, reply to, or create topics in each category, according to its security settings. Administrators can see every category. If your site doesn’t require login, Oleria also shows which categories anonymous visitors can read. API keys whose scopes are restricted to specific categories are linked to those categories.
- AI agents - if your site runs Discourse AI and agent discovery is enabled for your Oleria workspace, Oleria discovers each AI agent with its bot user, the groups allowed to use it, its sub-agents, and the tools, language model, and MCP servers it’s configured with.
- Risks - administrators and moderators without two-factor authentication, administrators not seen in six months, two-factor authentication not required for staff, and admin API keys with All users and Global scope, other than the key Oleria connects with.
- Activity - the staff action log, including suspensions, role and trust-level changes, impersonation, password changes, API key and webhook changes, site setting changes, and category security changes, and each custom group’s history: members added or removed, owners added or removed, and group setting changes.
Oleria doesn’t import topics, posts, or private messages. Each sync lists members with their email addresses, which Discourse records as a
check_email entry in your staff action log.Prerequisites
- A Discourse administrator account. We recommend a dedicated administrator account for Oleria, so remediation actions and the staff action log clearly show Oleria’s changes.
- Your site’s address, for example
https://<name>.discourse.group. - Admin access to the Oleria workspace.
Choose how Oleria authenticates
Oleria supports two ways to connect:- Admin API key (recommended) - an API key you create in Discourse. A key with Global scope lets Oleria sync and take remediation actions. A key with Read-only scope syncs everything, but remediation actions are disabled.
- Authorize via Discourse (User API key) - you approve Oleria in Discourse, and Discourse issues a User API key for your administrator account. Discourse limits each User API key to 50 requests a minute and 4,000 a day by default, so syncs of large sites are slower and can reach the daily limit. Use an admin API key for large sites.
Create an admin API key
1
Open the API keys page
In Discourse, go to Admin -> Advanced -> API keys and select New API key.
2
Configure the key
Enter a description such as
Oleria. For User level, select All users. For Scope, select Global (or Read-only for sync without remediation actions). In Oleria, you’ll enter the dedicated administrator’s username as the API username, so the staff action log shows Oleria’s changes under that account.3
Copy the key
Select Save and copy the key. Discourse shows it only once.
Prepare for User API key authorization
1
Allow Oleria's redirect address
In Discourse, go to Admin -> Settings, search for
allowed user api auth redirects, and add https://<your Oleria workspace>/workspace/integrations/discourse/connect*.2
Sign in as an administrator
In the same browser, sign in to Discourse with the administrator account Oleria should act as.
Connect Discourse to Oleria
1
Open the integration
Go to your Oleria workspace, select Integrations -> select Discourse.
2
Complete the connection form
Select Continue and provide the following:
3
Confirm the connection
For an admin API key, select Authenticate. For a User API key, select Authenticate, approve Oleria on the Discourse page that opens, and you’re returned to Oleria. Oleria checks that the credential acts as an administrator who can see members’ email addresses, and that it can read API keys and the staff action log. Find the newly connected site on the Connected tab of your Oleria Integrations page.
allowed user api auth redirects.
You can connect each Discourse site to Oleria once. To keep the stored API key when you edit only other fields, leave the API key field empty.
Verify the integration
Confirm the Discourse site appears on the Connected tab of your Oleria Integrations page with a status of Healthy. After the first sync completes, you can review the discovered accounts, groups, categories, and API keys in your Oleria workspace.Remediation actions
These actions need an admin API key with Global scope, or a User API key.- Disable account - suspends the member, which blocks sign-in and signs them out. Reverting the action lifts the suspension, or, if the member was already suspended until a date, puts that suspension back.
- Enable account - lifts a suspension. Reverting the action suspends the member again.
- Add to role - makes the member a moderator, or sets their trust level (Discourse then keeps that level fixed). Reverting the action restores the previous role or trust level. A restored trust level stays fixed; unlock it in Discourse if the member should move between levels automatically again.
- Remove from role - removes administrator or moderator. Reverting the action makes the member a moderator again. An administrator removal can’t be reverted from Oleria. Trust levels can’t be removed; set a different trust level with Add to role.
- Add to group and Remove from group - custom groups only. Reverting the action undoes the change.
- Revoke sessions - signs the member out of every session. This can’t be reverted.
- Disable non-human identity - revokes an admin API key or a member’s User API key, or deactivates a webhook. Reverting the action restores the key or reactivates the webhook.
- Create user - creates a member with the name, username, and email address you provide, and optionally adds them to custom groups. The member is inactive unless you choose to activate them, and a generated password is never shown, so they set their own with Forgot password. Reverting the action deletes the member it created.
- Delete user - permanently deletes a member who has no posts. Oleria won’t delete its own account, Discourse’s system users, administrators, or moderators. Discourse refuses to delete members with posts. This can’t be reverted.
- Create group - creates a custom group. Reverting the action deletes the group, as long as it still has no members.
- Revoke access to a category - removes the member from the custom groups that give them access to the category. Oleria won’t do this when the access also comes from
everyone, a trust-level or staff group, or the Administrator role, and tells you what to change instead. Reverting the action adds the member back to those groups. - Remove external user access - the same as Revoke access to a category, for staged (external) users only.
- Revoke anonymous access - on a category that
everyonecan access, grants the same access totrust_level_0instead, so signed-in members keep their access and anonymous visitors lose it. Reverting the action giveseveryoneits access back and undoes thetrust_level_0change, keeping any other security changes made since.
- Oleria won’t change, suspend, or sign out the account it connects as, and won’t revoke the API key it uses or any User API key of the member it acts as.
- Oleria won’t act on Discourse’s system and AI bot users.
- Granting administrator isn’t offered, because Discourse requires an emailed confirmation for it.
- Automatic groups and trust-level groups are managed by Discourse. Change a member’s trust level instead of their group.
- A revert is refused if someone changed the member, key, or webhook in Discourse after the action.
Known limitations
- Oleria shows whether two-factor authentication is enabled, but not which method a member uses.
- Discourse lists User API keys one member at a time, so Oleria imports the User API keys of administrators and moderators only.
- Discourse applies one admin API rate limit (60 requests a minute by default) to every admin API key on your site. While Oleria syncs, other integrations that use admin API keys may be rate limited.
- Sign-in history isn’t available through the Discourse API. Oleria uses each member’s last-seen time instead.
- Oleria reaches
*.discourse.groupand*.discourse.orgsites. To connect a site on your own domain, first contact Oleria support to allowlist that domain. - Re-authorizing a User API key connection, or switching it to an admin API key, doesn’t revoke the previous User API key. It still appears as a non-human identity; revoke it in Discourse under the administrator’s Preferences > Apps.
- Oleria doesn’t delete members who have posts, and doesn’t anonymize members.
- Discourse grants category access to groups, not to individual members, so revoking a member’s access to a category removes them from the groups that grant it.
- Discourse AI agents have no version history or owner in the Discourse API, so Oleria shows each agent’s current configuration only.

