PHPackages                             shubo/module-shipping-shippo - PHPackages - PHPackages  [Skip to content](#main-content)[PHPackages](/)[Directory](/)[Categories](/categories)[Trending](/trending)[Leaderboard](/leaderboard)[Changelog](/changelog)[Analyze](/analyze)[Collections](/collections)[Log in](/login)[Sign up](/register)

1. [Directory](/)
2. /
3. [HTTP &amp; Networking](/categories/http)
4. /
5. shubo/module-shipping-shippo

ActiveMagento2-module[HTTP &amp; Networking](/categories/http)

shubo/module-shipping-shippo
============================

Shippo carrier adapter for Shubo\_ShippingCore — first real carrier integration proving the carrier-agnostic abstraction (rate quote, label purchase, webhook, polling).

v0.2.4(2mo ago)0139↓50%Apache-2.0PHPPHP &gt;=8.1

Since Apr 26Pushed 2mo agoCompare

[ Source](https://github.com/nshubitidze/module-shipping-shippo)[ Packagist](https://packagist.org/packages/shubo/module-shipping-shippo)[ Docs](https://github.com/nshubitidze/module-shipping-shippo)[ RSS](/packages/shubo-module-shipping-shippo/feed)WikiDiscussions main Synced 3w ago

READMEChangelogDependencies (8)Versions (5)Used By (0)

Shubo\_ShippingShippo
=====================

[](#shubo_shippingshippo)

[![Packagist](https://camo.githubusercontent.com/c7621f84f0489e0899c1e954b8dd92b81ad82640caa44955142fc4f1da633b74/68747470733a2f2f696d672e736869656c64732e696f2f62616467652f7061636b61676973742d736875626f2532466d6f64756c652d2d7368697070696e672d2d73686970706f2d6f72616e67652e737667)](https://packagist.org/packages/shubo/module-shipping-shippo)[![License: Apache 2.0](https://camo.githubusercontent.com/a549a7a30bacba7bfceebdc207a8e86c3f2c02995a2527640dca30048fd2b64e/68747470733a2f2f696d672e736869656c64732e696f2f62616467652f4c6963656e73652d417061636865253230322e302d626c75652e737667)](./LICENSE)

First real carrier adapter for [`Shubo_ShippingCore`](https://github.com/nshubitidze/module-shipping-core). Integrates [Shippo](https://goshippo.com) as a multi-carrier aggregator — one API key gives access to USPS, UPS, FedEx, DHL, and dozens of regional carriers.

Apache 2.0 · Magento 2.4.8 · PHP ≥ 8.1.

What it does
------------

[](#what-it-does)

- **Rate quote** — POST `/shipments` → returns all eligible rates, filtered by your allowed-carriers config.
- **Label purchase** — POST `/transactions` → picks cheapest (or the operator's preferred carrier) and persists the Shippo transaction id for idempotent retries.
- **Tracking** — webhook handler for `track_updated` events + poller fallback via GET `/tracks/{carrier}/{tracking}`.
- **Cancel** — POST `/refunds` to void a purchased label.
- **Signature verification** — HMAC-SHA256 with `hash_equals` timing-safe compare; empty signatures rejected.

What it does NOT do
-------------------

[](#what-it-does-not-do)

- COD (Shippo supports it only on USPS, not relevant for international shipments from Georgia).
- Georgia-domestic delivery (use a domestic carrier adapter — Wolt Drive or Trackings.ge when those adapters land).
- `listCities()` / `listPudos()` — both return `[]`. Shippo does not expose a city or PUDO API.

Install
-------

[](#install)

```
composer require shubo/module-shipping-shippo
bin/magento module:enable Shubo_ShippingShippo
bin/magento setup:upgrade
bin/magento cache:flush
```

For local development on this module inside a duka container, bind-mount the standalone repo. See `/home/nika/duka/docker-compose.override.yml` for the pattern.

Configure
---------

[](#configure)

Set the API key + webhook secret via CLI. Test keys start with `shippo_test_*` and cannot purchase real labels — the project's spending-safety floor.

```
bin/magento config:set shubo_shipping_shippo/api/mode test
bin/magento config:set shubo_shipping_shippo/api/enabled 1
bin/magento config:set shubo_shipping_shippo/api/key "shippo_test_xxxxxxxxxxxx"
bin/magento config:set shubo_shipping_shippo/api/webhook_secret "$(openssl rand -hex 32)"
bin/magento cache:flush config
```

For live rollout, save the `shippo_live_*` key through the admin UI (Stores → Configuration → Sales → Shippo Carrier) so the Encrypted backend model encrypts it at rest. Live mode hard-fails if it reads a plaintext value from `core_config_data`.

Register the webhook
--------------------

[](#register-the-webhook)

```
curl -X POST -H "Authorization: ShippoToken $SHIPPO_KEY" \
  -H "Content-Type: application/json" \
  -d '{"url":"https:///rest/V1/shubo-shipping/webhook/shippo","event":"track_updated","is_test":true}' \
  https://api.goshippo.com/webhooks/
```

The webhook URL is owned by `Shubo_ShippingCore`'s `WebhookReceiver` — this module only registers the handler inside the core dispatcher.

Smoke test (live sandbox)
-------------------------

[](#smoke-test-live-sandbox)

```
bin/magento shipping_shippo:smoke-rate \
  --from-country=US --from-state=CA --from-city="San Francisco" --from-zip=94107 \
  --to-country=US --to-state=NY --to-city="New York" --to-zip=10001 \
  --weight-kg=0.5
```

Expected output (sandbox):

```
Provider        Method                      Price     ETA  Rationale
--------------------------------------------------------------------------------
USPS            USPS_usps_ground_advantage  8.83      5d   shippo-rate-
UPS             UPS_ups_ground_saver        9.18      5d   shippo-rate-
...

```

Status enum map (Shippo → ShippingCore normalized)
--------------------------------------------------

[](#status-enum-map-shippo--shippingcore-normalized)

ShippoShippingCoreTerminal`UNKNOWN``pending`no`PRE_TRANSIT``awaiting_pickup`no`TRANSIT``in_transit`no`DELIVERED``delivered`yes`RETURNED``returned`yes`FAILURE``failed`yesDevelopment
-----------

[](#development)

```
composer install
vendor/bin/phpunit
vendor/bin/phpstan analyse
vendor/bin/phpcs
```

Tests mock `CurlFactory` — no live Shippo calls from PHPUnit. Live verification goes through the smoke CLI only.

Cost note
---------

[](#cost-note)

Shippo charges ~$0.05 per purchased label on top of the carrier's posted rate. This lands in the buyer/merchant's shipping cost, not Shubo's margin.

Design doc
----------

[](#design-doc)

`docs/design.md` — ~200 lines, authoritative spec for the 10 core flows + failure handling + idempotency + security.

###  Health Score

36

—

LowBetter than 79% of packages

Maintenance83

Actively maintained with recent releases

Popularity11

Limited adoption so far

Community6

Small or concentrated contributor base

Maturity36

Early-stage or recently created project

 Bus Factor1

Top contributor holds 100% of commits — single point of failure

How is this calculated?**Maintenance (25%)** — Last commit recency, latest release date, and issue-to-star ratio. Uses a 2-year decay window.

**Popularity (30%)** — Total and monthly downloads, GitHub stars, and forks. Logarithmic scaling prevents top-heavy scores.

**Community (15%)** — Contributors, dependents, forks, watchers, and maintainers. Measures real ecosystem engagement.

**Maturity (30%)** — Project age, version count, PHP version support, and release stability.

###  Release Activity

Cadence

Every ~1 days

Total

4

Last Release

85d ago

### Community

Maintainers

![](https://www.gravatar.com/avatar/25e03e1c788be1ce1b2067241fb98d4b40e916fb9e9ea61d257a06ce871db916?d=identicon)[shubodev](/maintainers/shubodev)

---

Top Contributors

[![fl0px](https://avatars.githubusercontent.com/u/87697481?v=4)](https://github.com/fl0px "fl0px (14 commits)")

---

Tags

shippingmagento2logisticsshippomarketplacecarrier

###  Code Quality

TestsPHPUnit

Static AnalysisPHPStan

Code StylePHP\_CodeSniffer

Type Coverage Yes

### Embed Badge

![Health badge](/badges/shubo-module-shipping-shippo/health.svg)

```
[![Health](https://phpackages.com/badges/shubo-module-shipping-shippo/health.svg)](https://phpackages.com/packages/shubo-module-shipping-shippo)
```

###  Alternatives

[fastly/magento2

Fastly CDN Module for Magento 2.4.x

1564.4M1](/packages/fastly-magento2)[mollie/magento2

Mollie Payment Module for Magento 2

1131.9M16](/packages/mollie-magento2)[magepal/magento2-customshippingrate

Set your own Custom Shipping rates for admin order or create predefined shipping methods for frontend customers

98119.1k1](/packages/magepal-magento2-customshippingrate)[myparcelnl/magento

A Magento 2 module that creates MyParcel labels

1860.2k](/packages/myparcelnl-magento)[mage-os/module-llm-txt

AI-powered LLMs.txt generation for Magento 2 / Mage-OS stores. Help AI systems understand your store with OpenAI-generated content.

234.4k](/packages/mage-os-module-llm-txt)[opengento/module-category-import-export

This module add the capability to import and export the categories from the back-office.

1310.9k2](/packages/opengento-module-category-import-export)

PHPackages © 2026

[Directory](/)[Categories](/categories)[Trending](/trending)[Changelog](/changelog)[Analyze](/analyze)
