Recoup — Security Information

This document describes the security posture of Recoup, the Atlassian Marketplace app. It is intended for security reviewers at customer organisations evaluating Recoup for installation.


Platform

Recoup is built entirely on Atlassian Forge, Atlassian's hosted application platform. Recoup operates no third-party servers and runs no code outside Atlassian's network for any feature except the optional AI features (which call Anthropic directly from Forge).

What this means in practice


Permissions

Recoup requests the following Atlassian permission scopes:

Scope Reason
read:jira-user Enumerate Jira users for the cross-product user list
read:jira-work Read issue activity (assignee, reporter, updated) for last-active timestamps. Never reads issue contents.
read:group:jira Read group memberships for future bloat analysis (planned v1.1)
read:confluence-user Cross-reference Confluence user list
read:confluence-groups Same, group level
read:servicedesk-request Read JSM agent activity for last-active timestamps
manage:servicedesk-customer Required by Atlassian for certain JSM user operations
storage:app Forge KVS — store users, recommendations, settings, audit log

Recoup additionally requests outbound network access to:


Authentication

Recoup uses two authentication patterns, both standard:

Forge asApp() (default)

Recoup invokes Atlassian APIs as the installed app, using Atlassian's internal token mint. Each request is authenticated by Atlassian's platform layer; Recoup never sees a raw user token.

Customer-supplied Atlassian admin API key (optional)

For org-level data (cross-product last_active, user lifecycle), the org-admin API key endpoints require a Bearer token issued by your org admin at admin.atlassian.com. You enter this key in Recoup's Settings. It is stored encrypted in Forge KVS via kvs.setSecret() and is never logged or returned by any resolver to the frontend.


Secret handling


Destructive actions

Recoup can take three destructive actions on users:

  1. Deactivate user — calls POST /users/{accountId}/manage/lifecycle/disable on the Atlassian Admin API. Requires:
    • An org-admin API key configured
    • The caller cannot deactivate themselves (server-enforced)
    • A reason of ≥ 10 characters (server-enforced, written to the audit log)
  2. Revoke product access — planned v1.1, not active in v1.0
  3. Mark as service account — does not touch Atlassian; only updates Recoup's local allowlist + flag on the user record. Reversible.

Every destructive action writes an immutable audit record before and after execution, capturing the admin's accountId, target accountId, action type, full before/after state diff, success/failure, and reason. Audit records cannot be edited or deleted from within the app.

Recoup never auto-takes destructive actions. All actions are admin-initiated; no automation or AI agent acts on its own.


AI processing (when enabled)

Both AI features are opt-in:

Service-account classifier

Cost insights summary

If you disable the AI toggles in Settings, no data is ever sent to Anthropic by either feature.


Vulnerability reporting

Security vulnerabilities can be reported to security@tryrecoup.app. We commit to acknowledging reports within 5 business days and disclosing patches via the Marketplace "What's new" section.

Recoup is a solo-developer product as of v1.0. We do not currently operate a paid bug bounty programme.


Compliance

Recoup inherits the security and compliance posture of the underlying Atlassian Forge platform. Atlassian Forge is certified under:

Recoup itself does not have independent certifications. The app code is reviewed by Atlassian as part of the Marketplace listing approval process.


Audit & change history

For your records, every code change to Recoup is reflected in the What's new section of the Marketplace listing for each version. The Marketplace partner portal also exposes a full version history for compliance audits.