Skip to main content
GET
/
apps
/
billing
/
transactions
App Billing Transactions
curl --request GET \
  --url https://api.launchmystore.io/apps/billing/transactions \
  --header 'Authorization: Bearer <token>'
{
  "data.items": [
    {}
  ],
  "data.pagination": {
    "page": 123,
    "limit": 123,
    "total": 123,
    "hasMore": true
  }
}

Documentation Index

Fetch the complete documentation index at: https://docs.launchmystore.io/llms.txt

Use this file to discover all available pages before exploring further.

Every Stripe webhook the platform handles produces a row in AppBillingTransactions. A transaction represents one charge event for an installed app — a subscription renewal, a one-time charge, or a usage- based invoice line. The transaction is the source of truth for developer revenue (after the platform commission). When developer payouts are computed, the payout service sums developerAmount over transactions in status: paid whose createdAt falls in the payout period. Auth: merchant JWT (@Auth(MERCHANT)).

List transactions

GET /apps/billing/transactions
page
integer
default:"1"
Page number.
limit
integer
default:"50"
Page size (max 250).
status
string
Filter by status: pending, paid, refunded, failed.
appId
string
Filter to one app’s transactions. Pass the appId UUID.
curl -X GET "https://api.launchmystore.io/apps/billing/transactions?status=paid&limit=50" \
  -H "Authorization: Bearer <MERCHANT_JWT>"
data.items
array
Array of transaction objects (see schema below).
data.pagination
object

Transaction object

FieldTypeDescription
transactionIdUUIDPrimary key.
appIdUUIDThe app this charge is for.
storeIdUUIDThe merchant store that paid.
installationIdUUIDLinks to the AppInstallation row.
amountdecimalTotal charged to the merchant (e.g. 9.99).
commissionAmountdecimalPlatform commission withheld (typically 20%).
developerAmountdecimalWhat the developer earned: amount - commissionAmount.
currencystringISO-4217 (default USD).
typeenumsubscription, one_time, or usage.
statusenumpending, paid, refunded, failed.
stripeInvoiceIdstringStripe in_… id (subscription / usage charges).
stripePaymentIntentIdstringStripe pi_… id (one-time charges).
billingPeriodStartdatetimeStart of the billed period (subscription / usage only).
billingPeriodEnddatetimeEnd of the billed period.
createdAtdatetimeRow creation time = webhook-receipt time.
updatedAtdatetimeLast status change (e.g. paidrefunded).

Example response

{
  "status": 200,
  "type": "success",
  "data": {
    "items": [
      {
        "transactionId": "8d4f1c10-3b6e-4e76-9b6a-1a17a5be58a0",
        "appId": "fb7c1c8b-8e1d-4f4e-a05c-1b8c5a3b9f02",
        "storeId": "f73049dc-b4d4-4f85-99c2-681a5e351a8a",
        "installationId": "5a0e8d2c-8c0e-4e26-9f70-3bd2bce29c11",
        "amount": "9.99",
        "commissionAmount": "2.00",
        "developerAmount": "7.99",
        "currency": "USD",
        "type": "subscription",
        "status": "paid",
        "stripeInvoiceId": "in_1OqW2NABC...",
        "stripePaymentIntentId": null,
        "billingPeriodStart": "2026-04-15T00:00:00.000Z",
        "billingPeriodEnd":   "2026-05-15T00:00:00.000Z",
        "createdAt": "2026-04-15T03:12:47.881Z",
        "updatedAt": "2026-04-15T03:12:49.012Z"
      }
    ],
    "pagination": { "page": 1, "limit": 50, "total": 7, "hasMore": false }
  }
}

Get a transaction summary

GET /apps/billing/transactions/summary returns aggregated totals across all of the merchant’s app charges. Useful for dashboards.
curl -X GET "https://api.launchmystore.io/apps/billing/transactions/summary" \
  -H "Authorization: Bearer <MERCHANT_JWT>"
{
  "status": 200,
  "data": {
    "totalSpent": 247.83,
    "totalCommission": 49.56,
    "totalToDevelopers": 198.27,
    "currency": "USD",
    "transactionCounts": {
      "paid": 23,
      "refunded": 1,
      "failed": 0,
      "pending": 0
    }
  }
}
totalSpent, totalCommission, and totalToDevelopers are reported in the merchant’s default currency. Transactions originally booked in other currencies are converted at the FX rate at receipt time and the rate is frozen onto the row — re-running the summary later returns the same totals.

Get one transaction

There is no per-id endpoint. Filter the list call by transactionId if you need a single row:
curl -X GET "https://api.launchmystore.io/apps/billing/transactions?limit=1&transactionId=<UUID>" \
  -H "Authorization: Bearer <MERCHANT_JWT>"

Refunds

Refunds are issued either through the Stripe Dashboard (manual ops) or programmatically by the developer via the Stripe API. When Stripe fires charge.refunded, the webhook handler:
  1. Marks the transaction as status: refunded.
  2. Inserts a negative ledger entry on the developer’s earnings balance.
  3. Fires app/subscription/refunded to the app.
The original transaction is not deleted — historical reporting stays intact.

Error codes

CodeDescription
401Missing or invalid merchant JWT.
403The merchant has no installed apps.
400Invalid status filter — must be one of pending, paid, refunded, failed.