ShippingRates is a .NET library for retrieving shipping rates from UPS, FedEx, USPS, and DHL APIs.
- Query multiple carriers through one
RateManager - Work with sync or async APIs
- Support multiple packages in a single shipment
- Apply shipment-level options such as Saturday delivery
- Extend returned prices with custom rate adjusters
- .NET 6+
- .NET Standard 2.0
- .NET Framework 4.6.1+
Available on NuGet:
dotnet add package ShippingRates- New integration: start with Quick Start, then open the carrier-specific page you need in Carrier Setup.
- Upgrading from an older version: start with Breaking changes.
- Tuning shared shipment behavior: see Shipment Options.
- Looking for deeper docs: open docs/README.md.
ShippingRates 4.x includes FedEx breaking changes and uses the modern FedEx REST API with OAuth 2.0.
If you are upgrading an existing integration, start with Breaking changes.
using System.Collections.Generic;
using System.Net.Http;
using ShippingRates;
using ShippingRates.ShippingProviders.FedEx;
using ShippingRates.ShippingProviders;
using ShippingRates.ShippingProviders.Usps;
using var httpClient = new HttpClient();
var rateManager = new RateManager();
var upsConfiguration = new UPSProviderConfiguration
{
ClientId = upsClientId,
ClientSecret = upsClientSecret,
AccountNumber = upsAccountNumber,
UseProduction = false
};
rateManager.AddProvider(new UPSProvider(upsConfiguration, httpClient));
var fedExConfiguration = new FedExProviderConfiguration
{
ClientId = fedexClientId,
ClientSecret = fedexClientSecret,
AccountNumber = fedexAccountNumber,
HubId = fedexHubId,
UseProduction = false
};
rateManager.AddProvider(new FedExProvider(fedExConfiguration, httpClient));
var uspsConfiguration = new UspsProviderConfiguration
{
ClientId = uspsClientId,
ClientSecret = uspsClientSecret,
UseProduction = false
};
rateManager.AddProvider(new UspsProvider(uspsConfiguration, httpClient));
var dhlConfiguration = new DHLProviderConfiguration(dhlSiteId, dhlPassword, useProduction: false);
rateManager.AddProvider(new DHLProvider(dhlConfiguration, httpClient));
var packages = new List<Package>
{
new Package(12, 12, 12, 35, 150),
new PackageKgCm(4, 4, 6, 15, 250)
};
var origin = new Address("", "CT", "06405", "US");
var destination = new Address("", "", "20852", "US");
Shipment shipment = await rateManager.GetRatesAsync(origin, destination, packages);
foreach (Rate rate in shipment.Rates)
{
Console.WriteLine(rate);
}The sample app in SampleApp/Program.cs shows a fuller end-to-end setup.
Use the carrier-specific setup pages for constructor overloads, configuration options, and examples:
Pass shipment-level options through ShipmentOptions:
var shipment = await rateManager.GetRatesAsync(
origin,
destination,
packages,
new ShipmentOptions
{
SaturdayDelivery = true,
ShippingDate = new DateTime(2020, 7, 15),
PreferredCurrencyCode = "EUR",
FedExOneRate = true,
FedExPackagingTypeOverride = FedExPackagingType.FedExEnvelope
});| Name | Default | Meaning |
|---|---|---|
SaturdayDelivery |
false |
Request Saturday delivery rates when available. |
ShippingDate |
null |
Pickup date. Uses the current date and time when omitted. |
PreferredCurrencyCode |
USD |
Preferred ISO currency code for FedEx rates. |
FedExOneRate |
false |
Enable FedEx One Rate pricing. |
FedExPackagingTypeOverride |
null |
Override the FedEx packaging type for the shipment. |
FedExOneRatePackageOverride |
null |
Legacy FedEx One Rate override. Prefer FedExPackagingTypeOverride. |
If ShipmentOptions.SaturdayDelivery is enabled, inspect Rate.Options.SaturdayDelivery on returned rates:
var anySaturdayDeliveryMethods = shipment.Rates.Any(r => r.Options.SaturdayDelivery);RateManager.GetRates and RateManager.GetRatesAsync aggregate provider responses into:
shipment.Errorsfor carrier/API errors that are generally safe to surface to end usersshipment.InternalErrorsfor internal processing failures and diagnostics
foreach (var error in shipment.Errors)
{
Console.WriteLine(error.Number);
Console.WriteLine(error.Source);
Console.WriteLine(error.Description);
}
foreach (var error in shipment.InternalErrors)
{
Console.WriteLine(error);
}- Documentation index
- UPS provider
- FedEx provider
- USPS provider
- DHL provider
- Breaking changes
- Release notes
- HttpClient lifecycle
- Logging
- Rate adjusters
- Custom shipping providers
- 3rd party docs
Originally forked from DotNetShipping by @kylewest. Package icon by Fredy Sujono.