Shippo API release notes

We will be documenting all backwards-incompatible changes associated with each new API version here. Learn more about how Shippo API versioning works and upgrade to the latest.

Note

To learn about updates to Shippo Elements view the Shippo Elements release notes.

Version 2018-02-08

Mar 1 2024

Our shipping insurance provider, XCover, have updated their terms. For shipments originating from the US, XCover now has a 25% deductible for Jewelry/Watches, Antiques/Artwork, and Glassware/Ceramics. See our guide for details.

Feb 28 2023

We’ve add support for the carrier Veho.

Dec 8 2023

We've added support for A5 PDF labels for Australia Post shipments.

Aug 31 2023

We have added XCover as our new insurance provider. To add XCover insurance to your packages, follow our Shipping insurance guide.

Aug 18 2023

We've updated our API to improve the accuracy of the time in transit information for all domestic USPS shipping rates.

Jul 31 2023

FedEx have retired their Collect on Delivery (COD) service for FedEx Express and FedEx Ground COD service for shipments within and to the US from Canada. Now, when you create a shipment in the Shippo API and include the option for COD, the rates returned will not include rates from FedEx.

Jul 9 2023

We've added a new service level token to enable USPS Ground Advantage. To use USPS Ground Advantage, use the token usps_ground_advantage. See the full list of service tokens in our reference guide for more information.

Jun 15 2023

Hazardous materials or hazmat are items that can cause harm to people. When shipping with USPS, you must declare if your parcel contains hazmat items. To support our users compliance shipping hazmat items with USPS, we've added the dangerous_goods field to our shipments. See our hazmat guide for more details.

Mar 10 2023

In the Shipment Extras object, we've added new fields to support FedEx labels. Shipment Extras now includes the fields customer_reference, po_number, invoice_number, dept_number, and rma_number.

Apr 25 2023

We've added Platform Accounts to our API. Using a Platform Account, you can create and control Managed Shippo Accounts. Managed Shippo Accounts are headless accounts that are typically used by Marketplaces, e-commerce platforms, and third-party logistics. Using a Platform Account, you can make requests to the Shippo API on behalf of your Managed Accounts. Use Shippo Platform Accounts to create a shipping experience that is seamless to your end customers.

Dec 14 2022

You can now use QR codes for UPS. Generated QR codes can be brought to a carrier location to print labels for outbound and return shipments.

Dec 9 2022

We’ve added support for insuring DHL eCommerce packages using our insurance provider, Shipsurance.

Dec 7 2022

Previously, for Australia Post, some ZPL formatted labels were formatted incorrectly. We’ve fixed this formatting issue.

Nov 23 2022

For Australia Post, some customers received this error message "The carrier API timed out. Please try again. If this error persists please contact support.". We have resolved this issue.

Nov 17 2022

We’ve added the option to include the IOSS number for DPD UK using the API carrier request call.

Nov 16 2022

For the carrier APG, we’ve added support for the service level “APG eParcel Expedited".

Previously, for some DPD packages, the status field would not be updated when the package was delivered. This has now been fixed.

Nov 10 2022

FedEx has changed the names of it’s service Smartpost to Ground Economy. To support this we have added the service level token fedex_ground_economy. Any request made using the old token, fedex_smart_post, will be given the Ground Economy service level.

We have removed support for GLS DE and GLS FR.

Nov 8 2022

For the carrier LaserShip, we’ve added support for users to define the critical_pull_time HH:MM format in carrier account parameters.

Nov 2 2022

We’ve fixed an issue where the Orders endpoint was failing to update for batch entry.

Oct 25 2022

We’ve add support for the carrier Better Trucks.

For Evri, we’ve updated our tracking URL for Evri from the old Hermes UK URL.

We’ve improved our error code reporting for Lasership.

Oct 19 2022

For APG, we’ve added support additional service of Destroy for undeliverable packages.

Sep 28 2022

We fixed an issue with the carrier APG that required a “state” in the address object.

For Evri, we’ve added Puerto Rico (PR) and Virgin Islands US (VI) as destination countries for parcelshop drop off service level

We’ve added a fix that removes special characters in post codes for DPD UK.

We’ve added Shippo master accounts for Post IT and Mondial. You can now use these carriers with the Shippo account.

Sep 27 2022

We’ve added support for the carrier DPD DE.

Sep 21 2022

For the carrier Evri we’ve fixed the issue causing the error message "Content Values do not add up to Parcel Value".

Sep 15 2022

We’ve added Shippo master accounts for Chronopost and Chronopost. You can now use these carriers using the Shippo account.

Sep 13 2022

We’ve add the carrier UDS to our list of supported carriers.

Sep 9 2022

We’ve added support for our Canadian users to access the UPS Master account. This means that Shippo customers in Canada can benefit from the great rates we’ve negotiated with UPS.

Sep 8 2022

We now support test mode for the carrier Swyft.

Sep 1 2022

Previously we supported Evri only for domestic shipments. Now, we support Evri deliveries to European and the rest of the world from the UK.

We now support test mode for the carrier UDS.

Jun 21 2022

The carrier Poste Italiane is now supported in the Shippo API.

Jun 20 2022

We’ve added the carriers APG and Correos to our list of supported carriers.

May 13 2022

The carrier Chronopost is now supported in the Shippo API.

May 10 2022

Shippo’s customs now support Merchant Tax ID/VAT for international shipments.

May 7th 2022

Shippo’s customs now support the EORI number for shipments to/from the EU & UK.

Mar 2nd 2022

The carrier Colissimo is now part of list of supported carriers.

Jan 14th 2022

We’ve added X Delivery to list of supported carriers

Dec 14th 2021

You can now use the carrier DPD UK in the Shippo API

July 28th 2021

We’ve added Royal Mail to our list of supported carriers.

Jul 15th 2022

Our Customs Declaration object now includes the field is_vat_collected. You can use this field to indicate whether the shipment’s destination VAT has been collected. This is required for some destinations.

Jun 16th 2022

We’ve fixed a bug to ensure only valid service levels are returned when getting shipping rates.

Dec 10th 2021

Previously, when calling our list parcels endpoint, you might have received a very long list of results. To help, we’ve added pagination to help control the results you see.

Aug 17 2021

We’ve added extended_token and parent_servicelevel fields to our Rates object. These fields give you clearer insight into specific service levels quoted in a Rate. Some service levels, like those for UPS, are grouped, and are represented by a generic token. For example, the token ups_expedited represents service levels including ups_expedited_ca and ups_expedited_eu. In this example, parent_servicelevel would return ups_expedited. Extended_token could return one of ups_expedited_ca and ups_expedited_eu.

May 10 2021

The carrier GLS US is now supported in our API.

Apr 9 2021

In customs declarations, you can now add a tax identification number and Employer Identification Number. These are required for some international shipment.

Sep 10 2020

To aid international shipments, we’ve added some new customs fields. In our customs declarations, we’ve added the fields to support B13A. We’ve also added fields in our customs items to support ECCN.

Aug 7 2020

We’ve added support for the carrier PCF to our API.

July 30 2020

We’ve added a field for qr codes to the Transaction object. If supported by the carrier, the qr_code_url will contain a link to a QR code image.

Apr 4 2020

We’ve added the carrier OrangeDS to our list of supported carriers.

Feb 24 2020

You can use the carrier LSO to ship packages using our API.

May 10 2019

The Shipment object now includes the field alternate_address_to that you can use to set an alternate delivery address.

Apr 24 2019

The Customs Declaration object now includes a duty_payor field. Using this field you can define who is paying for the duties of international shipments. This is required by some carriers.

Dec 19th 2018

We’ve added support for the carrier CDL to our API.

Oct 19 2018

We’ve added Axlehire to our list of supported carriers..

Sept 5 2018

We’ve added a new validation_status field ot our Orders endpoint. Now, when you retrieve an Order, you will get an validation_status parameter to show if the created Order object is pending, valid, or invalid.

Aug 28 2018

We’ve added an error field to our Orders endpoint. Now, when you retrieve an Order, you will get an “error” parameter that includes any error messages associated with your Order object.

Apr 13 2018

For security reasons, the account_id and parameters fields will be censored in the response objects for Carrier Accounts.

Mar 19 2018

We’ve added Globegistics to our list of supported carriers.

Feb 15 2018

We’ve added support for the carrier CouriersPlease to our API.

Jan 22 2018

You can use the carrier Sendle to ship packages using our API.

8 Feb 2018

PRE_TRANSIT will be added to the list of possible values in status.

PRE_TRANSIT will be added to the list of possible values in status and tracking_status for track_updated and transaction_updated events, respectively.

Version 2017-08-01

Webhooks

Shippo-API-Version will be included in the headers of all webhook responses to indicate the api version being used.

New events have been added to our webhooks:

  • transaction_updated  -- will be triggered when a transaction in your account is updated, and will provide the updated transaction.
  • transaction_created  -- will be triggered when a transaction in your account is created, and will provide the updated transaction.

A new fields have been added in the body of the webhook payload:

  • event_type  will have one of the following values:  transaction_createdtransaction_updatedtrack_updatedbatch_created , or  batch_updated .

Please see our Webhooks tutorials for examples of using these new fields and events.

All Endpoints

The count field has been removed. If making a GET request to any endpoint without an object_id specified in the URI (i.e. /transactions, /shipments, /addresses) you will no longer see the count field in the body of the response.

Rates

In rate objects, the days field has been renamed to estimated_days to make it clear that this is an estimate.

Transactions

The tracking_history field has been deprecated from the Transactions object. The Transactions object will still have the most recent tracking_status on it, but to get a full tracking history, you would need to subscribe awebhook to the tracking_update event or query the Tracks endpoint.

Version 2017-03-29

Major Update: Refactored and Deprecated Fields

In this API version, we've cleaned up many stale attributes across various endpoints in the API to make them more intuitive and true to operational use cases. Please explore the following to see if any changes will affect your implementation.

The changes to our Shipments endpoint for returns now makes it possible to create return labels without having to reference a previous transaction.

Changes have been made to the following endpoints: AddressesShipmentsRatesTransactionsBatches, and Refunds. For more detailed information, please see the full API references.

Addresses

Request:

  • Deprecated:
    • object_purpose

Response:

  • Deprecated:
    • ip
    • object_purpose
    • object_state
    • object_source
  • Added:
    • is_complete  --- boolean used to indicate if an address is fully entered, making it possible to use for purchasing a label.
    • validation_results  --- object that contains information regarding if an address had been validated or not. Also contains any messages generated during validation. Children keys are  is_valid (boolean) and  messages (array).
  • Updated:
    • messages  has been moved into new  validation_results  field.

Shipments

Request:

  • Deprecated:
    • object_purpose
  • Updated:
    • submission_date  is now  shipment_date
    • return_of  is now  is_return , also has been changed to a boolean and is no longer a top-level key and has been moved into extra field. This will flag a shipment to be created as a scan-based label.
    • object_status  is now  status
    • insurance_amount  is now  amount , moved into newly added insurance  field inside  extra object.
    • insurance_currency  is now  currency , moved into newly added  insurance  field inside  extra  object.
    • insurance_provider  is now  provider , moved into newly added  insurance  field.
    • insurance_content  is now  content , moved into newly added  insurance  field.
    • reference_1  &  reference_2  moved to  extra  field.
    • parcel  is now  parcels  and has been changed to an array.
  • Added:
    • insurance , an object within the  extra  object with previous top level and  extra  level insurance fields as keys of the  insurance  object.

Response:

  • Deprecated:
    • object_state
    • submission_type
    • object_purpose
    • rates_url
  • Updated:
    • rates_list  is now  rates
    • submission_date  is now  shipment_date
    • return_of  is now  is_return , also has been changed to a boolean and is no longer a top-level key and has been moved into the  extra  field. This will set the shipment as a return shipment, which makes the label scan-based. See our docs on  Returns  for more information.
    • object_status  is now  status
    • insurance_amount  is now  amount , moved into newly added insurance  field.
    • insurance_currency  is now  currency , moved into newly added  insurance  field.
    • insurance_content  is now  content , moved into newly added  insurance  field.
    • insurance_provider  is now  provider , moved into newly added  insurance  field.
    • reference_1  &  reference_2  moved to  extra  field.
    • address_to , address_fromaddress_return , and  parcel  are now expanded to include full address or parcel information, in addition to their  object_id .
    • parcel  is now  parcels  and has been changed to an array.
  • Added:
    • insurance , an object within the  extra  object with previous insurance fields as keys of the  insurance  object.

Rates

Request:

  • Deprecated:
    • GET on /rates/ will no longer return a list of rates. GET on /rates/{object_id} will still work as indicated.

Response:

  • Deprecated:
    • object_state
    • object_purpose
    • object_updated
    • trackable
    • delivery_attempts
    • rates_url
  • Updated:
    • servicelevel_nameservicelevel_token , and  servicelevel_terms  have been renamed to  nametoken , and  terms (respectively) and moved into the newly created  servicelevel field.
  • Added:
    • servicelevel , object that contains renamed fields:  nametoken , and  terms (previously  servicelevel_nameservicelevel_token , and  servicelevel_terms )

Transactions

Response:

  • Deprecated:
    • customs_note
    • submission_note
  • Updated:
    • object_state  is now  status
    • rate  field is expanded with full rate details for insta-label calls.

Manifest

Request:

  • Updated:
    • submission_date  is now  shipment_date

Response:

  • Updated:
    • submission_date  is now  shipment_date

Batches

Response:

  • Updated:
    • object_status  is now  status

Refunds

Response:

  • Updated:
    • object_status  is now  status

Parcel

Request:

  • Updated:
    • reference_1  and  reference_2  can be added in the  extra  field of Parcel for multi-parcel shipments. See  Multi-Piece Shipments  for more information.

Version 2016-10-25

Major Update: New Test Token used to set Shippo to test mode.

You will now be able use all Shippo API functionalities from end-to-end in test mode by authenticating requests with a Test Token. Previously, to test out Shippo, you had to set carrier accounts to test mode. Now all users will have have two different tokens: one for test mode and one for live mode.

See our detailed documentation on Test Mode.

For users continuing to use API version 2014-02-11

You will have the option of using the Test Token while remaining on the older version of the Shippo API.

  • Test Token can be used for test mode without affecting your existing implementation. See our  Test Mode documentation  to learn more about functionalities.
  • Functionalities of your existing Private Auth Token will remain the same -- now renamed as "Live Token".
  • All tokens will now begin with  "shippo_live_"  or  "shippo_test_" . This will not affect any existing implementation with old tokens, however we recommend using the new format going forward.

For users upgrading to API version 2016-10-25

Using the Test Token and Live Token will affect how your test and live data are returned and displayed.

Test and Live Data

  • When using the Test Token, you will only be able to create and request test data sets such as addresses, rates, and carriers etc. No live data can be requested or returned.
  • When using the Live Token, you will only be able to create and request live data. No test data can be requested or returned.
  • Shipment object will now return 3 variables for  test
    • True -- All Rates returned in Shipment were tests
    • False -- All Rates returned in Shipment were live
    • None -- Rates returned in Shipment were both tests and live

The following are some common scenarios.

  1. If you create a Shipment with Live Token using an Address object created with a Test Token, you will receive a 404 response (not found). Vice versa is also true. If you retrieve an object_id created in live mode with a Test Token, you will receive a 403 (bad request) response.
  2. If you request a list of Transaction objects, or Shipment objects with the Test Token, only test Transactions or Shipments will be returned. Vice versa is also true, when making requests in live mode.

Carrier account configuration

When you upgrade to the latest version, the test attribute of the carrier object will become read-only.

  • User-owned carrier accounts (where you have plugged in your own carrier credentials) that have been set to  test: true  at the time of upgrade will only appear and work when request with a Test Token.
  • User-owned carrier accounts (where you have plugged in your own carrier credentials) that have been set to  test: false  at the time of upgrade will only appear and work when request with a Live Token.
  • Shippo-owned master accounts  (see carrier capabilities for full list)  object_ids will appear and be functional when requested with a Test Token or a Live Token.

We recommend setting all carrier accounts to test: false (including on your dashboard) before upgrading so that existing carrier accounts are set to live mode. This will help with minimizing changes necessary for the upgrade.

"test" attribute

Certain objects will now be returning a new "test" attribute.

  • Transaction object will no longer return the "was_test" attribute, instead it will return "test".
  • Address, Parcel, Refund, Customs Declaration, and Customs Items objects will now return a new "test" attribute.
  • Possible values for "test":
    • True -- the object was created in test mode
    • False -- the object was created in live mode
  • Other objects (such as Carrier Accounts and Rates) will keep returning "test" if they did in past.