# shipperhq/module-shipper

> Magento Shipping integration with ShipperHQ

`composer require shipperhq/module-shipper`

Canonical URL: https://packagento.com/shipperhq/module-shipper

## At a glance

- **Vendor**: shipperhq (https://packagento.com/shipperhq.md)
- **Latest version**: 20.61.6 — released 2026-05-29
- **Pricing**: Free
- **Package type**: Magento 2 module
- **Status**: active, accepting new buyers

## Installation

Packagento is licence-gated, so even free packages need a licence on a project before Composer can resolve them.

1. **Sign in or create an account** at https://packagento.com/customer/account/.

2. **Add the package to your account.** Open https://packagento.com/shipperhq/module-shipper and complete the free checkout. A licence is minted automatically.

3. **Create or pick a project, then activate the licence on it.**
   - Projects represent the Magento installs you deploy to. Manage them at https://packagento.com/projects/.
   - Activate the new licence on the project you'll deploy this package to. Activation is what generates the Composer credentials scoped to that project.

4. **Add the project credentials to your Magento codebase.**

   Grab the project's public + private key from https://packagento.com/projects/ (open the project, then its Credentials tab), and add them to `auth.json`:

   ```json
   {
     "http-basic": {
       "packagento.com": {
         "username": "ppk_live_...",
         "password": "psk_live_..."
       }
     }
   }
   ```

   Add the Packagento Composer repository to `composer.json`:

   ```json
   {
     "repositories": [
       { "type": "composer", "url": "https://packagento.com" }
     ]
   }
   ```

5. **Install and apply.**

   ```bash
   composer require shipperhq/module-shipper:*
   bin/magento setup:upgrade
   bin/magento setup:di:compile
   bin/magento cache:flush
   ```

## What it does

Magento Shipping integration with ShipperHQ

## README

ShipperHQ is the ultimate solution for advanced shipping rate management and checkout customization in Magento 2. With ShipperHQ, you can optimize your shipping strategy, integrate with multiple carriers, and provide a seamless checkout experience for your customers.

---

### Features

- **Real-Time Shipping Rates**: Display accurate shipping rates at checkout based on product details, customer location, and shipping preferences.
- **Carrier Integration**: Support for major carriers like UPS, FedEx, USPS, DHL, and custom/local carriers.
- **Custom Shipping Rules**: Set rules for free shipping thresholds, surcharges, restricted zones, and more.
- **Multi-Origin Shipping**: Handle shipments from multiple warehouses or drop shippers.
- **Pickup & Delivery Options**: Offer in-store pickup, curbside delivery, and date-specific delivery services.
- **Smart Packaging**: Optimize shipping costs with advanced packaging algorithms.
- **Customizable Checkout**: Tailor the shipping options displayed during checkout for a better customer experience.

---

### Installation

Install using composer, you can find full instructions in the [ShipperHQ documentation](https://docs.shipperhq.com/installing-magento-2-shipperhq-extension/).

---

### Requirements

- Magento 2.4.4+
  - Compatibility with earlier editions is possible but not maintained
  - Supports both Magento Opensource (Community) and Magento Commerce (Enterprise)
- A valid ShipperHQ account. [Sign up here](https://shipperhq.com/) for your 15-day free trial!

---

### Configuration

**If you don't have a ShipperHQ account**:
1. Sign up for a free 15-day trial at www.shipperhq.com
2. You can then follow the steps the basic configuration wizard will guide you through

**Connect your ShipperHQ account and get shipping rates**:
1. **API Credentials**:
    - Log in to your ShipperHQ account.
    - Navigate to `Websites` and find your API key and generate an Authentication Code.
    - Paste the key and code into the plugin settings under `Stores > Configuration > Sales > Shipping Methods > ShipperHQ`.
    - Set the `Enabled` dropdown to `Yes`. 
    - Save the store configuration settings.
    - You should see "1 carriers have been updated from ShipperHQ".

2. **Shipping Rules**:
    - Configure shipping rules, methods, and carriers in your ShipperHQ dashboard.
      - You can find extensive examples and guides in our [documentation](https://docs.shipperhq.com/).
    - Most settings will sync with your Magento 2 store automatically. If you add shipping groups, origins or packing rules, you will need to [sync these manually](https://docs.shipperhq.com/synchronize-groups-origins-dimensionalrules-magento/). 

3. **Test Your Checkout**:
    - Add a product to the cart and proceed to checkout to verify shipping rates and options.

---

### Frequently Asked Questions

#### 1. Do I need a ShipperHQ account to use this plugin?
Yes, an active ShipperHQ account is required to use this plugin.

#### 2. Is there a free trial available for ShipperHQ?
Yes, ShipperHQ offers a free trial for new users. You can sign up for the trial on the [ShipperHQ website](https://shipperhq.com/) and explore the platform's features before committing to a subscription.

#### 3. How do I troubleshoot issues with shipping rates?
- Verify your API credentials in the plugin settings.
- Ensure the shipping rules and methods are correctly configured in your ShipperHQ dashboard.
- Check for plugin conflicts by disabling other shipping-related plugins temporarily.
- Check our extensive [documentation](https://docs.shipperhq.com/category/troubleshooting/) for troubleshooting tips.

#### 4. Can I customize shipping options for specific products?
Yes, you can configure product-specific rules in your ShipperHQ dashboard. Take a look at our [extensive examples](https://docs.shipperhq.com/category/examples/) guide for some ideas of what ShipperHQ can do for you.

---

### Support

For assistance, please visit our [Help Center](https://docs.shipperhq.com/) or contact ShipperHQ support at [support@shipperhq.com](mailto:support@shipperhq.com).

For alternative contact methods, please visit our [Contact Us](https://shipperhq.com/contact/) page.

---

### Contributing

Any contribution is highly appreciated. The best way to contribute code is to open a [pull request on GitHub](https://help.github.com/articles/using-pull-requests).

---

### License

See license files

---

### Copyright
Copyright (c) 2015 Zowta LLC (http://www.ShipperHQ.com)

## Changelog

### 20.0.23
SHQ16-1395 remove references to carrier group factory

### 20.0.24
SHQ16-1543 belts and braces check on quote item before accessing

### 20.0.25
SHQ16-1582 display pickup location and time slot in order view
SHQ16-1682 Changed version to placeholder

### 20.0.26
SHQ16-745 eCommerce cart in request corrected

### 20.1.0
SHQ16-1619 Config flag to ignore requests if zip code blank 

### 20.1.1
SHQ16-1731 corrected function name
SHQ16-1730 resolved package helper constructor
SHQ16-1730 resolved constructor on package helper

### 20.1.2
SHQ16-1739 modify usage of checkout session, Updated issue reference in readme

### 20.1.3
SHQ16-1745 handle exception on addresses without region

### 20.1.4
SHQ16-992 implemented caching of rates using cache

### 20.1.5
Updated README with latest github issues

### 20.1.6
SHQ16-1774 record order packages

### 20.1.7
SHQ16-1708 display notification when credentials invalid in admin
SHQ16-1859 allow extension of shipper mapper functions

### 20.1.8
SHQ16-1851 removed columns from sales order grid until we find a solution

### 20.1.9
SHQ16-992 implement config switch for caching rates

### 20.2.0
SHQ16-992 implement config switch for cached rates

### 20.2.1
SHQ16-1902 use stored address type in subsequent requests

### 20.2.2
SHQ16-1922 save package detail on first pass through checkout, set carrier code when settings are shqshared
SHQ16-1927 pass store id when retrieving quote

### 20.2.3
SHQ16-1925 Resolved issue with merged rates not showing

### 20.2.4
SHQ16-594 populate shipperhq_location in request

### 20.3.0
SHQ16-1851_A reinstate order grid columns

### 20.3.1
SHQ16-1851_A reinstate order grid columns

### 20.3.2
SHQ16-1968 save packages when carrier and name is duplicated

### 20.3.3
SHQ16-2002 Fixed issue with SHQ using wrong stores API credentials within admin

### 20.3.4
SHQ16-2002 Fixed issue with SHQ using wrong stores API credentials within admin

### 20.3.5
SHQ16-2004 - custom admin shipping
SHQ16-2029 - code sniffer changes

### 20.4.0
SHQ16-2032 and SHQ16-2041 pickup date is used as start when it's today, otherwise use start date
SHQ16-2041 extended unit tests
SHQ16-2029 changes from code sniffer review

### 20.5.0
SHQ16-1967 Accessorials in M2

### 20.5.1
Corrected version number display

### 20.5.2
SHQ16-2117 resolved issue with Authorize.net and custom admin shipping

### 20.5.3
SHQ16-2123 resolve issue with install and upgrade when database has been migrated from M1 to M2

### 20.5.4
SHQ16-2123 prevent deleting default attribute group

### 20.5.5
SHQ16-2141 UPS LTL use carrier code as type

### 20.5.6
SHQ16-2154 clean up step to remove duplicates from shq order grid table

### 20.5.7
SHQ16-2159 add custom admin shipping when no rates returned

### 20.5.8
SHQ16-2171 ensure internal error message can be displayed

### 20.5.9
SHQ16-2178 prevent display of address type and validation result on front end
SHQ16-2200 Added in master packing boxes attribute to mapping

### 20.6.0
SHQ16-2178 set address type on new quote

### 20.6.1
SHQ16-2238 prevent null for city field
SHQ16-2236 class variables made public to reuse in children
SHQ16-2235 add freight attributes to catalog attributes xml
SHQ16-2219 display location selected as pickup at checkout

### 20.6.2
SHQ16-2250 add destination_type attribute if not present

### 20.7.0
SHQ16-2205 - compatibility with release candidate M2.2

### 20.7.1
SHQ16-2205 - compatibility with release candidate M2.2

### 20.7.2
SHQ16-2205 DeliveryDate column backwards compatible with 2.2 RC

### 20.7.3
SHQ16-2258 add config for backup carrier timeout

### 20.7.4
SHQ16-2281 use mutable config when getting carrier by code

### 20.7.5
SHQ16-2266 added some debug logging to assist in customer diagnosis

### 20.7.6
SHQ16-2281 use system config to enable backup carrier temporarily

### 20.7.7
SHQ16-2298 set address type when request being made from cart on logged in customer

### 20.8.0
SHQ16-2231 support for customer account carrier

_(Changelog truncated for .md surface. Full history on https://packagento.com/shipperhq/module-shipper.)_

## Recent Versions

| Version | Released |
|---|---|
| 20.61.6 | 2026-05-29 |
| 20.61.5 | 2026-05-04 |
| 20.61.4 | 2026-01-29 |
| 20.61.3 | 2026-01-29 |
| 20.61.2 | 2026-01-13 |
| 20.61.1 | 2025-11-06 |
| 20.61.0 | 2025-11-03 |
| 20.60.0 | 2025-10-30 |
| 20.59.8 | 2025-10-20 |
| 20.59.7 | 2025-09-08 |

Showing 10 of 250 versions. Full release history on https://packagento.com/shipperhq/module-shipper.

## Dependencies

### Require

| Package | Constraint |
|---|---|
| lcobucci/jwt | ^4.0 |
| magento/framework | >=103.0 |
| magento/module-store | >=100.2 |
| shipperhq/library-graphql | ^20.4.0 |
| shipperhq/library-shipper | ^20.17 |
| shipperhq/library-ws | ^20.7.0 |
| shipperhq/module-common | ^20.10.0 |
| shipperhq/module-logger | * |

### Require (dev)

| Package | Constraint |
|---|---|
| fooman/magento2-phpunit-bridge | ^0.9.0 |
| friendsofphp/php-cs-fixer | ~2.1.1 |
| jakub-onderka/php-console-highlighter | ^0.3.2 |
| jakub-onderka/php-parallel-lint | ^0.9.2 |
| lusitanian/oauth | ~0.8.10 |
| magento-ecg/coding-standard | ^3.1 |
| mikey179/vfsstream | ^1.6 |
| pdepend/pdepend | ^2.5 |
| phploc/phploc | ^4.0 |
| phpmd/phpmd | @stable |
| phpro/grumphp | ^0.12.1 |
| phpunit/phpunit | ~5.3.0 |
| sebastian/phpcpd | 2.0.4 |
| squizlabs/php_codesniffer | ^3.2 |
| symfony/dependency-injection | >3.4.26 |
| symfony/proxy-manager-bridge | >3.4.26 |
| theseer/phpdox | ^0.10.1 |

## Quality

Latest release (20.61.6) fails the Packagento QA pipeline. Verdicts below are per-cell (Magento line × PHP version) for the matrixed tools, and run-once for the static / security tiers.


### Compatibility

Each Magento line is installed on its supported PHP versions, then the module is built (DI compile + static-content deploy). Cells show passed / failed / untested; staircase gaps render as `–`.

| Magento | PHP 8.2 | PHP 8.3 | PHP 8.4 | PHP 8.5 |
|---|---|---|---|---|
| 2.4.7 | Pass | Pass | – | – |
| 2.4.8 | – | Pass | Pass | – |
| 2.4.9 | – | – | Pass | Pass |


### Code Quality

Advisory checks against the module's source. Never affect the Compatibility verdict — a phpcs finding can't make a module incompatible.

#### Static Analysis

Coding standards (phpcs), mess detection (phpmd), copy-pasted code (cpd), PHP cross-version compatibility, composer.json validity. Each runs once for the whole module.

| Tool | Status | Findings | Summary |
|---|---|---|---|
| PHPCS | Warning | 349 | 349 warnings (ruleset: Magento2) — 11 auto-fixable with phpcbf |
| PHPMD | Warning | 90 | 90 rule violations (IfStatementAssignment:12, UnusedLocalVariable:12, ExcessiveMethodLength:11, CyclomaticComplexity:10, UndefinedVariable:10) |
| Cpd | Warning | 6 | 6 duplicated chunks spanning 758 total lines (min-lines=5, min-tokens=70) |
| Composer validate | Info | 4 | valid; 4 advisory notes (composer validate --strict) |

#### PHPStan

Type-checks the module against a real Magento install. Re-runs per Magento + PHP version because resolvable symbols differ between releases.

| Magento | PHP 8.2 | PHP 8.3 | PHP 8.4 | PHP 8.5 |
|---|---|---|---|---|
| 2.4.7 | 55 | 55 | – | – |
| 2.4.8 | – | 56 | 56 | – |
| 2.4.9 | – | – | 55 | 55 |


### Tests

Unit and integration suites run per Magento + PHP cell. Test failures speak to the module's behaviour, not its compatibility with a line, so they're reported here separately.

#### Unit Tests

| Magento | PHP 8.2 | PHP 8.3 | PHP 8.4 | PHP 8.5 |
|---|---|---|---|---|
| 2.4.7 | N/A | N/A | – | – |
| 2.4.8 | – | N/A | N/A | – |
| 2.4.9 | – | – | N/A | N/A |

#### Integration Tests

| Magento | PHP 8.2 | PHP 8.3 | PHP 8.4 | PHP 8.5 |
|---|---|---|---|---|
| 2.4.7 | N/A | N/A | – | – |
| 2.4.8 | – | N/A | N/A | – |
| 2.4.9 | – | – | N/A | N/A |


### Security

Dependency-advisory audit (composer audit) plus a source malware scan. A malware detection fails the version outright.

| Tool | Status | Findings | Summary |
|---|---|---|---|
| Composer audit | Fail | 4 | 4 advisories (medium:1, high:3); 3 high+, 1 medium/unknown, 0 low |
| Malware scan | Pass | 0 |  |

## Licence and pricing

Free. A licence is still minted on checkout and bound to your project for Composer access — no payment step.

Refundable within 14 days of first purchase via https://packagento.com/account/refunds/.

## Install via Claude Code or any MCP client

The Packagento MCP server can run the licence + project + Composer steps above in one tool call:

```
purchase_and_install_packages(
  composer_names=["shipperhq/module-shipper"],
  project_id="proj_xxx"
)
```

This handles cart, checkout, licence minting, project activation, and writes auth.json credentials. Connect a client with `claude mcp add packagento https://mcp.packagento.com`. Full setup at https://packagento.com/docs/mcp-setup.

## Vendor

shipperhq is a Magento 2 vendor on Packagento. See https://packagento.com/shipperhq.md for their full catalogue.

