Skip to main content

Extension Purchases: payment without delivery

A buyer who pays for an extension normally has it installed in the same Stripe webhook pass. When that does not happen, Lumio refunds the payment automatically if the extension can no longer be delivered (see Webhooks › Automatic refund). Two cases are left over, and nothing retries them on its own:

  • the install failed because of a temporary error, which is never refunded automatically;
  • the automatic refund failed, for example because Stripe refused it.

The list Admin → Commerce → Undelivered payments (/undelivered-purchases) shows these payments so support can resolve them.

What is on the list​

A purchase is listed when all of these are true:

  • its status is still completed (not refunded or disputed);
  • the extension was never installed for the buying account after the payment;
  • the payment is older than one hour (younger payments may still be in progress).

Each row shows the payment time, the extension and the buying account (both shown as deleted once they no longer exist), the amount, the Stripe Checkout Session and PaymentIntent ids, and the reason:

ReasonMeaning
detachedThe extension or its version was deleted or unpublished while the checkout was open.
not_installableThe account lost access to the extension between checkout and payment.
install_failedA temporary error stopped the install. This case is never refunded automatically.
refund_failedThe automatic refund did not go through. The cause is in the API log.
(empty)Unknown, for purchases recorded before the reason was stored.

Newest payments come first, and you can load more rows page by page.

Uninstalling an extension later, deleting it, or deleting the buying account never puts a purchase on the list: delivery is recorded when the install happens, not checked again afterwards.

Resolving a row​

There is no separate "resolve" button. A row leaves the list on its own when one of these happens:

  • Refund in Stripe. Refund the PaymentIntent in the Stripe Dashboard. Stripe sends charge.refunded, Lumio marks the purchase refunded and debits the developer's balance.
  • Install the extension. If the extension can still be delivered, install it for the buying account (or ask the buyer to install it from the store). Any successful install of that extension for that account marks the purchase delivered.

Access​

The list needs the admin-scope permission extension-purchases:read, which the system_admin role holds. It is read-only.

API: GraphQL adminUndeliveredExtensionPurchases and REST GET /v1/admin/extension-purchases/undelivered (see the GraphQL and REST references).