SkillAgentSearch skills...

ShippingRates

.NET wrapper for UPS, FedEx, USPS and DHL shipping rate APIs

Install / Use

/learn @alexeybusygin/ShippingRates
About this skill

Quality Score

0/100

Supported Platforms

Universal

README

ShippingRates

Build NuGet Version

ShippingRates is a .NET library for retrieving shipping rates from UPS, FedEx, USPS, and DHL APIs.

Why Use It

  • 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

Supported Platforms

  • .NET 6+
  • .NET Standard 2.0
  • .NET Framework 4.6.1+

Install

Available on NuGet:

dotnet add package ShippingRates

Choose Your Path

Upgrade Notes

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.

Quick Start

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.

Carrier Setup

Use the carrier-specific setup pages for constructor overloads, configuration options, and examples:

Shipment Options

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);

Error Handling

RateManager.GetRates and RateManager.GetRatesAsync aggregate provider responses into:

  • shipment.Errors for carrier/API errors that are generally safe to surface to end users
  • shipment.InternalErrors for 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

Credits

Originally forked from DotNetShipping by @kylewest. Package icon by Fredy Sujono.

View on GitHub
GitHub Stars62
CategoryDevelopment
Updated9h ago
Forks17

Languages

C#

Security Score

100/100

Audited on Mar 28, 2026

No findings