B Blengi docs

Platform admin

Service orders ledger

The Service orders page at /admin/orders is the platform-admin view of every WorkspaceAddonPurchase ledger row โ€” every one-time addon (Professional AI Setup, etc.) that any workspace has bought, across every workspace on the install. Read-only.

What you see

  • Paid this month + Paid all time โ€” sum of paid + delivered rows in the respective windows.
  • Per-row: workspace name, buyer email + display name, addon name, amount + currency, status pill, purchased-at timestamp, first available Stripe id (invoice โ†’ payment intent โ†’ checkout session).
  • Filter by status: pending, paid, delivered, failed, cancelled, refunded.
  • Search across workspace name, buyer email/name, addon name, and any Stripe id field.

Access

Super-admin only. Same gate as the other platform admin pages โ€” handled by the super_admin route-group middleware, no per-route policy needed.

How orders land here

Every successful checkout writes a row via AddonPurchaseController โ€” either inline through invoiceFor() (saved-card path) or after Stripe Checkout completes (no-card path). The invoice.payment_succeeded webhook is the safety net that flips any pending rows missed by the success URL redirect.

Other places you can see purchases

  • Email โ€” every paid purchase fires NotifyTeamOfAddonPurchaseJob which mails config('mail.team_notify_email') (set BLENGI_TEAM_NOTIFY_EMAIL in .env).
  • Stripe Dashboard โ€” ground truth. Filter Payments by metadata.kind = 'addon_purchase' to see only addon orders.
  • Customer's workspace โ€” each workspace's own /app/billing/addons page shows their own purchase history.

What's NOT on this page (yet)

Read-only. Refund, re-deliver, and mark-delivered actions are planned but not shipped. For now, use the Stripe Dashboard to refund and the operator's own internal process to mark services delivered.