diff --git a/services/web/app/src/Features/Subscription/PaymentService.js b/services/web/app/src/Features/Subscription/PaymentService.js
new file mode 100644
index 0000000000..6f8a12e0a0
--- /dev/null
+++ b/services/web/app/src/Features/Subscription/PaymentService.js
@@ -0,0 +1,81 @@
+// @ts-check
+
+const RecurlyClient = require('./RecurlyClient.js')
+const logger = require('@overleaf/logger')
+const { callbackify } = require('util')
+
+/**
+ * @import { RecurlySubscription, RecurlyAccount, RecurlyCoupon } from "./RecurlyEntities"
+ * @import { ObjectId } from 'mongodb'
+ */
+
+/**
+ * this represents a subset of the Mongo Subscription record
+ *
+ * @typedef {object} MongoSubscription
+ * @property {ObjectId} admin_id
+ * @property {string} [recurlySubscription_id]
+ */
+
+/**
+ * @typedef {object} PaymentRecord
+ * @property {RecurlySubscription} subscription
+ * @property {RecurlyAccount | null} account
+ * @property {RecurlyCoupon[]} coupons
+ */
+
+/**
+ * Get payment information from our Mongo record
+ *
+ * @param {MongoSubscription} subscription
+ * @return {Promise
{t('reduce_costs_group_licenses')}