Skip to content

Changelog

Thank you, we'll let you know when we update our APIs.

There was an issue subscribe to the news, please try again later.

Sign up for developer updates:
You can unsubscribe at any time. Read our privacy policy .

Deprecation of Trailing Slashes in URLs

Today we are announcing the deprecation of support for API requests that include a trailing slash at the end of the URL. While our documentation has never endorsed this pattern, we identified a small number of clients still relying on it. To ensure a smooth transition, a 2-month grace period will apply before the behavior is fully removed.

Details

  • Requests using URLs that end with / (e.g., /v0.1/checkouts/) will continue to work during the grace period.
  • After the grace period ends, these requests will return an error.
  • Standard, documented URLs without trailing slashes (e.g., /v0.1/checkouts ) remain fully supported.

Timeline

  • Deprecation announcement: 17.11.2025
  • Grace period: 2 months
  • Removal date: 17.01.2026

Required Action

Please consult the API documentation and update any API calls that include a trailing slash. This change typically only requires removing the final / in affected endpoints.

If you run into issues or need help identifying affected requests, please contact our support team.

Android SDK 6.0.0

Android SDK 6.0.0 has been released.

Offline payments

  • Introduces Offline payments with Solo lite, please refer to the dedicated section in OFFLINE_PAYMENTS.md for more information.

Added:

  • Payment intent now also returns the card reader model and firmware version in new response fields SumUpAPI.Response.CARD_READER_MODEL and SumUpAPI.Response.CARD_READER_FIRMWARE_VERSION at the end of every transaction.

Improvements:

  • Renames package of TransactionInfo: com.sumup.merchant.reader.models.TransactionInfo > com.sumup.checkout.core.models.TransactionInfo
  • Renames package of SumUpState: import com.sumup.merchant.api.SumUpState > import com.sumup.reader.sdk.api.SumUpState
  • Miscellaneous bug fixes and enhancements.

Updates about the technical stack:

  • Minimum supported targetSDK is 35
  • Minimum Kotlin is upgraded to 1.9.0
  • Minimum Kotlin Coroutine is upgraded to 1.8.0
  • Minimum Hilt is upgraded to 2.51.1
  • Minimum Moshi is upgraded to 1.15.0
  • Minimum AppCompat is upgraded to 1.7.0
  • Minimum AndroidX Annotation is upgraded to version 1.8.0
  • Minimum AndroidX Activity is upgraded to version 1.9.1
  • Minimum AndroidX Fragment is upgraded to version 1.7.1
  • Minimum AndroidX Lifecycle is upgraded to version 2.8.1
  • Minimum AndroidX Browser is upgraded to version 1.4.0
  • Minimum AndroidX Navigation is upgraded to version 2.7.7
  • Minimum Material Components is upgraded to 1.12.0
  • Minimum Play Services Location is upgraded to 21.3.0- Minimum AGP is upgraded to 8.8.0
  • Building with AGP 8.8.0 and Java 17
  • Introduces Jetpack Compose BOM version 2023.06.01
  • Requires desugar_jdk_libs version 2.1.5

Android Tap-to-Pay 1.0.1

Fixes

  • Decreased the SDK size by removing unused resources.
  • Fixed an issue where the testing SDK build would not initialize.

Rust SDK

We are happy to announce the release of our Rust SDK. The SDK is maintained under sumup/sumup-rs and covers all of SumUp’s public APIs. For full documentation, see https://docs.rs/sumup.

use sumup::Client;
#[tokio::main]
async fn main() -> Result<(), Box<dyn std::error::Error>> {
let client = Client::default();
let merchant_code = std::env::var("SUMUP_MERCHANT_CODE")
.expect("SUMUP_MERCHANT_CODE environment variable must be set");
let readers = client
.readers()
.list(&merchant_code)
.await
.expect("couldn't list merchant's readers");
let reader = readers
.items
.first()
.expect("merchant doesn't have any paired card readers");
let checkout_reference = format!("checkout-{}", uuid::Uuid::new_v4());
println!("Creating checkout with reference: {}", checkout_reference);
match client
.readers()
.create_checkout(
&merchant_code,
&reader.id,
sumup::CreateReaderCheckoutRequest {
total_amount: sumup::Money {
currency: "EUR".into(),
minor_unit: 2,
value: 1000,
},
affiliate: None,
card_type: None,
description: Some("sumup-rs card reader checkout example".into()),
installments: None,
return_url: None,
tip_rates: None,
tip_timeout: None,
},
)
.await
{
Ok(_) => {
println!("✓ Checkout created successfully!");
}
Err(e) => {
eprintln!("✗ Failed to create checkout: {}", e);
}
}
Ok(())
}

See the repository for more examples and don’t hesitate to let us know if you have any questions.

Android Tap-to-Pay 1.0.0

New Features

  • Added support of Online Pin SCA (Strong Customer Authentication).
  • Added card data to PaymentEvent.TransactionDone event: card type, card scheme, last four digits, and merchant code.
  • Transparent attestation process. The SDK now returns error details if attestation fails in PaymentEvent.TransactionFailed event. This helps developers understand and resolve attestation issues more effectively.
  • API changes to make it more concise. Now TapToPay.startPayment() function returns Flow<PaymentEvent> instead of Flow<Result<PaymentEvent>>.

Android Tap-to-Pay 0.18.0

New Features

  • Added Products to TapToPay.startPayment method.
  • Enabled periodic monitoring and attestation.
  • Now SDK uses Google Trusted Time API.

Android Tap-to-Pay 0.17.4

Fixes

  • Fixed a crash that occurred when attempting to make a payment without explicitly setting skipSuccessScreen parameter.
  • Fixed a bug in Pixel 8 and Pixel 9 devices with Android 16 where the payment would immediately fail a transaction with timeout error.

Android Tap-to-Pay 0.17.3

Fixes

  • Fixed a bug with payment availability when using OkHttp 5.0.0 or higher.

Python SDK

We are happy to announce the release of our Python SDK. The SDK is maintained under sumup/sumup-py and covers all of SumUp’s public APIs. sumup-py support both synchronous and asynchronous calling convention.

import os
import asyncio
from sumup import AsyncSumup
from sumup.readers.resource import CreateReaderCheckoutBody, CreateReaderCheckoutBodyTotalAmount
async def main():
client = AsyncSumup()
merchant_code = os.environ["SUMUP_MERCHANT_CODE"]
readers = await client.readers.list(merchant_code)
reader = readers.items[0]
checkout = await client.readers().create_checkout(
merchant_code,
reader.id,
CreateReaderCheckoutBody(
total_amount=CreateReaderCheckoutBodyTotalAmount(
currency="EUR",
minor_unit=2,
value=1000,
),
description="sumup-py card reader checkout example",
),
)
print(checkout)
if __name__ == "__main__":
asyncio.run(main())

See the repository for more examples and don’t hesitate to let us know if you have any questions.

Android Tap-to-Pay 0.17.2

Fixes

  • Miscellaneous bug and crash fixes

Android Tap-to-Pay 0.17.1

Fixes

  • NoBeanFoundDefinitionError exception that occurred in some cases when starting a payment
  • Miscellaneous bug and crash fixes

Android Tap-to-Pay 0.17.0

New Features

  • Faster Transactions – Reduced latency when initiating transactions, resulting in faster checkout.
  • Mitigated Threats Filter – Attestation now excludes resolved threats for smoother processing and less transaction failures.
  • Affiliate Key Support – Added support for affiliate key integration.
  • Success Screen Skip Flag – New flag to bypass the success screen.
  • Support for targetSDK 35
  • Client-Side Certificate Verification – Enhanced security with device certificate checks during attestation.
  • Pre-PIN Attestation – Attestation is initiated before displaying the PIN screen to enhance security.

Fixes

  • Resolved an issue during TapToPay initialization.

TypeScript / JavaScript SDK

We are happy to announce the release of our TypeScript / JavaScript SDK. The SDK is maintained under sumup/sumup-ts and covers all of SumUp’s public APIs.

The SDK provides easy access to SumUp APIs:

import SumUp from "@sumup/sdk";
const client = new SumUp({
apiKey: process.env.SUMUP_API_KEY,
});
async function main() {
const merchantCode = process.env.SUMUP_MERCHANT_CODE;
if (!merchantCode) {
console.warn(
"Missing merchant code, please specify merchant code using SUMUP_MERCHANT_CODE env variable.",
);
return;
}
const { items: readers } = await client.readers.list(merchantCode);
if (!readers.length) {
console.warn("No readers found, please pair a card reader first.");
return;
}
const reader = readers[0];
const checkout = client.readers.createCheckout(merchantCode, reader.id, {
total_amount: {
// Must match the currency of your merchant account
currency: "EUR",
minor_unit: 100,
value: 500,
},
});
console.info({ checkout });
}
main();

See the repository for more examples and don’t hesitate to let us know if you have any questions.

Android Tap-to-Pay 0.15.2

Fixes

  • Fixed the class duplication issue occurring after obfuscation.

Android Tap-to-Pay 0.15.2

Fixes

  • Mitigated threats are now filtered out during attestation. If a threat has "mitigated": true, it is excluded from the threat list that is used to determine whether the COTS is attested.

Android Tap-to-Pay 0.15.0

New Features

  • New events of the payment process: card requested, card presented, CVM requested, CVM presented - New PaymentException types

Fixes

  • Cleanup PAN data from memory
  • Disable NFC for other apps during the payment process. - Handling empty candidates list in payment processing

Go SDK

We are happy to announce the beta release of our Go SDK. The SDK is maintained under sumup/sumup-go with its acompanying documentation at pkg.go.dev.

The Go SDK provides easy access to SumUp APIs:

package main
import (
"context"
"log"
"os"
"github.com/sumup/sumup-go"
)
func main() {
ctx := context.Background()
client := sumup.NewClient().WithAuth(os.Getenv("SUMUP_KEY"))
checkout, err := client.Checkouts.Create(ctx, sumup.CreateCheckoutBody{
Amount: 123,
CheckoutReference: "TX000001",
Currency: "EUR",
MerchantCode: "MK0001",
})
if err != nil {
log.Printf("[ERROR] create checkout: %v", err)
return
}
log.Printf("[INFO] checkout created: id=%q, amount=%v, currency=%q", *checkout.Id, *checkout.Amount, string(*checkout.Currency))
checkoutSuccess, err := client.Checkouts.Process(ctx, *checkout.Id, sumup.ProcessCheckoutBody{
Card: &sumup.Card{
Cvv: "123",
ExpiryMonth: "12",
ExpiryYear: "2023",
Name: "Boaty McBoatface",
Number: "4200000000000042",
},
PaymentType: sumup.ProcessCheckoutBodyPaymentTypeCard,
})
if err != nil {
log.Printf("[ERROR] process checkout: %v", err)
return
}
log.Printf("[INFO] checkout processed: id=%q, transaction_id=%q", *checkoutSuccess.Id, string(*(*checkoutSuccess.Transactions)[0].Id))
}

See the repository for more examples and don’t hesitate to let us know if you have any questions.

Android SDK 4.3.0

Android SDK 4.3.0 has been released.

Solo USB (Beta)

The Solo card reader now supports connecting and transacting over USB cable. The minimum required Solo software version that supports the USB mode is 3.3.17.2.

If this version (3.3.17.2) is not yet available on your Solo when connected via Bluetooth, you can switch it to standalone mode (Menu -> Connection -> WiFi), login directly on the Solo, and update it to the latest version.

Solo USB is under beta phase which means that the feature still requires some optimization to ensure full stability.

Known limitations: currently, if the USB cable is unplugged, the USB permission on the mobile device will need to be regranted. As of now, Solo is not able to wake up automatically from sleep mode. A connection needs to be reestablished from

Removed:

  • Dropping support for Android 7 (API 25) and below

WooCommerce Plugin Update

New features:

  • Accept payments with alternative payment methods (Follow guides for enabling in your account)
  • Accept card payments with installments in BR.
  • Accept payments with Apple Pay.
  • Support for WooCommerce stock management feature
  • New user experience configuration: merchant can choose to open the payment option in a pop-up instead of the checkout page.

Improvements:

  • Easier reconciliation of orders between WooCommerce and SumUp dashboard:
  • Display WooCommerce order Id on SumUp Sales History.
  • Added transaction code to order description on WooCommerce
  • Added checkout_id in order notes to improve customer support
  • New settings screen for easier setup
  • Multiple code maintenance improvements.
  • Support for Wordpress 6.3
  • Require PHP version 7.2 or greater.

Bugs fixed:

  • Errors during checkout that caused duplicated payment.
  • Issues loading payment methods on checkout.
  • Fixed issue with customer creation during checkout that caused duplicated payment.