Service-pricing model v2 — Product Codes, Service Codes, live rate quotes
The service catalog moved to a three-layer model: Product Code (entitlement container, e.g. HKASTD) → Service Code (the orderable unit you put in service_tier_id, e.g. HKASTDGGSTCM) → versioned rate tables. Rates are live, service_tiers is entitlement-scoped, and five legacy tier codes are retired.
- changedLegacy tier codes RETIRED (breaking):
US-GEN-PUB-001, US-GEN-PUB-002, HK-ST-GG-01, HK-US-SE-GG-01 and HKUSSTCS01 were deleted on 2026-06-10 — shipments referencing them now fail. Migrate to HKASTDGGSTCM (standard line) or the matching line from GET /api/v1/service_tiers. The only legacy code still live is HKUSSEGG01. See the new Service Codes guide for the mapping. - added
POST /api/v1/rates is LIVE (the docs previously listed it as not-implemented/501). Entitlement-scoped quotes wrapping the internal billing engine: AU destinations price by postal-code zone (destination_postal_code → zone; without it zoned options return available:false + reason), per-option opt_in_availability gates the SIGNATURE/INSURANCE checkboxes, surcharge_conflicts lists opt-ins that couldn't apply, and EU lanes carry an ioss_notice block. Engine rejections return 400 with the engine's real reason and data.field classification (rate_card / declared_value_hkd / parcels). - changed
GET /api/v1/service_tiers is now entitlement-scoped: it returns only the Service Codes your account can book (Product Code entitlements + assigned rate cards), not the whole platform catalog — matching what the docs always promised. Tiers now expose product_code, service_options[] (cargo/air/last-mile dimensions) and is_standard_service. Note product_code (Merdi container, e.g. HKASTD) ≠ carrier.product_code (the upstream carrier's own reference). No entitlements → 200 + empty list. - added
POST /api/v1/shipments request fields documented: selected_surcharges (e.g. ["SIGNATURE","INSURANCE"] — eligibility is per service code + destination; on the US priority line signature and insurance are mutually exclusive) and ioss_number (IM + 10 digits; overrides the account-level IOSS default; EU destinations only — shipped 2026-06-10 with the EU IOSS work, documented now). - addedNew Service Codes guide: the three-layer model, code anatomy (
HKASTD + cargo GG/CS + air ST/PR + last-mile CM/PS), standard vs value-added lines, ETA conventions (standard ~8-12 business days, priority ~6-10), fetching your codes, and the two-product_codes disambiguation.