{"id":304192,"date":"2026-04-30T19:38:39","date_gmt":"2026-04-30T19:38:39","guid":{"rendered":"https:\/\/wordpress.org\/plugins\/dm-usps-shipping\/"},"modified":"2026-04-30T19:38:39","modified_gmt":"2026-04-30T19:38:39","slug":"dependent-media-live-rates-for-usps","status":"publish","type":"plugin","link":"https:\/\/eu.wordpress.org\/plugins\/dependent-media-live-rates-for-usps\/","author":16819691,"comment_status":"closed","ping_status":"closed","template":"","meta":{"_crdt_document":"","version":"1.1.0","stable_tag":"1.1.0","tested":"6.9.4","requires":"6.2","requires_php":"7.4","requires_plugins":null,"header_name":"Dependent Media Live Rates for USPS","header_author":"Dependent Media","header_description":"Live USPS shipping rates for WooCommerce using the USPS REST API. Domestic US and international, with multi-box packing. Bring your own USPS Developer Portal credentials &mdash; no middleman, no monthly fee.","assets_banners_color":"bcc7c4","last_updated":"2026-04-30 19:38:39","external_support_url":"","external_repository_url":"","donate_link":"","header_plugin_uri":"https:\/\/github.com\/Dependent-Media\/dm-usps-shipping","header_author_uri":"https:\/\/dependentmedia.com","rating":0,"author_block_rating":0,"active_installs":0,"downloads":63,"num_ratings":0,"support_threads":0,"support_threads_resolved":0,"author_block_count":0,"sections":["description","installation","faq","changelog"],"tags":{"1.1.0":{"tag":"1.1.0","author":"hsojhsoj","date":"2026-04-30 19:38:39"}},"upgrade_notice":{"1.1.0":"<p>Plugin renamed to &quot;Dependent Media Live Rates for USPS&quot; to comply with WordPress.org naming guidance. No functional changes; existing settings, shipping zones, and credentials are preserved.<\/p>","1.0.1":"<p>Metadata-only fix to the <code>Plugin URI<\/code> header. No functional changes.<\/p>","1.0.0":"<p>First public release. No breaking changes from 0.3.<\/p>","0.3.0":"<p>Adds multi-box packing. Existing carts may show different (more accurate) totals after upgrading. Switch the new Packing strategy setting to &quot;Combined&quot; to preserve v0.2 behavior.<\/p>","0.2.0":"<p>Adds international shipping rates. Existing domestic settings are preserved automatically.<\/p>","0.1.0":"<p>Initial release.<\/p>"},"ratings":[],"assets_icons":{"icon-128x128.png":{"filename":"icon-128x128.png","revision":3519931,"resolution":"128x128","location":"assets","locale":"","width":128,"height":128},"icon-256x256.png":{"filename":"icon-256x256.png","revision":3519931,"resolution":"256x256","location":"assets","locale":"","width":256,"height":256}},"assets_banners":{"banner-1544x500.png":{"filename":"banner-1544x500.png","revision":3519931,"resolution":"1544x500","location":"assets","locale":"","width":1544,"height":500},"banner-772x250.jpg":{"filename":"banner-772x250.jpg","revision":3519931,"resolution":"772x250","location":"assets","locale":"","width":772,"height":250}},"assets_blueprints":{},"all_blocks":[],"tagged_versions":["1.1.0"],"block_files":[],"assets_screenshots":[],"screenshots":[],"jetpack_post_was_ever_published":false},"plugin_section":[],"plugin_tags":[193847,3546,5139,3519,286],"plugin_category":[45],"plugin_contributors":[254136],"plugin_business_model":[],"class_list":["post-304192","plugin","type-plugin","status-publish","hentry","plugin_tags-live-rates","plugin_tags-shipping","plugin_tags-shipping-rates","plugin_tags-usps","plugin_tags-woocommerce","plugin_category-ecommerce","plugin_contributors-hsojhsoj","plugin_committers-hsojhsoj"],"banners":{"banner":"https:\/\/ps.w.org\/dependent-media-live-rates-for-usps\/assets\/banner-772x250.jpg?rev=3519931","banner_2x":"https:\/\/ps.w.org\/dependent-media-live-rates-for-usps\/assets\/banner-1544x500.png?rev=3519931","banner_rtl":false,"banner_2x_rtl":false},"icons":{"svg":false,"icon":"https:\/\/ps.w.org\/dependent-media-live-rates-for-usps\/assets\/icon-128x128.png?rev=3519931","icon_2x":"https:\/\/ps.w.org\/dependent-media-live-rates-for-usps\/assets\/icon-256x256.png?rev=3519931","generated":false},"screenshots":[],"raw_content":"<!--section=description-->\n<p>Dependent Media Live Rates for USPS calculates real-time USPS shipping rates at checkout using your own USPS Developer Portal credentials, by talking directly to the USPS REST API (the current API \u2014 not the retired Web Tools API).<\/p>\n\n<p>This plugin is <strong>not affiliated with or endorsed by the United States Postal Service<\/strong>. \"USPS\" is a trademark of the United States Postal Service and is used in this plugin's name solely to describe the service the plugin integrates with.<\/p>\n\n<h4>Domestic US<\/h4>\n\n<ul>\n<li>USPS Ground Advantage<\/li>\n<li>USPS Priority Mail<\/li>\n<li>USPS Priority Mail Express<\/li>\n<\/ul>\n\n<h4>International<\/h4>\n\n<ul>\n<li>USPS First-Class Package International<\/li>\n<li>USPS Priority Mail International<\/li>\n<li>USPS Priority Mail Express International<\/li>\n<\/ul>\n\n<h4>Other features<\/h4>\n\n<ul>\n<li>Per-product weight and dimensions, with configurable defaults for products that have none set<\/li>\n<li>Separate domestic and international service toggles \u2014 enable only what you want to offer<\/li>\n<li>Automatic routing: the plugin detects destination country and hits the right USPS endpoint<\/li>\n<li><strong>Multi-box packing<\/strong> by default \u2014 each cart line item is rated as its own package and costs are summed. Heavy lines are automatically split across multiple boxes to stay within USPS weight caps. A \"combined\" mode is also available for stores that genuinely ship everything in one box.<\/li>\n<li>Only services that price every box are offered \u2014 partial coverage would produce a misleading total<\/li>\n<li>Optional fallback flat rate if the USPS API is unreachable<\/li>\n<li>Debug logging via WooCommerce \u2192 Status \u2192 Logs<\/li>\n<\/ul>\n\n<h4>You bring your own USPS API credentials<\/h4>\n\n<p>This plugin does not proxy rate requests through any third party. You register your store as a USPS Developer Portal application once, paste the Consumer Key and Consumer Secret into the plugin settings, and rates go directly from USPS to your site. There is no monthly fee and no per-request cost.<\/p>\n\n<p>Register at: <a href=\"https:\/\/developers.usps.com\/\">https:\/\/developers.usps.com\/<\/a><\/p>\n\n<h4>Privacy<\/h4>\n\n<p>When a customer reaches checkout, the plugin sends the destination postal code (and country, for international) along with the package dimensions and weight to the USPS REST API at <code>apis.usps.com<\/code>. No customer name, email, or other personally identifying information is transmitted. OAuth2 access tokens are cached locally in a WordPress transient.<\/p>\n\n<h4>Source code<\/h4>\n\n<p>Development happens on GitHub: <a href=\"https:\/\/github.com\/Dependent-Media\/dm-usps-shipping\">https:\/\/github.com\/Dependent-Media\/dm-usps-shipping<\/a>. Issues and pull requests welcome.<\/p>\n\n<h3>External services<\/h3>\n\n<p>This plugin connects to the USPS (United States Postal Service) REST API to obtain live shipping rates at WooCommerce checkout. This is the entire purpose of the plugin: without this connection, no rates can be calculated.<\/p>\n\n<p><strong>What is the service?<\/strong> The USPS REST API at <code>https:\/\/apis.usps.com<\/code>, operated by the United States Postal Service. The plugin uses two endpoints:<\/p>\n\n<ul>\n<li><code>POST \/oauth2\/v3\/token<\/code> \u2014 to obtain an OAuth2 access token using the merchant's USPS Developer Portal Consumer Key and Consumer Secret.<\/li>\n<li><code>POST \/prices\/v3\/total-rates\/search<\/code> and <code>POST \/international-prices\/v3\/total-rates\/search<\/code> \u2014 to obtain shipping rates for a given package.<\/li>\n<\/ul>\n\n<p><strong>What data is sent, and when?<\/strong><\/p>\n\n<ul>\n<li>When a customer reaches the WooCommerce shipping calculation step (typically the Cart or Checkout page), the plugin sends, for each package being rated: the origin ZIP code (configured by the merchant), the destination postal code, the destination country, and the package weight, length, width, and height.<\/li>\n<li>When the plugin needs to authenticate to the USPS API (the first time, and again when the cached token has expired), it sends the merchant's USPS Consumer Key and Consumer Secret to the OAuth2 token endpoint.<\/li>\n<li>No customer name, email address, IP address, or other personally identifying information is transmitted to USPS by this plugin.<\/li>\n<\/ul>\n\n<p><strong>Who provides the service?<\/strong> The United States Postal Service.<\/p>\n\n<ul>\n<li>USPS Developer Portal Terms and Conditions: <a href=\"https:\/\/developers.usps.com\/terms-and-conditions\">https:\/\/developers.usps.com\/terms-and-conditions<\/a><\/li>\n<li>USPS Privacy Policy: <a href=\"https:\/\/www.usps.com\/privacypolicy\/\">https:\/\/www.usps.com\/privacypolicy\/<\/a><\/li>\n<\/ul>\n\n<p><strong>Is the use of this service required?<\/strong> Yes. Calculating live USPS rates is the plugin's only function, and it cannot be performed without contacting the USPS REST API. Merchants who do not wish to use this service should not install or activate this plugin.<\/p>\n\n<!--section=installation-->\n<ol>\n<li>Upload the plugin files to <code>\/wp-content\/plugins\/dependent-media-live-rates-for-usps\/<\/code>, or install through the WordPress plugins screen.<\/li>\n<li>Activate the plugin through the <strong>Plugins<\/strong> screen in WordPress.<\/li>\n<li>Register a USPS Developer Portal application at <a href=\"https:\/\/developers.usps.com\/\">https:\/\/developers.usps.com\/<\/a> and copy the Consumer Key and Consumer Secret.<\/li>\n<li>Go to <strong>WooCommerce \u2192 Settings \u2192 Shipping<\/strong>, open the shipping zone you want to offer USPS rates in, and add <strong>USPS Live Rates (DM)<\/strong> as a shipping method.<\/li>\n<li>Click into the method, paste your Consumer Key and Consumer Secret, pick which services to offer, and save.<\/li>\n<li>Test with a real cart to confirm rates are returned.<\/li>\n<\/ol>\n\n<!--section=faq-->\n<dl>\n<dt id=\"does%20this%20work%20with%20the%20old%20usps%20web%20tools%20api%3F\"><h3>Does this work with the old USPS Web Tools API?<\/h3><\/dt>\n<dd><p>No. The USPS Web Tools API was retired in early 2026. This plugin uses the current USPS REST API (<code>apis.usps.com<\/code>) exclusively.<\/p><\/dd>\n<dt id=\"is%20there%20a%20monthly%20fee%3F\"><h3>Is there a monthly fee?<\/h3><\/dt>\n<dd><p>No. The plugin is free and calls the USPS API directly with your own credentials. USPS does not charge for rate lookups on their Developer Portal at the time of writing.<\/p><\/dd>\n<dt id=\"what%20happens%20if%20the%20usps%20api%20is%20down%3F\"><h3>What happens if the USPS API is down?<\/h3><\/dt>\n<dd><p>If you enable the fallback rate in settings, the plugin will show that flat rate when the API is unreachable or returns an error. If the fallback is disabled, no rate will be shown and the customer will see WooCommerce's standard \"no shipping options\" message.<\/p><\/dd>\n<dt id=\"does%20this%20support%20international%20rates%3F\"><h3>Does this support international rates?<\/h3><\/dt>\n<dd><p>Yes. First-Class Package International, Priority Mail International, and Priority Mail Express International are all supported. The plugin automatically routes to the correct USPS endpoint based on the destination country.<\/p><\/dd>\n<dt id=\"does%20this%20support%20shipping%20labels%3F\"><h3>Does this support shipping labels?<\/h3><\/dt>\n<dd><p>No. This plugin only calculates rates at checkout. It does not generate or purchase labels. You can continue to use whatever label service you prefer (PirateShip, Stamps.com, ShipStation, USPS Click-N-Ship, etc.).<\/p><\/dd>\n<dt id=\"how%20does%20multi-box%20packing%20work%3F\"><h3>How does multi-box packing work?<\/h3><\/dt>\n<dd><p>By default, each cart line item is sent to USPS as its own package and the per-service costs are summed. For example, a cart with three different products gets three separate USPS rate quotes for each enabled service, then totals them. If a single line item is heavy enough that one box would exceed USPS's weight limit, the plugin splits that line into multiple boxes automatically. You can switch to a \"combined\" single-box mode in settings if your store genuinely ships everything in one box.<\/p><\/dd>\n<dt id=\"how%20are%20flat-rate-box%20prices%20handled%3F\"><h3>How are flat-rate-box prices handled?<\/h3><\/dt>\n<dd><p>They aren't shown. The plugin only considers true dimensional rates (USPS rate indicators <code>SP<\/code>, <code>PA<\/code>, <code>DR<\/code>, <code>DN<\/code>) \u2014 these reflect the actual cost of shipping a box of the cart's dimensions. Flat-rate-box, cubic, and presort rates are excluded because they require specific packaging or mailing agreements that the plugin can't guarantee the merchant will use.<\/p><\/dd>\n\n<\/dl>\n\n<!--section=changelog-->\n<h4>1.1.0<\/h4>\n\n<ul>\n<li>Renamed the plugin to \"Dependent Media Live Rates for USPS\" and updated the slug\/text domain accordingly, in response to WordPress.org Plugin Directory naming guidance.<\/li>\n<li>Added an \"External services\" section to the readme, formally documenting the USPS REST API integration (data sent, when, and links to USPS Terms of Use and Privacy Policy).<\/li>\n<li>Added the plugin owner (<code>hsojhsoj<\/code>) to the readme <code>Contributors<\/code> field.<\/li>\n<li>No functional code changes \u2014 the WooCommerce shipping method ID, settings keys, and OAuth token transient are unchanged, so existing installations carry their configuration forward.<\/li>\n<\/ul>\n\n<h4>1.0.1<\/h4>\n\n<ul>\n<li>Corrected the <code>Plugin URI<\/code> header so the source-code link in the plugin headers resolves (the original 1.0.0 build pointed at a GitHub URL with the wrong casing). No functional changes.<\/li>\n<\/ul>\n\n<h4>1.0.0<\/h4>\n\n<ul>\n<li>First public release on WordPress.org. Functionally equivalent to the prerelease 0.3 series. Adds the <code>Requires Plugins: woocommerce<\/code> header and tightens internationalization on internal error messages.<\/li>\n<\/ul>\n\n<h4>0.3.0<\/h4>\n\n<ul>\n<li>Added multi-box packing. Each cart line item is now rated as its own package by default, and the per-service costs are summed. Heavy lines are automatically split across multiple boxes to stay within USPS weight caps.<\/li>\n<li>Cart-wide service rates are filtered to only show services that priced every box (no more partial-coverage rates).<\/li>\n<li>New \"Packing strategy\" setting: \"One box per cart line item\" (default, recommended) or \"Combined into a single virtual box\" (legacy v0.2 behavior).<\/li>\n<li>Multi-box rates are labeled with \"(N packages)\" in checkout for transparency.<\/li>\n<\/ul>\n\n<h4>0.2.0<\/h4>\n\n<ul>\n<li>Added international shipping rates (First-Class Package International, Priority Mail International, Priority Mail Express International).<\/li>\n<li>The plugin now auto-detects destination country and routes to the appropriate USPS endpoint.<\/li>\n<li>Separate settings for which domestic vs international services to offer.<\/li>\n<\/ul>\n\n<h4>0.1.0<\/h4>\n\n<ul>\n<li>Initial release. Domestic US rates for Priority Mail, Priority Mail Express, and Ground Advantage.<\/li>\n<\/ul>","raw_excerpt":"Live USPS rates for WooCommerce via the current USPS REST API. Domestic and international, with multi-box packing. No middleman, no monthly fee.","jetpack_sharing_enabled":true,"_links":{"self":[{"href":"https:\/\/eu.wordpress.org\/plugins\/wp-json\/wp\/v2\/plugin\/304192","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/eu.wordpress.org\/plugins\/wp-json\/wp\/v2\/plugin"}],"about":[{"href":"https:\/\/eu.wordpress.org\/plugins\/wp-json\/wp\/v2\/types\/plugin"}],"replies":[{"embeddable":true,"href":"https:\/\/eu.wordpress.org\/plugins\/wp-json\/wp\/v2\/comments?post=304192"}],"author":[{"embeddable":true,"href":"https:\/\/eu.wordpress.org\/plugins\/wp-json\/wporg\/v1\/users\/hsojhsoj"}],"wp:attachment":[{"href":"https:\/\/eu.wordpress.org\/plugins\/wp-json\/wp\/v2\/media?parent=304192"}],"wp:term":[{"taxonomy":"plugin_section","embeddable":true,"href":"https:\/\/eu.wordpress.org\/plugins\/wp-json\/wp\/v2\/plugin_section?post=304192"},{"taxonomy":"plugin_tags","embeddable":true,"href":"https:\/\/eu.wordpress.org\/plugins\/wp-json\/wp\/v2\/plugin_tags?post=304192"},{"taxonomy":"plugin_category","embeddable":true,"href":"https:\/\/eu.wordpress.org\/plugins\/wp-json\/wp\/v2\/plugin_category?post=304192"},{"taxonomy":"plugin_contributors","embeddable":true,"href":"https:\/\/eu.wordpress.org\/plugins\/wp-json\/wp\/v2\/plugin_contributors?post=304192"},{"taxonomy":"plugin_business_model","embeddable":true,"href":"https:\/\/eu.wordpress.org\/plugins\/wp-json\/wp\/v2\/plugin_business_model?post=304192"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}