Espresso Privacy Policy

Provider: Totesoft LLC
Email: info@totesoft.com
App: Espresso (Jira workflow post function, Atlassian Forge)
Last updated: August 20, 2026

This Privacy Policy explains how the Espresso app for Jira Cloud accesses, processes, stores, and logs End-User Data. It supplements Totesoft's general privacy policy at https://www.totesoft.com/privacy-policy. To the extent that any provision of the General Policy conflicts with the provisions of this App-Specific Policy regarding Espresso, the provisions of this App-Specific Policy shall prevail.

1. Scope and roles

Espresso is an Atlassian Forge workflow post function. A Jira administrator configures Espresso on a workflow transition to read two numeric source fields, apply an arithmetic operation, and write the result to a numeric target field.
  1. Jira administrator (Customer) - Configures Espresso on a workflow transition to read two numeric source fields, apply an arithmetic operation, and write the result to a numeric target field.
  2. The Customer is the data controller of all End-User Data processed by the app.
    1. Totesoft personnel have no access to End-User Data; the only exception is diagnostic log access through Atlassian's Forge tooling during a customer-initiated support investigation, as described in our app privacy notice and debug logging statement. Espresso marketplace app does not store or transfer end-userdata outside of the Atlassian platform.
    2. The customer controls which workflows and fields are configured and remains responsible for the Jira content placed in those fields and for providing required notices to its users.
  3. Totesoft personnel have no access to End-User Data; the only exception is diagnostic log access through Atlassian's Forge tooling during a customer-initiated support investigation, as described in our app privacy notice and debug logging statement. Espresso marketplace app does not store or transfer end-userdata outside of the Atlassian platform.
  4. The customer controls which workflows and fields are configured and remains responsible for the Jira content placed in those fields and for providing required notices to its users.

2. Data Espresso accesses and processes

Based on the customer's configuration and the issue being transitioned, Espresso may access or process:
  1. Post-function configuration, including source field identifiers, target field identifier, and arithmetic operator;
  2. The transitioned issue's identifier and issue key;
  3. The transition identifier and transition name; For example, "To Do", "Resolved", "In Progress", "In Review", etc.
  4. The two configured numeric source values and target values to be used in the arithmetic operation;
  5. The calculated numeric result and configured target field identifier;
Espresso does not need issue descriptions, comments, attachments, passwords, personal access tokens, payment card information, or Atlassian account credentials for the functionality described above. Customers should not place sensitive personal information in fields selected for Espresso unless they have an appropriate legal basis and have assessed the app's use.

3. Data Espresso writes to Jira

First, while configuring the post function, the espresso configuration screen reads the list of fields defined in the Jira rest api endpoint (GET /rest/api/3/field) to offer numeric fields for selection. Espresso only reads field metadata (names and identifiers), once the user has selected required fields, and field operations, espresso saves the post function configuration.

Second, on each workflow transition of the Espresso post function, the espresso app

  1. Reads the two configured numeric source fields on the transitioned issue;
  2. Calculates a result using the configured operator;
  3. Updates the results to the configured target field, with Jira's notification-suppression option (notifyUsers=false) so that routine recalculations do not email watchers; Jira decides whether suppression is honored, and where it is not permitted, Jira sends its normal notifications.

Source values and the calculated result are held in memory for the duration of that single execution and are then discarded. They are not stored, and not written to application logs. Espresso does not create, modify, or delete comments, attachments, worklogs, links, users, groups, projects, workflows, or issue transitions, and it never deletes or transitions issues. Beyond the target-field update, its only write is its own diagnostic run history in Forge hosted storage.

4. Data Espresso keeps in forge hosted storage

Espresso keeps a small bounded diagnostic history for each run, so that an administrator can see whether a rule is working. This is stored in Atlassian Forge hosted key-value storage. The current implementation groups a rule by its configured source and target field identifiers and keeps up to 10 recent records for that rule.

Forge scopes storage per app installation. It is not a database operated by Totesoft, and Espresso contains no mechanism for Totesoft to read an installation's stored records.

  1. How it is grouped
    1. Records are grouped per rule. The storage key is derived from the rule's three configured custom field identifiers (source 1, source 2, target) — for example espresso:runs:customfield_10089.customfield_10090.customfield_10064. The key contains field identifiers only; it contains no issue data and no field values.
    2. Because identity is the field triple, two post functions configured with the same three fields on different transitions share one history. Each record carries its own transition identifier and name, so the entries remain distinguishable.
  2. How much
  3. Up to 10 records per rule. The eleventh run displaces the oldest. Storage per rule is therefore bounded and does not grow over time.

  4. What each record contains
  5. Field Example Notes
    timestamp;2026-08-18T21:28:53.921ZRule execution timestamp
    issue key;ABC-22214Identifies the issue that was transitioned
    Transition identifier11 
    Transition NameIn Process → Done 
    OperationADDThe configured arithmetic operation applied to the source values
    Outcome codeSUCCESS, FIELD_NOT_AVAILABLEFrom a fixed, closed vocabulary
    Severityok, skipped, error 
    Outcome summary;"Target field updated."Fixed text, chosen by the outcome code
    Technical detail;HTTP 400; Jira did not accept field customfield_10064See below
    Retry count;0Jira retries performed during the run
    Execution duration.940 ms 

    The storage object also contains an update timestamp.

  6. What a record never contains
    1. Numeric source values
    2. The calculated target value
    3. Any user identifier — no account ID, name, email address, or display name
    4. Any free-form text originating from Jira or from an exception

    The "technical detail" field is assembled from an allowlist: an HTTP status code and a custom field identifier. Jira's raw error responses are deliberately not stored, because Jira often quotes the rejected value back in its error text, and that value derives from the customer's field data. This is enforced in code and covered by automated tests.

  7. Who can see the stored records
    1. Jira administrators — yes, by design. The last ten runs for a rule are displayed in that post function's configuration screen, under "Recent runs". There is no interface for browsing the underlying key-value store directly, but its contents are surfaced in the app's own UI.
    2. Totesoft — no. Espresso provides no function, endpoint, or interface that reads an installation's stored records back to the vendor.

5. Logging and Totesoft access

  1. Application logs for regular operation
  2. Espresso writes one structured log entry per run. It contains the same outcome information as the stored record: outcome code, severity, technical detail, issue key, transition identifier, rule identifier, retry count and duration.

    Forge application logs are hosted through Atlassian's developer platform and are visible and can be accessed by authorized Totesoft personnel through the Atlassian developer console, as they are for every Forge app. They are used for diagnosing faults.

    Field values are not written to logs during normal operation.

    Two categories of text reach logs but never storage:

    1. Jira error response bodies, only when verbose logging is enabled (below);
    2. Exception messages, when an unexpected fault occurs. The stored record keeps only the error class (for example TypeError).

    Totesoft does not operate a separate remote application server for Espresso. The reviewed production design declares no external network egress and no third-party analytics or error-reporting service.

  3. Verbose logging
    1. Espresso supports a verbose logging mode, disabled by default.
    2. When enabled, log entries additionally include the numeric source values, the calculated result, and Jira's raw error responses.
    3. It is controlled by a Forge environment variable (ESPRESSO_DEBUG) that can only be set by Totesoft, per environment, using the Forge CLI. It is intended for diagnosing a specific reported fault and is not enabled as a matter of course.

6. Purposes of processing

Totesoft processes the data described above to:

  1. provide and execute the configured calculation;
  2. show administrators whether a rule recently ran and what outcome occurred;
  3. validate configuration and troubleshoot field-context, permission, rate-limit, or Jira API failures;
  4. protect the app and Jira site against invalid or unsafe writes;
  5. respond to support and security requests; and
  6. maintain, test, and improve the reliability of Espresso.

Totesoft does not sell End-User Data or use Jira issue content for advertising.

7. Disclosure and subprocessors

Espresso does not send End-User Data to an external Totesoft backend or to independent analytics providers in the reviewed design. Atlassian provides Jira Cloud, Forge execution, Forge hosted storage, and Forge logging. Atlassian's processing is governed by the customer's agreement with Atlassian and Atlassian's applicable privacy, security, and subprocessor terms.

Totesoft may disclose information when required by law, to protect legal rights or security, or with the customer's authorization. If Totesoft later adds an external service or subprocessor, this policy and the Marketplace Privacy and Security answers must be updated before that change is released.

8. Retention and deletion

Workflow configuration: retained by Jira according to the customer's workflow configuration and Atlassian's product behavior.

Run history: limited by the app to the 10 most recent records per rule. A new record removes the oldest record after the limit is reached.

Forge logs: retained for 30 days, which is Atlassian's current Forge developer-console retention period.1 Any diagnostic material copied into a support ticket must follow the support-ticket retention rule approved by Totesoft.

Uninstallation: Atlassian currently states that Forge hosted storage is soft-deleted and retained for 28 days after uninstall.2 Reinstalling does not automatically restore the prior data.2 With customer consent, Totesoft may request relinking through Atlassian within 21 days of uninstall so Atlassian can process the request before the retention period ends.3

Customer-requested deletion: Espresso keeps only the 10 most recent run-history records per rule and overwrites the oldest record when a new one is stored. Totesoft does not have a separate customer-facing delete button for Forge key-value records. A Jira administrator who wants earlier removal of stored diagnostics should email support@totesoft.com from an authorized site-admin account. Totesoft will take the technically available steps, which may include coordinating uninstall. If the app is uninstalled, Atlassian soft-deletes Forge hosted storage and retains it for 28 days.2 Reinstalling does not automatically restore the prior data.2 With the customer's consent, Totesoft may request relinking through Atlassian within 21 days of uninstall.3 After that window, Atlassian permanently deletes the data under its standard retention and disposal policy.3 Espresso does not delete Jira issue fields, workflow configuration, or Forge logs that remain only in Atlassian's logging infrastructure.

Totesoft will not promise deletion methods that the app or Atlassian platform does not technically provide. Requests may require coordination with the customer's Jira administrator or Atlassian support.

9. Data rights and customer requests

Requests concerning access, correction, deletion, restriction, objection, or portability should be sent to support@totesoft.com. Totesoft will acknowledge a request within three business days. We may ask the requester to verify their identity and their relationship to the Jira site. Because Espresso data lives in the customer's Atlassian site, we typically need authorization from a Jira administrator before accessing, changing, or requesting deletion of installation-scoped diagnostics. Requests about Jira issue content will be directed to the relevant customer administrator. Requests about Espresso's Forge-hosted run history will follow the deletion process in section 8.

Because the customer controls the Jira site and issue content, Totesoft may direct an end user to the relevant customer administrator. Totesoft may require the customer's authorization before disclosing or changing installation-scoped data.

10. Security

Espresso uses Atlassian Forge execution and hosted storage. Totesoft applies least-privilege scope review, environment access controls, code review, dependency management, and diagnostic minimization appropriate to the app. No method of storage or transmission is completely secure.

Report suspected vulnerabilities to security@totesoft.com. Do not include sensitive production values in the initial report.

11. Changes

Totesoft may update this policy when Espresso's functionality, permissions, storage, logging, legal requirements, or service providers change. The effective date above will be updated. Material changes should also be identified in release notes or other appropriate customer communications.

Notes

  1. Atlassian, “View app logs,” Forge documentation, last updated 28 July 2026: “Logs are only available for the past 30 days and all dates are in UTC.” https://developer.atlassian.com/platform/forge/view-app-logs/
  2. Atlassian, “Storage,” Forge documentation, Data recovery for apps with hosted storage: “Forge hosted storage retains data for 28 days after uninstallation. However, when a customer reinstalls an app that uses Forge hosted storage, data from the previous installation is not automatically restored.” https://developer.atlassian.com/platform/forge/storage-reference/
  3. Atlassian, “Data lifecycle for Forge-hosted storage,” Forge documentation, last updated 17 December 2024: after uninstall, data is first “soft deleted”; “if a request is made within 21 days of uninstallation, the new installation can be relinked to the old data.” Forge follows Atlassian's internal Standard Data Retention and Disposal policy. https://developer.atlassian.com/platform/forge/storage-reference/hosted-storage-data-lifecycle/