Orchestration API
- Added an endpoint to list the accounts a user has access to
- Invoices are now marked as paid when a payment is captured, rather than when it is authorized
Checkout SDK
- Added validation for the state/province field in the address element
Orchestration API
- Added new webhook events for payment reversals, failed captures, and price and product changes
- Fixed unique user fields not consistently rejecting duplicate values
Dashboard
- The dashboard now displays the new webhook event types
Checkout SDK
- Fixed the card element losing its theme after re-rendering
Orchestration API
- Improved the payment confirmation response with additional details
Dashboard
- Added a country selector to the shipping and billing address in the customer detail view
- Prices in the payment detail view are now clickable links
Orchestration API
- Added cursor-based pagination to list endpoints
- Gateway profiles now validate PSP API credentials before they can be saved
Dashboard
- Added a customizable dashboard layout with drag-and-drop widgets
- Added a total gross revenue chart
- Added PSP response logs to the payment detail view
- Added links to open a payment directly in the PSP dashboard from the payment detail view
Checkout SDK
- Fixed the cardholder name field height not adjusting to its content
Dashboard
- Added a projected billing report
Dashboard
- Fixed timezone handling and previous-period alignment in the revenue chart
- Fixed the customer value report inflating invoice counts
Orchestration API
- Added a webhook delivery history endpoint
- Fixed a race condition that could corrupt payment state during confirm operations
- Fixed webhook delivery records rejecting some valid HTTP response codes
Dashboard
- Added period comparison and trend indicators to dashboard graphs
- Added hyperlinks on dashboard widgets to drill into the underlying data
- Added multi-select support to filter chips
- Reports now bucket by hour when a single day is selected
- Fixed reports grouped by gateway profile showing profile IDs instead of names