Shippo

App · E-Commerce · 12 actions

Check addresses, compare shipping rates across every carrier, buy shipping labels, and track every parcel in one place.

Actions

ActionWhat it does
Buy a shipping labelBuy the label for a rate you were quoted and get back the file to print and the tracking number to send the customer.
Check an addressCheck whether an address is real and deliverable before you ship to it, and get back the carrier's corrected version: fixed spelling, ZIP+4, standard abbreviations.
Create a customs formDeclare what is in a parcel crossing a border.
Create an orderPut an order into Shippo so it appears on the orders screen alongside those from connected shops.
Get a shipmentRead a quote back with the rates it was given, using the shipment ID from an earlier 'Get shipping rates'.
Get a shipping labelRead a label back: the file, the tracking number, the carrier's delivery estimate, and whether it has since been refunded in the Shippo dashboard.
Get an orderRead one order back: what was bought, where it is going and whether a label has been made for it.
Get shipping ratesPrice one parcel from one address to another across every carrier on your Shippo account.
List carrier accountsSee which carriers this Shippo account can buy from, and get the account IDs that narrow a quote to one of them.
List ordersFind orders in Shippo: the ones paid for and waiting to be shipped, usually.
List shipping labelsFind labels this account has bought: everything shipped yesterday, everything still undelivered, everything refunded.
Track a packageFind out where a parcel is.

Buy a shipping label

Buy the label for a rate you were quoted and get back the file to print and the tracking number to send the customer. This charges the Shippo account.

Inputs

Raterate_idtextRequired
Which quoted rate to buy: 32 letters and numbers, from a 'Rate ID' in 'Get shipping rates'. Wire in its 'cheapest' or 'fastest' to pick one without sorting the list yourself.
Label formatlabel_file_typetext
What kind of file to get back. Leave blank to use the default set on your Shippo account.One of: PDF (PDF, full page), PDF_4x6 (PDF, 4x6 inches (thermal printer)), PDF_4x8 (PDF, 4x8 inches), PDF_A4 (PDF, A4 page), PDF_A5 (PDF, A5 page), PDF_A6 (PDF, A6 page), PDF_2.3x7.5 (PDF, 2.3x7.5 inches), PNG (PNG image), PNG_2.3x7.5 (PNG image, 2.3x7.5 inches), ZPLII (ZPL II (Zebra thermal printer)).
Referencemetadatatext
Your own note against this label, up to 100 characters, an order number usually. Shippo stores it and hands it back.

Outputs

A bought shipping label.

commercial_invoice_urltext
Link to the commercial invoice, on international shipments that need one.
createdtext
When the label was bought.
etatext
The carrier's estimated delivery time.
label_file_typetext
Format of that file, e.g. 'PDF_4x6'.
label_idtext
Shippo's ID for this label. This is what refunding it, or reading it back later, asks for.
label_urltext
Direct link to the label file, in the format asked for. This is what to email, attach or print.
messageslist
Anything Shippo or the carrier wanted to say about this: a carrier that did not answer in time, a service that is not enabled. Present even when the step succeeded.
qr_code_urltext
Link to a QR code for label-free drop-off, where the carrier offers it.
rate_idtext
The rate this label was bought against.
statustext
'SUCCESS' when the label is ready. 'REFUNDED', 'REFUNDPENDING' and 'REFUNDREJECTED' describe a label that has been sent back.
testtrue/false
True when this was made with a test key: no money changed hands and any tracking number is a mock one that never moves.
tracking_numbertext
The carrier's tracking number for this parcel.
tracking_statustext
Where the parcel is, as of the last carrier scan.
tracking_urltext
The carrier's own tracking page for this parcel.
Example output
{
  "created": "2026-09-17T18:04:22.123Z",
  "eta": "2026-09-21T12:00:00Z",
  "label_file_type": "PDF_4x6",
  "label_id": "915d94940ea54c3a80cbfa328722f5a1",
  "label_url": "https://shippo-delivery.s3.amazonaws.com/915d9494.pdf",
  "rate_id": "ee81fab0372e419ab52245c8952ccaeb",
  "status": "SUCCESS",
  "test": true,
  "tracking_number": "9205590164917312751089",
  "tracking_status": "PRE_TRANSIT",
  "tracking_url": "https://tools.usps.com/go/TrackConfirmAction?tLabels=92055901"
}

Check an address

Check whether an address is real and deliverable before you ship to it, and get back the carrier's corrected version: fixed spelling, ZIP+4, standard abbreviations.

Inputs

Address: namenametext
Person or company at this address.
Address: companycompanytext
Company name, if there is one.
Address: streetstreet1text
Street number and street name.
Address: street line 2street2text
Apartment, suite or floor, if there is one.
Address: citycitytext
City or town.
Address: state or provincestatetext
Two-letter state for the US, Canada and Australia, such as 'CA'. Required for those countries and ignored where the carrier does not use one.
Address: postal codeziptext
Postal or ZIP code.
Address: countrycountrytext
The country the address is in.One of: AF (Afghanistan), AX (Åland Islands), AL (Albania), DZ (Algeria), AD (Andorra), AO (Angola), AI (Anguilla), AQ (Antarctica), AG (Antigua & Barbuda), AR (Argentina), and 239 more.
Address: phonephonetext
Phone number. Carriers call ahead with it, and some refuse a label without one.
Address: emailemailtext
Email address, used for carrier delivery notices.

Outputs

Whether an address is deliverable, and its tidied-up form.

addressobject
The address as the carrier would write it, with corrected spelling, ZIP+4, standard abbreviations. Write this back to the order.
address_idtext
Shippo's ID for the stored address.
is_validtrue/false
True when the carrier recognised the address. Read 'was_checked' first: a false here with 'was_checked' false means nobody checked, not that the address is wrong.
messageslist
What the carrier found wrong, in its own words.
testtrue/false
True when this was made with a test key: no money changed hands and any tracking number is a mock one that never moves.
was_checkedtrue/false
True when a carrier actually validated the address. Not every country is covered.
Example output
{
  "address": {
    "city": "SAN FRANCISCO",
    "company": "Shippo",
    "country": "US",
    "email": "shippotle@shippo.com",
    "is_residential": false,
    "name": "Shawn Ippotle",
    "phone": "+1 555 341 9393",
    "state": "CA",
    "street1": "215 CLAYTON ST",
    "zip": "94117-1918"
  },
  "address_id": "d799c2679e644279b59fe661ac8fa488",
  "is_valid": true,
  "test": true,
  "was_checked": true
}

Create a customs form

Declare what is in a parcel crossing a border. Pass the ID it hands back into 'Get shipping rates' as the customs form, and the label is printed with it.

Inputs

What is in the parcelitemslistRequired
One entry per kind of item. Each needs a plain-words description, how many, what they weigh and are worth together, and the two-letter country where they were made.
What kind of goodscontents_typetextRequired
How customs should treat the contents.One of: MERCHANDISE (Goods sold to the customer), GIFT, DOCUMENTS, SAMPLE, RETURN_MERCHANDISE (Returned goods), HUMANITARIAN_DONATION (Humanitarian donation), OTHER (Something else). Default: MERCHANDISE.
Describe the goodscontents_explanationtext
Required only when the kind of goods is 'Something else'. Customs will not accept 'other' on its own.
If it cannot be deliverednon_delivery_optiontextRequired
What customs should do when the parcel cannot be delivered. Returning it costs money; abandoning it loses the goods.One of: RETURN (Send it back to me), ABANDON (Abandon it). Default: RETURN.
Signed bycertify_signertextRequired
Name of the person taking responsibility for this declaration being true. It is printed on the form.
Who pays dutyincotermtext
Who settles duty and tax at the border. Leave blank for the carrier's default, which is normally the recipient.One of: DDU (DDU: the recipient pays duty and tax), DDP (DDP: I pay duty and tax), DAP (DAP: delivered at place, recipient pays duty), eDAP (eDAP: electronic delivered at place), FCA (FCA: free carrier).
US export exemptioneel_pfctext
Only for shipments leaving the United States. Almost every ordinary parcel is the first option. Leave blank when not shipping from the US.One of: NOEEI_30_37_a (NOEEI 30.37(a): under $2,500 per item (the usual one)), NOEEI_30_37_h (NOEEI 30.37(h): temporary export), NOEEI_30_37_f (NOEEI 30.37(f): shipment to a US territory), NOEEI_30_36 (NOEEI 30.36: shipment to Canada), AES_ITN (AES ITN: filed with AES (needs the ITN number)).
AES ITN numberaes_itntext
The filing number, required only when the exemption above is 'AES ITN'.
Invoice numberinvoicetext
Your invoice number for these goods, if you have one.
Referencemetadatatext
Your own note against this form, up to 100 characters.

Outputs

A customs declaration, ready to attach to a shipment.

certify_signertext
Who signed the declaration.
contents_typetext
What kind of goods were declared.
createdtext
When it was made.
customs_form_idtext
Pass this into 'Get shipping rates' as the customs form, so the label is quoted and printed with it.
incotermtext
Who pays the duty and tax.
item_countnumber
How many kinds of item were declared.
messageslist
Anything Shippo or the carrier wanted to say about this: a carrier that did not answer in time, a service that is not enabled. Present even when the step succeeded.
non_delivery_optiontext
What customs should do if it cannot be delivered.
statustext
'VALID' when Shippo accepted the declaration.
testtrue/false
True when this was made with a test key: no money changed hands and any tracking number is a mock one that never moves.
Example output
{
  "certify_signer": "Shawn Ippotle",
  "contents_type": "MERCHANDISE",
  "created": "2026-09-17T18:04:22.123Z",
  "customs_form_id": "adcfdddf8ec64b84ad22772bce3ea37a",
  "incoterm": "DDU",
  "item_count": 1,
  "non_delivery_option": "RETURN",
  "status": "VALID",
  "test": true
}

Create an order

Put an order into Shippo so it appears on the orders screen alongside those from connected shops. For a shop Shippo does not connect to directly.

Inputs

Order numberorder_numbertext
The number your shop knows this order by.
Ordered atplaced_atdate and timeRequired
When the customer placed the order.
Order statusorder_statustext
Where the order is up to. 'Paid, ready to ship' is the one that puts it in the queue to be fulfilled.One of: PAID (Paid, ready to ship), AWAITPAY (Awaiting payment), PARTIALLY_FULFILLED (Partly shipped), SHIPPED, REFUNDED, CANCELLED, UNKNOWN. Default: PAID.
Ship to: nameto_nametextRequired
The customer's name.
Ship to: companyto_companytext
Company name, if there is one.
Ship to: streetto_street1textRequired
Street number and street name.
Ship to: street line 2to_street2text
Apartment, suite or floor, if there is one.
Ship to: cityto_citytextRequired
City or town.
Ship to: state or provinceto_statetext
Two-letter state for the US, Canada and Australia, such as 'CA'. Required for those countries and ignored where the carrier does not use one.
Ship to: postal codeto_ziptextRequired
Postal or ZIP code.
Ship to: countryto_countrytextRequired
The country the order is going to.One of: AF (Afghanistan), AX (Åland Islands), AL (Albania), DZ (Algeria), AD (Andorra), AO (Angola), AI (Anguilla), AQ (Antarctica), AG (Antigua & Barbuda), AR (Argentina), and 239 more.
Ship to: phoneto_phonetext
Phone number. Carriers call ahead with it, and some refuse a label without one.
Ship to: emailto_emailtext
Email address, used for carrier delivery notices.
Items ordereditemslist
One entry per line on the order.
Order totaltotal_pricenumber
What the customer paid in total.At least 0.01.
Currencycurrencytext
Currency of every amount on this order. Required if any amount is given.One of: USD (USD (US Dollar)), EUR (EUR (Euro)), GBP (GBP (Pound Sterling)), CAD (CAD (Canadian Dollar)), AUD (AUD (Australian Dollar)), NZD (NZD (New Zealand Dollar)), JPY (JPY (Yen)), CNY (CNY (Yuan Renminbi)), CHF (CHF (Swiss Franc)), SEK (SEK (Swedish Krona)), and 145 more.
Shipping chargedshipping_costnumber
What the customer paid for shipping.At least 0.01.
Shipping methodshipping_methodtext
What the customer chose at checkout, in their words: 'Free shipping', 'Next day'.
Weightweightnumber
What the whole order weighs, if you know it.At least 0.01.
Weight unitweight_unittext
The unit of that weight. Required if a weight is given.One of: lb (Pounds (lb)), oz (Ounces (oz)), kg (Kilograms (kg)), g (Grams (g)).
Notesnotestext
Anything the buyer or you noted about the order.

Outputs

One order waiting to be shipped.

currencytext
Currency of the total.
item_countnumber
How many lines are on the order.
itemslist
What was ordered.
label_countnumber
How many labels have been bought against it.
notestext
Notes from the buyer or seller.
order_idtext
Shippo's ID for the order.
order_numbertext
The number the shop knows it by, e.g. '#1024'.
placed_attext
When the order was placed.
ship_toobject
Where the order is going.
shipping_costtext
What the buyer paid for shipping.
shipping_methodtext
What the buyer chose at checkout.
shop_apptext
Where the order came from, e.g. 'Shopify' or 'Shippo' for one created through the API.
statustext
PAID, AWAITPAY, PARTIALLY_FULFILLED, SHIPPED, REFUNDED, CANCELLED or UNKNOWN.
testtrue/false
True when this was made with a test key: no money changed hands and any tracking number is a mock one that never moves.
totalnumber
The same total as a number, for comparing.
total_pricetext
What the buyer paid in total, as text.
weighttext
Total weight of the order.
weight_unittext
Unit of that weight.
Example output
{
  "currency": "USD",
  "item_count": 1,
  "items": [
    {
      "currency": "USD",
      "quantity": 1,
      "sku": "HM-123",
      "title": "Hippo Magazines",
      "total_price": "12.10",
      "weight": "0.4",
      "weight_unit": "lb"
    }
  ],
  "label_count": 0,
  "order_id": "4f2bc588e4e5446cb3f9fdb7cd5e190b",
  "order_number": "#1068",
  "placed_at": "2026-09-17T10:12:00Z",
  "ship_to": {
    "city": "San Francisco",
    "country": "US",
    "email": "mrhippo@shippo.com",
    "name": "Mr Hippo",
    "phone": "+1 555 341 9393",
    "state": "CA",
    "street1": "965 Mission St",
    "street2": "Ste 201",
    "zip": "94103"
  },
  "shipping_cost": "5.50",
  "shipping_method": "USPS Priority Mail",
  "shop_app": "Shippo",
  "status": "PAID",
  "test": true,
  "total": 24.99,
  "total_price": "24.99",
  "weight": "0.4",
  "weight_unit": "lb"
}

Get a shipment

Read a quote back with the rates it was given, using the shipment ID from an earlier 'Get shipping rates'. Rates expire after about a week.

Inputs

Shipment IDshipment_idtextRequired
The quote's Shippo ID: 32 letters and numbers, from the 'Shipment ID' that 'Get shipping rates' hands back.

Outputs

Every price quoted for one parcel, cheapest first.

cheapestobject
The lowest-priced rate, already picked out.
fastestobject
The rate with the fewest days in transit, already picked out. Absent when no carrier gave an estimate.
messageslist
Anything Shippo or the carrier wanted to say about this: a carrier that did not answer in time, a service that is not enabled. Present even when the step succeeded.
rate_countnumber
How many rates were quoted.
rateslist
Every quoted rate, cheapest first.
shipment_idtext
Shippo's ID for this quote. Pass it to 'Get a shipment' to read the same rates again.
statustext
Shippo's state for the quote, normally 'SUCCESS'.
testtrue/false
True when this was made with a test key: no money changed hands and any tracking number is a mock one that never moves.
Example output
{
  "cheapest": {
    "amount": "9.35",
    "attributes": [
      "CHEAPEST",
      "BESTVALUE"
    ],
    "carrier": "USPS",
    "carrier_account": "078870331023437cb917f5187429b093",
    "currency": "USD",
    "duration_terms": "Delivery in 1 to 3 business days.",
    "estimated_days": 2,
    "price": 9.35,
    "rate_id": "ee81fab0372e419ab52245c8952ccaeb",
    "service": "Priority Mail",
    "service_token": "usps_priority",
    "test": true
  },
  "fastest": {
    "amount": "9.35",
    "attributes": [
      "CHEAPEST",
      "BESTVALUE"
    ],
    "carrier": "USPS",
    "carrier_account": "078870331023437cb917f5187429b093",
    "currency": "USD",
    "duration_terms": "Delivery in 1 to 3 business days.",
    "estimated_days": 2,
    "price": 9.35,
    "rate_id": "ee81fab0372e419ab52245c8952ccaeb",
    "service": "Priority Mail",
    "service_token": "usps_priority",
    "test": true
  },
  "rate_count": 1,
  "rates": [
    {
      "amount": "9.35",
      "attributes": [
        "CHEAPEST",
        "BESTVALUE"
      ],
      "carrier": "USPS",
      "carrier_account": "078870331023437cb917f5187429b093",
      "currency": "USD",
      "duration_terms": "Delivery in 1 to 3 business days.",
      "estimated_days": 2,
      "price": 9.35,
      "rate_id": "ee81fab0372e419ab52245c8952ccaeb",
      "service": "Priority Mail",
      "service_token": "usps_priority",
      "test": true
    }
  ],
  "shipment_id": "89436997a794439ab47999701e60392e",
  "status": "SUCCESS",
  "test": true
}

Get a shipping label

Read a label back: the file, the tracking number, the carrier's delivery estimate, and whether it has since been refunded in the Shippo dashboard.

Inputs

Label IDlabel_idtextRequired
The label's Shippo ID: 32 letters and numbers, from the 'Label ID' that 'Buy a shipping label' hands back. This is not the tracking number.

Outputs

A bought shipping label.

commercial_invoice_urltext
Link to the commercial invoice, on international shipments that need one.
createdtext
When the label was bought.
etatext
The carrier's estimated delivery time.
label_file_typetext
Format of that file, e.g. 'PDF_4x6'.
label_idtext
Shippo's ID for this label. This is what refunding it, or reading it back later, asks for.
label_urltext
Direct link to the label file, in the format asked for. This is what to email, attach or print.
messageslist
Anything Shippo or the carrier wanted to say about this: a carrier that did not answer in time, a service that is not enabled. Present even when the step succeeded.
qr_code_urltext
Link to a QR code for label-free drop-off, where the carrier offers it.
rate_idtext
The rate this label was bought against.
statustext
'SUCCESS' when the label is ready. 'REFUNDED', 'REFUNDPENDING' and 'REFUNDREJECTED' describe a label that has been sent back.
testtrue/false
True when this was made with a test key: no money changed hands and any tracking number is a mock one that never moves.
tracking_numbertext
The carrier's tracking number for this parcel.
tracking_statustext
Where the parcel is, as of the last carrier scan.
tracking_urltext
The carrier's own tracking page for this parcel.
Example output
{
  "created": "2026-09-17T18:04:22.123Z",
  "eta": "2026-09-21T12:00:00Z",
  "label_file_type": "PDF_4x6",
  "label_id": "915d94940ea54c3a80cbfa328722f5a1",
  "label_url": "https://shippo-delivery.s3.amazonaws.com/915d9494.pdf",
  "rate_id": "ee81fab0372e419ab52245c8952ccaeb",
  "status": "SUCCESS",
  "test": true,
  "tracking_number": "9205590164917312751089",
  "tracking_status": "PRE_TRANSIT",
  "tracking_url": "https://tools.usps.com/go/TrackConfirmAction?tLabels=92055901"
}

Get an order

Read one order back: what was bought, where it is going and whether a label has been made for it.

Inputs

Order IDorder_idtextRequired
The order's Shippo ID: 32 letters and numbers, from the 'Order ID' that 'List orders' or 'Create an order' hands back. This is not the order number your shop uses.

Outputs

One order waiting to be shipped.

currencytext
Currency of the total.
item_countnumber
How many lines are on the order.
itemslist
What was ordered.
label_countnumber
How many labels have been bought against it.
notestext
Notes from the buyer or seller.
order_idtext
Shippo's ID for the order.
order_numbertext
The number the shop knows it by, e.g. '#1024'.
placed_attext
When the order was placed.
ship_toobject
Where the order is going.
shipping_costtext
What the buyer paid for shipping.
shipping_methodtext
What the buyer chose at checkout.
shop_apptext
Where the order came from, e.g. 'Shopify' or 'Shippo' for one created through the API.
statustext
PAID, AWAITPAY, PARTIALLY_FULFILLED, SHIPPED, REFUNDED, CANCELLED or UNKNOWN.
testtrue/false
True when this was made with a test key: no money changed hands and any tracking number is a mock one that never moves.
totalnumber
The same total as a number, for comparing.
total_pricetext
What the buyer paid in total, as text.
weighttext
Total weight of the order.
weight_unittext
Unit of that weight.
Example output
{
  "currency": "USD",
  "item_count": 1,
  "items": [
    {
      "currency": "USD",
      "quantity": 1,
      "sku": "HM-123",
      "title": "Hippo Magazines",
      "total_price": "12.10",
      "weight": "0.4",
      "weight_unit": "lb"
    }
  ],
  "label_count": 0,
  "order_id": "4f2bc588e4e5446cb3f9fdb7cd5e190b",
  "order_number": "#1068",
  "placed_at": "2026-09-17T10:12:00Z",
  "ship_to": {
    "city": "San Francisco",
    "country": "US",
    "email": "mrhippo@shippo.com",
    "name": "Mr Hippo",
    "phone": "+1 555 341 9393",
    "state": "CA",
    "street1": "965 Mission St",
    "street2": "Ste 201",
    "zip": "94103"
  },
  "shipping_cost": "5.50",
  "shipping_method": "USPS Priority Mail",
  "shop_app": "Shippo",
  "status": "PAID",
  "test": true,
  "total": 24.99,
  "total_price": "24.99",
  "weight": "0.4",
  "weight_unit": "lb"
}

Get shipping rates

Price one parcel from one address to another across every carrier on your Shippo account. Comes back cheapest first, with the cheapest and fastest picked out for you, and each rate carries the ID that 'Buy a shipping label' needs.

Inputs

From: namefrom_nametextRequired
Person or company sending the parcel.
From: companyfrom_companytext
Company name, if there is one.
From: streetfrom_street1textRequired
Street number and street name.
From: street line 2from_street2text
Apartment, suite or floor, if there is one.
From: cityfrom_citytextRequired
City or town.
From: state or provincefrom_statetext
Two-letter state for the US, Canada and Australia, such as 'CA'. Required for those countries and ignored where the carrier does not use one.
From: postal codefrom_ziptextRequired
Postal or ZIP code.
From: countryfrom_countrytextRequired
The country you are shipping from.One of: AF (Afghanistan), AX (Åland Islands), AL (Albania), DZ (Algeria), AD (Andorra), AO (Angola), AI (Anguilla), AQ (Antarctica), AG (Antigua & Barbuda), AR (Argentina), and 239 more.
From: phonefrom_phonetext
Phone number. Carriers call ahead with it, and some refuse a label without one.
From: emailfrom_emailtext
Email address, used for carrier delivery notices.
To: nameto_nametextRequired
Person or company receiving the parcel.
To: companyto_companytext
Company name, if there is one.
To: streetto_street1textRequired
Street number and street name.
To: street line 2to_street2text
Apartment, suite or floor, if there is one.
To: cityto_citytextRequired
City or town.
To: state or provinceto_statetext
Two-letter state for the US, Canada and Australia, such as 'CA'. Required for those countries and ignored where the carrier does not use one.
To: postal codeto_ziptextRequired
Postal or ZIP code.
To: countryto_countrytextRequired
The country you are shipping to. Choosing one outside the sending country makes this an international shipment, which needs a customs form.One of: AF (Afghanistan), AX (Åland Islands), AL (Albania), DZ (Algeria), AD (Andorra), AO (Angola), AI (Anguilla), AQ (Antarctica), AG (Antigua & Barbuda), AR (Argentina), and 239 more.
To: phoneto_phonetext
Phone number. Carriers call ahead with it, and some refuse a label without one.
To: emailto_emailtext
Email address, used for carrier delivery notices.
LengthlengthnumberRequired
Longest side of the box.At least 0.01.
WidthwidthnumberRequired
Second-longest side of the box.At least 0.01.
HeightheightnumberRequired
Shortest side of the box.At least 0.01.
Size unitdistance_unittextRequired
The unit the three measurements above are in.One of: in (Inches (in)), cm (Centimetres (cm)), ft (Feet (ft)), m (Metres (m)), mm (Millimetres (mm)), yd (Yards (yd)). Default: in.
WeightweightnumberRequired
What the parcel weighs, packed and ready to go.At least 0.01.
Weight unitmass_unittextRequired
The unit the weight above is in.One of: lb (Pounds (lb)), oz (Ounces (oz)), kg (Kilograms (kg)), g (Grams (g)). Default: lb.
Ship onshipment_datedate and time
When the parcel will be handed to the carrier. Leave blank for now. Some carriers only quote for a working day in the future.
Only these carrierscarrier_accountstext
Limit the quote to these carriers. Choose none to price across every carrier on the account.
Customs formcustoms_form_idtext
For an international shipment: 32 letters and numbers, from the 'Customs form ID' that 'Create a customs form' hands back. Leave blank when shipping within one country.
Insure forinsurance_amountnumber
What the contents are worth. Leave blank for no insurance; insurance costs extra and is added to every quoted rate.At least 0.01.
Insurance currencyinsurance_currencytext
Currency the goods are valued in. Required when insuring.One of: USD (USD (US Dollar)), EUR (EUR (Euro)), GBP (GBP (Pound Sterling)), CAD (CAD (Canadian Dollar)), AUD (AUD (Australian Dollar)), NZD (NZD (New Zealand Dollar)), JPY (JPY (Yen)), CNY (CNY (Yuan Renminbi)), CHF (CHF (Swiss Franc)), SEK (SEK (Swedish Krona)), and 145 more.
What is being insuredinsurance_contentstext
Short description of the contents, for the insurer.
Signature on deliverysignature_confirmationtext
Require someone to sign for the parcel. Leave blank to let the carrier leave it. Costs extra.One of: STANDARD (Signature required), ADULT (Adult signature required (21+)), CERTIFIED (Certified Mail (USPS only)), INDIRECT (Indirect signature (FedEx only)), CARRIER_CONFIRMATION (Carrier confirmation (Deutsche Post only)).
Saturday deliverysaturday_deliverytrue/false
Ask for Saturday delivery where the carrier offers it. Costs extra.
Reference 1reference_1text
Text printed on the label where the carrier supports it, an order number usually. Up to 50 characters.
Reference 2reference_2text
A second line of label text, up to 50 characters.
Referencemetadatatext
Your own note against this shipment, up to 100 characters. Shippo stores it and hands it back; carriers never see it.

Outputs

Every price quoted for one parcel, cheapest first.

cheapestobject
The lowest-priced rate, already picked out.
fastestobject
The rate with the fewest days in transit, already picked out. Absent when no carrier gave an estimate.
messageslist
Anything Shippo or the carrier wanted to say about this: a carrier that did not answer in time, a service that is not enabled. Present even when the step succeeded.
rate_countnumber
How many rates were quoted.
rateslist
Every quoted rate, cheapest first.
shipment_idtext
Shippo's ID for this quote. Pass it to 'Get a shipment' to read the same rates again.
statustext
Shippo's state for the quote, normally 'SUCCESS'.
testtrue/false
True when this was made with a test key: no money changed hands and any tracking number is a mock one that never moves.
Example output
{
  "cheapest": {
    "amount": "9.35",
    "attributes": [
      "CHEAPEST",
      "BESTVALUE"
    ],
    "carrier": "USPS",
    "carrier_account": "078870331023437cb917f5187429b093",
    "currency": "USD",
    "duration_terms": "Delivery in 1 to 3 business days.",
    "estimated_days": 2,
    "price": 9.35,
    "rate_id": "ee81fab0372e419ab52245c8952ccaeb",
    "service": "Priority Mail",
    "service_token": "usps_priority",
    "test": true
  },
  "fastest": {
    "amount": "9.35",
    "attributes": [
      "CHEAPEST",
      "BESTVALUE"
    ],
    "carrier": "USPS",
    "carrier_account": "078870331023437cb917f5187429b093",
    "currency": "USD",
    "duration_terms": "Delivery in 1 to 3 business days.",
    "estimated_days": 2,
    "price": 9.35,
    "rate_id": "ee81fab0372e419ab52245c8952ccaeb",
    "service": "Priority Mail",
    "service_token": "usps_priority",
    "test": true
  },
  "rate_count": 1,
  "rates": [
    {
      "amount": "9.35",
      "attributes": [
        "CHEAPEST",
        "BESTVALUE"
      ],
      "carrier": "USPS",
      "carrier_account": "078870331023437cb917f5187429b093",
      "currency": "USD",
      "duration_terms": "Delivery in 1 to 3 business days.",
      "estimated_days": 2,
      "price": 9.35,
      "rate_id": "ee81fab0372e419ab52245c8952ccaeb",
      "service": "Priority Mail",
      "service_token": "usps_priority",
      "test": true
    }
  ],
  "shipment_id": "89436997a794439ab47999701e60392e",
  "status": "SUCCESS",
  "test": true
}

List carrier accounts

See which carriers this Shippo account can buy from, and get the account IDs that narrow a quote to one of them.

Inputs

Carriercarriertext
Only accounts with this carrier. Leave blank for all of them.One of: airterra, apc_postal (APC Postal), apg, aramex, asendia_us (Asendia US), australia_post (Australia Post (also Startrack)), axlehire (Jitsu), better_trucks (BetterTrucks), borderguru, boxberry, and 48 more.
Only carriers I can buy fromactive_onlytrue/false
Leave out accounts that are switched off. A switched-off account quotes nothing.
Pagepagenumber
Which page of results to return. Leave blank for the first.From 1 to 10000.
Results per pageresultsnumber
How many carrier accounts to return on one page, from 1 to 100. Leave blank for Shippo's default.From 1 to 100.

Outputs

The carriers this Shippo account can buy from.

carrier_accountslist
The carrier accounts on this page.
countnumber
How many records are on this page.
has_moretrue/false
True when there is another page after this one.
totalnumber
How many records match in total, across all pages.
Example output
{
  "carrier_accounts": [
    {
      "account_number": "********1234",
      "active": true,
      "carrier": "usps",
      "carrier_account_id": "078870331023437cb917f5187429b093",
      "carrier_name": "USPS",
      "is_shippo_account": true,
      "test": true
    }
  ],
  "count": 1,
  "has_more": false,
  "total": 1
}

List orders

Find orders in Shippo: the ones paid for and waiting to be shipped, usually. Orders synced from a connected shop appear here too.

Inputs

Order statusorder_statustext
Only orders in these states. Choose none for all of them.One or more of: PAID (Paid, ready to ship), AWAITPAY (Awaiting payment), PARTIALLY_FULFILLED (Partly shipped), SHIPPED, REFUNDED, CANCELLED, UNKNOWN.
Came fromshop_apptext
Only orders from this shop. 'Shippo' covers the ones created through this integration. Leave blank for all of them.One of: Shippo, Shopify, Amazon, eBay, Etsy, WooCommerce, Bigcommerce, Magento, Walmart, Weebly, and 5 more.
Ordered afterplaced_afterdate and time
Only orders placed after this moment.
Ordered beforeplaced_beforedate and time
Only orders placed before this moment.
Pagepagenumber
Which page of results to return. Leave blank for the first.From 1 to 10000.
Results per pageresultsnumber
How many orders to return on one page, from 1 to 100. Leave blank for Shippo's default.From 1 to 100.

Outputs

A page of orders.

countnumber
How many records are on this page.
has_moretrue/false
True when there is another page after this one.
orderslist
The orders on this page.
totalnumber
How many records match in total, across all pages.
Example output
{
  "count": 1,
  "has_more": false,
  "orders": [
    {
      "currency": "USD",
      "item_count": 1,
      "items": [
        {
          "currency": "USD",
          "quantity": 1,
          "sku": "HM-123",
          "title": "Hippo Magazines",
          "total_price": "12.10",
          "weight": "0.4",
          "weight_unit": "lb"
        }
      ],
      "label_count": 0,
      "order_id": "4f2bc588e4e5446cb3f9fdb7cd5e190b",
      "order_number": "#1068",
      "placed_at": "2026-09-17T10:12:00Z",
      "ship_to": {
        "city": "San Francisco",
        "country": "US",
        "email": "mrhippo@shippo.com",
        "name": "Mr Hippo",
        "phone": "+1 555 341 9393",
        "state": "CA",
        "street1": "965 Mission St",
        "street2": "Ste 201",
        "zip": "94103"
      },
      "shipping_cost": "5.50",
      "shipping_method": "USPS Priority Mail",
      "shop_app": "Shippo",
      "status": "PAID",
      "test": true,
      "total": 24.99,
      "total_price": "24.99",
      "weight": "0.4",
      "weight_unit": "lb"
    }
  ],
  "total": 1
}

List shipping labels

Find labels this account has bought: everything shipped yesterday, everything still undelivered, everything refunded.

Inputs

Purchase statusstatustext
Only labels in this state. Leave blank for all of them.One of: SUCCESS (Bought, label ready), QUEUED (Queued with the carrier), WAITING (Waiting on the carrier), ERROR (Failed), REFUNDED, REFUNDPENDING (Refund pending), REFUNDREJECTED (Refund rejected).
Delivery statustracking_statustext
Only parcels at this point in their journey. Leave blank for all of them.One of: PRE_TRANSIT (Label made, not yet collected), TRANSIT (On its way), DELIVERED, RETURNED (Returned to sender), FAILURE (Delivery failed), UNKNOWN (No scans yet).
Raterate_idtext
Only the label bought against this rate, using a 'Rate ID' from 'Get shipping rates'. Leave blank for all of them.
Bought aftercreated_afterdate and time
Only labels bought after this moment.
Bought beforecreated_beforedate and time
Only labels bought before this moment.
Pagepagenumber
Which page of results to return. Leave blank for the first.From 1 to 10000.
Results per pageresultsnumber
How many labels to return on one page, from 1 to 100. Leave blank for Shippo's default.From 1 to 100.

Outputs

A page of bought labels.

countnumber
How many records are on this page.
has_moretrue/false
True when there is another page after this one.
labelslist
The labels on this page, newest first.
totalnumber
How many records match in total, across all pages.
Example output
{
  "count": 1,
  "has_more": false,
  "labels": [
    {
      "created": "2026-09-17T18:04:22.123Z",
      "eta": "2026-09-21T12:00:00Z",
      "label_file_type": "PDF_4x6",
      "label_id": "915d94940ea54c3a80cbfa328722f5a1",
      "label_url": "https://shippo-delivery.s3.amazonaws.com/915d9494.pdf",
      "rate_id": "ee81fab0372e419ab52245c8952ccaeb",
      "status": "SUCCESS",
      "test": true,
      "tracking_number": "9205590164917312751089",
      "tracking_status": "PRE_TRANSIT",
      "tracking_url": "https://tools.usps.com/go/TrackConfirmAction?tLabels=92055901"
    }
  ],
  "total": 1
}

Track a package

Find out where a parcel is. Every carrier's answer comes back in the same six words (on its way, delivered, returned), so a workflow can branch on it without knowing who is carrying it.

Inputs

CarriercarriertextRequired
Who is carrying the parcel. Pick 'Shippo test tracking' with a test key to try this out: it accepts SHIPPO_PRE_TRANSIT, SHIPPO_TRANSIT, SHIPPO_DELIVERED, SHIPPO_RETURNED, SHIPPO_FAILURE and SHIPPO_UNKNOWN as tracking numbers.One of: shippo (Shippo test tracking (test key only)), airterra, apc_postal (APC Postal), apg, aramex, asendia_us (Asendia US), australia_post (Australia Post (also Startrack)), axlehire (Jitsu), better_trucks (BetterTrucks), borderguru, and 49 more.
Tracking numbertracking_numbertextRequired
The carrier's tracking number, as printed on the label.

Outputs

Where a parcel is, in the same words for every carrier.

carriertext
Carrier token, e.g. 'usps'.
deliveredtrue/false
True when the status is DELIVERED. Branch on this.
detailstext
The carrier's description of the latest scan.
etatext
Carrier's current estimate.
event_countnumber
How many scans there have been.
historylist
Every scan so far, oldest first.
label_idtext
The label this parcel was shipped on, when it was bought through Shippo.
locationtext
Where the latest scan happened.
messageslist
Anything Shippo or the carrier wanted to say about this: a carrier that did not answer in time, a service that is not enabled. Present even when the step succeeded.
original_etatext
The estimate the carrier gave when the parcel was collected. Compare with 'eta' to spot a delay.
servicetext
Service the parcel is travelling on.
statustext
PRE_TRANSIT, TRANSIT, DELIVERED, RETURNED, FAILURE or UNKNOWN. The same six words whichever carrier it is, which is what makes this safe to branch on.
status_labeltext
The same status in plain words, for showing people.
tracking_numbertext
The number that was tracked.
updated_attext
When that latest scan happened.
Example output
{
  "carrier": "shippo",
  "delivered": false,
  "details": "Your shipment has departed from the origin.",
  "eta": "2026-09-21T12:00:00Z",
  "event_count": 2,
  "history": [
    {
      "at": "2026-09-15T17:30:00Z",
      "details": "The carrier has received the electronic shipment information.",
      "location": "San Francisco, CA, US",
      "status": "PRE_TRANSIT"
    },
    {
      "at": "2026-09-16T09:12:00Z",
      "details": "Your shipment has departed from the origin.",
      "location": "San Francisco, CA, US",
      "status": "TRANSIT"
    }
  ],
  "location": "San Francisco, CA, US",
  "service": "Priority Mail",
  "status": "TRANSIT",
  "status_label": "On its way",
  "tracking_number": "SHIPPO_TRANSIT",
  "updated_at": "2026-09-16T09:12:00Z"
}

On this page