outageloop

Privacy Policy

App: Outageloop (Jira Cloud, Atlassian Forge, with an external monitoring backend)
Provider: MernPearl Technology Private Limited (CIN U62099RJ2024PTC097952)
Last updated: 1 October 2026


1. Scope

This policy describes how the Outageloop app ("the App") handles data when it is installed on your Atlassian Jira Cloud site. It covers only the App. It does not cover Atlassian's own handling of your Jira data, which is governed by Atlassian's privacy policy and your agreement with Atlassian.

The App has two parts:

The backend holds no personal data (§3). The only personal data the App stores at all is held in Forge hosted storage, inside the Atlassian platform (§2.1).


2. What the App stores in Atlassian Forge

The Jira app stores the following in Forge hosted storage (storage:app — Forge Key-Value Store and Forge Custom Entities), inside the Atlassian platform:

What Where Contains personal data?
Dependency records — which catalog service, its category, and chosen regions Key-Value Store No
Project ↔ dependency mappings, including the addedBy field Key-Value Store Yes — an Atlassian account ID
Latest status of each dependency and of each watched region or component Key-Value Store No
Incidents and the incident event timeline Key-Value Store + Custom Entity No
Notification rules — the project and the Slack channel identifier to post to Key-Value Store No
Notification log and outbox markers that prevent duplicate alerts Custom Entity + Key-Value Store No
Slack connection metadata — Slack team ID, team name, connection timestamp Key-Value Store No
Slack bot token, if you connect a Slack workspace Forge encrypted secret storage No — but it is a credential (see §5)
Backend registration and the secret that verifies status pushes from it Key-Value Store + Forge secrets No — the secret is a credential
Opaque source identifiers (random IDs the backend knows your sources by) Key-Value Store No
Onboarding state — installation, first-value, and dismissal timestamps Key-Value Store No
Subscription mirror — your tier, limits, and evaluation flag Key-Value Store No

2.1 The only personal data

The only personal data the App persists is an Atlassian account ID: the account ID of the person who attached a dependency to a project, stored in the addedBy field of the project-dependency mapping, in Forge hosted storage. It is never sent to the backend.

The App does not store names, email addresses, avatars, IP addresses, Jira issue content, issue keys, comments, attachments, or any free-text you enter in Jira.

An account ID may additionally appear transiently in Atlassian platform application logs — for example, when the App records that a permission check was denied. Those are Forge platform logs, retained and managed by Atlassian, and are not exported anywhere by the App.

2.2 Permissions the App requests

The App requests three Atlassian scopes: storage:app, read:permission:jira, and read:jira-work.

None of these permit the App to write to, modify, or delete any of your Jira data. The two Jira scopes are read-only: they let the App check whether the current user may view or administer a project, and list the projects a user can see. storage:app permits the App to write only to its own Forge storage.


3. What the Outageloop backend stores

The backend runs on a virtual server in Oracle Cloud Infrastructure (OCI), region ap-mumbai-1 (Mumbai, India), in Docker containers with a PostgreSQL database, a Redis cache and a RabbitMQ queue on the same server. It stores:

What Personal data? Protection
Installation record — a tenant key, the URL of your installation's Forge web trigger, timestamps No Tenant key is a one-way HMAC-SHA256 (see below)
Callback secret — the per-installation secret used to sign status pushes to your site No (credential) Encrypted with AES-GCM before it is stored
Catalog selections — which catalog services, regions and components your installation watches No Isolated per tenant by database row-level security
Delivery queue — pending and recent status-change messages to your site No Delivered rows deleted after 7 days
Global status history — the public status of each catalog service over time, shared by all customers No — and not customer data Deleted after 90 days

Tenant key. Your installation is identified to the backend by a key derived with HMAC-SHA256 from the Atlassian installation identifier and a secret salt held only on the server. The backend does not store your Atlassian site URL, site name, cloud ID or installation ID in readable form.

No user identity. Each request from the Jira app to the backend carries a token signed by Atlassian (the Forge Invocation Token). The backend verifies it and uses only the installation identifier inside it to derive the tenant key. It does not store or log any user identity from that token, and it receives no account IDs, names, email addresses, project names, issue keys or Jira content.

Encryption. Traffic to the backend is encrypted in transit with TLS. Callback secrets are encrypted by the application with AES-GCM; the key is held only in the server's protected configuration. Oracle Cloud encrypts the server's storage volumes at rest by default. The database, cache and queue accept no connections from outside the server.

Logs. The backend's application logs contain operational events only. Verified on 2026-10-01, they contain no IP addresses, no tenant keys and no callback URLs. The web server in front of the backend keeps no access log for it.


4. Data flows outside the Atlassian platform

This section is a specific disclosure, not a generic third-party clause. Please read it.

There are exactly four flows, and no others:

4.1 Jira app → Outageloop backend

The Jira app calls the backend over Forge Remote (HTTPS) to register your installation, to tell it which catalog services, regions and components to watch, to read status history, and to remove your installation on uninstall. The data sent is listed in §3: the web-trigger URL, the callback secret, opaque source identifiers and catalog selections. No personal data and no Jira content is sent.

4.2 Backend → third-party status pages

On a schedule, the backend sends an outbound GET request to the published status pages and status APIs of the services in its catalog (for example status.stripe.com or www.githubstatus.com). Each service is checked once for all customers, not once per customer.

These requests transmit no customer data. They carry no request body, no credential, no Atlassian site or tenant identifier, no user identity and no Jira content. A status-page operator learns only that a request arrived from the backend server's IP address. The backend reads only the published status.

4.3 Backend → Jira app (status pushes)

When a status you watch changes, the backend sends it to your installation's Forge web trigger, signed with your installation's callback secret. The message contains an opaque source identifier, the region or component, the new status and a sequence number — nothing else.

4.4 Jira app → Slack — only if you connect Slack

If a site administrator connects a Slack workspace, the App posts messages to the Slack channels you configure, using Slack's chat.postMessage API, and calls Slack's auth.test once at connection time to verify the bot token you supplied.

A message contains exactly the Slack channel identifier and one line of text, generated from the display name of the monitored service (for example, "Stripe"), the event type (incident opened, resolved, or severity changed) and the severity (major or minor). It contains no personal data, no account IDs, no Jira issue keys, no project names and no free text of yours. A representative message:

:red_circle: Stripe is DOWN — incident opened (Major severity).

4.5 What does not happen

The App's calls to the Jira REST API stay inside the Atlassian platform. Neither the Jira app nor the backend sends data to any analytics provider, error-reporting service, application-performance-monitoring vendor or advertising network. There are none.


5. Credentials

Neither is ever logged or included in error messages.


6. Sub-processors

Sub-processor Purpose Location Personal data?
Atlassian (Forge platform) Runs the Jira app and holds everything in §2 Per your Atlassian agreement Yes — §2.1
Oracle (Oracle Cloud Infrastructure) Hosts the Outageloop backend server, database and backups Mumbai, India (ap-mumbai-1) No
Cloudflare DNS for mernpearl.com only. Traffic is not proxied through Cloudflare, so it sees no App data Global No

Slack is a destination you choose and connect yourself, using your own credential; see the Data Processing Addendum §5. Third-party status-page operators receive no customer data (§4.2).


7. Compliance

Data held in Forge hosted storage (§2) inherits Atlassian's SOC 2 and ISO 27001 controls for the Forge platform — physical security, encryption at rest and in transit, tenant isolation, platform network security, logging and backup. See Atlassian's Forge and SOC 2 / ISO 27001 documentation.

That inheritance does not extend to the Outageloop backend (§3). MernPearl is responsible for the backend's controls. MernPearl does not hold its own SOC 2 or ISO 27001 certification for the App and does not claim one.


8. Retention and deletion

8.1 While the App is installed

8.2 When you uninstall

8.3 Backups

The backend database is backed up nightly. Each backup is kept for 14 days and then deleted. Data deleted from the database at uninstall therefore remains in backups for up to 15 days before the last backup containing it expires. Backups are readable only by the server's administrator account and are used only to restore service after a failure. Callback secrets inside them remain AES-GCM-encrypted.


9. International transfers

The Outageloop backend is located in India. As described in §3, it holds no personal data. To the extent that any information transferred to it is personal data under the law that applies to you, MernPearl relies on the EU Standard Contractual Clauses (and the UK Addendum to them) as set out in the Data Processing Addendum.


10. Your rights

Because the only personal data the App persists is an Atlassian account ID (§2.1):

Grievance officer (India, Digital Personal Data Protection Act 2023): dpo@mernpearl.com, or by post to the registered office in §13. We respond within 30 days.

If you are a site administrator acting as a data controller, the Data Processing Addendum (https://outageloop.mernpearl.com/dpa) sets out the processing terms in full.


11. Children

The App is a business tool sold through the Atlassian Marketplace and is not directed at children.


12. Changes to this policy

We will update this policy if the App's data handling changes — in particular if a new destination, storage location or sub-processor is added. We publish every version at https://outageloop.mernpearl.com/privacy with its "last updated" date. For a material change we give at least 30 days' notice before it takes effect, on that page and, where we hold contact details for your site (such as the technical contact of a paid Marketplace licence), by email.


13. Contact

MernPearl Technology Private Limited C/O Sunil Kumar Sharma, Bar Chowk, Pilani, Jhunjhunu, Rajasthan 333031, India Privacy: privacy@mernpearl.com · Data Protection Officer: dpo@mernpearl.com