Expand description
§SumUp Rust SDK
Official Rust SDK for the SumUp REST API.
§Quick Start
use sumup::Client;
#[tokio::main]
async fn main() {
// Create a client (reads SUMUP_API_KEY from environment)
let client = Client::default();
// Call an API endpoint
let checkouts = client
.checkouts()
.list(Default::default())
.await
.expect("list checkouts request failed");
println!("found {} checkouts", checkouts.len());
}§Configuration
§Authentication
Set your API key via environment variable or explicitly:
// From environment variable SUMUP_API_KEY
let client = Client::default();
// Explicit token
let client = Client::default()
.with_authorization("your_api_key");§Custom Configuration
use std::time::Duration;
let client = Client::default()
.with_authorization("your_api_key")
.with_timeout(Duration::from_secs(30));§Making API Calls
The SDK organizes endpoints by tags:
// Create a checkout
let checkout = client.checkouts().create(Some(CheckoutCreateRequest {
checkout_reference: "unique-ref".to_string(),
amount: 10.0,
currency: Currency::Eur,
merchant_code: "MCODE".to_string(),
description: None,
return_url: None,
customer_id: None,
purpose: None,
id: None,
status: None,
date: None,
valid_until: None,
transactions: None,
redirect_url: None,
}))
.await
.expect("create checkout");
println!("created checkout {}", checkout.id.unwrap_or_default());
// Transactions with query parameters
use sumup::resources::transactions::ListTransactionsParams;
let transactions = client
.transactions()
.list_deprecated(ListTransactionsParams {
limit: Some(10),
..Default::default()
})
.await
.expect("list transactions");
let count = transactions.items.as_ref().map_or(0, |items| items.len());
println!("fetched {} historical transactions", count);§DateTime Support
The SDK supports both chrono (default) and
jiff for datetime types:
# Use chrono (default)
[dependencies]
sumup = "0.0.1"
# Use jiff instead
[dependencies]
sumup = { version = "0.0.1", default-features = false, features = ["jiff"] }§Error Handling
All SDK calls return a SdkResult whose error side is a SdkError. When the
SumUp API responds with a non-success status, the SDK builds an
SdkError::Api containing an endpoint-specific payload (e.g. a Unauthorized
enum variant). Any undocumented status codes fall back to
SdkError::Unexpected, which preserves the HTTP status and best-effort body
parsing. You can inspect failures like this:
let client = Client::default();
match client.checkouts().list(Default::default()).await {
Ok(checkouts) => println!("retrieved {} checkouts", checkouts.len()),
Err(SdkError::Api(body)) => match body {
ListCheckoutsErrorBody::Unauthorized(details) => eprintln!("unauthorized: {:?}", details),
},
Err(SdkError::Unexpected(status, body)) => {
eprintln!("unexpected {} response: {}", status, body);
}
Err(SdkError::Network(err)) => panic!("network error: {}", err),
}§Features
- chrono (default): Use chrono for datetime types
- jiff: Use jiff for datetime types (mutually exclusive with chrono)
§Resources
Re-exports§
pub use client::Client;pub use error::SdkError;pub use error::SdkResult;pub use error::UnknownApiBody;pub use secret::Password;pub use version::VERSION;pub use crate::resources::*;