SumUp payment plugin for Vendure.
It creates SumUp checkouts from Vendure's PaymentMethodHandler flow and supports both:
checkoutIdThe plugin never handles raw card data inside your Vendure server.
Compatible with Vendure ^3.6.4.
SumUpPluginsumUpPaymentHandlerPOST /payments/sumup/webhookThe webhook endpoint is notification-only. When SumUp calls it, the plugin re-fetches the checkout from SumUp and updates the matching Vendure payment from the checkout state.
Register the plugin and payment handler in your Vendure config:
returnUrl should be a publicly reachable URL that SumUp can call with checkout status updates. In most setups that should be your Vendure server's /payments/sumup/webhook route.
Create a Payment Method in the Vendure Admin UI:
Code: sumupHandler: sumupOptional handler arguments:
merchantCodecheckoutModereturnUrlredirectUrlpaymentDescriptionGlobal defaults can be defined in SumUpPlugin.init() and overridden per payment method when needed.
Once the order is in ArrangingPayment, call addPaymentToOrder with method: "sumup" and any SumUp-specific metadata you need.
The plugin stores SumUp data on the Vendure payment and exposes a safe subset through payments[].metadata.public.
Use checkout_mode: "hosted" or set checkoutMode: "hosted" in plugin/payment-method config.
After addPaymentToOrder, redirect the shopper to:
Use checkout_mode: "widget" if your storefront will mount SumUp's checkout UI itself.
After addPaymentToOrder, read:
Use that checkoutId in your storefront's SumUp client integration. The plugin still treats the webhook callback or a later checkout lookup as the source of truth for final payment state.
The plugin exposes these fields in payments[].metadata.public:
| Field | Description |
|---|---|
checkoutId | SumUp checkout id |
checkoutReference | Merchant checkout reference sent to SumUp |
checkoutMode | hosted or widget |
hostedCheckoutUrl | Hosted Checkout URL when SumUp returns one |
redirectUrl | Redirect URL associated with the checkout |
| Option | Required | Description |
|---|---|---|
apiKey | Yes | SumUp API key or access token. Keep it server-side. |
merchantCode | Yes | SumUp merchant code that receives the payment. |
defaultLanguageCode | No | Language used for the handler description shown in Vendure. |
checkoutMode | No | Default checkout mode: hosted or widget. Defaults to hosted. |
returnUrl | No | Backend callback URL used by SumUp for checkout status updates. |
redirectUrl | No | URL the shopper is sent to after redirect-based payment flows. |
paymentDescription | No | Default SumUp checkout description. |
timeout | No | SumUp SDK request timeout in milliseconds. |
maxRetries | No | SumUp SDK retry count. |
supportedCurrencies | No | Override the built-in supported currency allowlist. |
client | No | Inject a custom SumUp client implementation. Useful for tests. |
The plugin maps SumUp checkout state to Vendure payment state like this:
PAID checkout -> SettledPENDING -> AuthorizedFAILED -> DeclinedEXPIRED -> CancelledCreatedaddPaymentToOrder payment metadata flow described in Vendure's payment docs.examples/docker.CONTRIBUTING.md.