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
| Action | What it does |
|---|---|
| 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. |
| 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. |
| Create a customs form | Declare what is in a parcel crossing a border. |
| Create an order | Put an order into Shippo so it appears on the orders screen alongside those from connected shops. |
| Get a shipment | Read a quote back with the rates it was given, using the shipment ID from an earlier 'Get shipping rates'. |
| 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. |
| Get an order | Read one order back: what was bought, where it is going and whether a label has been made for it. |
| Get shipping rates | Price one parcel from one address to another across every carrier on your Shippo account. |
| 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. |
| List orders | Find orders in Shippo: the ones paid for and waiting to be shipped, usually. |
| List shipping labels | Find labels this account has bought: everything shipped yesterday, everything still undelivered, everything refunded. |
| Track a package | Find 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
- Rate
rate_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 format
label_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)). - Reference
metadatatext - 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: name
nametext - Person or company at this address.
- Address: company
companytext - Company name, if there is one.
- Address: street
street1text - Street number and street name.
- Address: street line 2
street2text - Apartment, suite or floor, if there is one.
- Address: city
citytext - City or town.
- Address: state or province
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.
- Address: postal code
ziptext - Postal or ZIP code.
- Address: country
countrytext - 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: phone
phonetext - Phone number. Carriers call ahead with it, and some refuse a label without one.
- Address: email
emailtext - 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 parcel
itemslistRequired - 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 goods
contents_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 goods
contents_explanationtext - Required only when the kind of goods is 'Something else'. Customs will not accept 'other' on its own.
- If it cannot be delivered
non_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 by
certify_signertextRequired - Name of the person taking responsibility for this declaration being true. It is printed on the form.
- Who pays duty
incotermtext - 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 exemption
eel_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 number
aes_itntext - The filing number, required only when the exemption above is 'AES ITN'.
- Invoice number
invoicetext - Your invoice number for these goods, if you have one.
- Reference
metadatatext - 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 number
order_numbertext - The number your shop knows this order by.
- Ordered at
placed_atdate and timeRequired - When the customer placed the order.
- Order status
order_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: name
to_nametextRequired - The customer's name.
- Ship to: company
to_companytext - Company name, if there is one.
- Ship to: street
to_street1textRequired - Street number and street name.
- Ship to: street line 2
to_street2text - Apartment, suite or floor, if there is one.
- Ship to: city
to_citytextRequired - City or town.
- Ship to: state or province
to_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 code
to_ziptextRequired - Postal or ZIP code.
- Ship to: country
to_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: phone
to_phonetext - Phone number. Carriers call ahead with it, and some refuse a label without one.
- Ship to: email
to_emailtext - Email address, used for carrier delivery notices.
- Items ordered
itemslist - One entry per line on the order.
- Order total
total_pricenumber - What the customer paid in total.At least 0.01.
- Currency
currencytext - 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 charged
shipping_costnumber - What the customer paid for shipping.At least 0.01.
- Shipping method
shipping_methodtext - What the customer chose at checkout, in their words: 'Free shipping', 'Next day'.
- Weight
weightnumber - What the whole order weighs, if you know it.At least 0.01.
- Weight unit
weight_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)). - Notes
notestext - 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 ID
shipment_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 ID
label_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 ID
order_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: name
from_nametextRequired - Person or company sending the parcel.
- From: company
from_companytext - Company name, if there is one.
- From: street
from_street1textRequired - Street number and street name.
- From: street line 2
from_street2text - Apartment, suite or floor, if there is one.
- From: city
from_citytextRequired - City or town.
- From: state or province
from_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 code
from_ziptextRequired - Postal or ZIP code.
- From: country
from_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: phone
from_phonetext - Phone number. Carriers call ahead with it, and some refuse a label without one.
- From: email
from_emailtext - Email address, used for carrier delivery notices.
- To: name
to_nametextRequired - Person or company receiving the parcel.
- To: company
to_companytext - Company name, if there is one.
- To: street
to_street1textRequired - Street number and street name.
- To: street line 2
to_street2text - Apartment, suite or floor, if there is one.
- To: city
to_citytextRequired - City or town.
- To: state or province
to_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 code
to_ziptextRequired - Postal or ZIP code.
- To: country
to_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: phone
to_phonetext - Phone number. Carriers call ahead with it, and some refuse a label without one.
- To: email
to_emailtext - Email address, used for carrier delivery notices.
- Length
lengthnumberRequired - Longest side of the box.At least 0.01.
- Width
widthnumberRequired - Second-longest side of the box.At least 0.01.
- Height
heightnumberRequired - Shortest side of the box.At least 0.01.
- Size unit
distance_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. - Weight
weightnumberRequired - What the parcel weighs, packed and ready to go.At least 0.01.
- Weight unit
mass_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 on
shipment_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 carriers
carrier_accountstext - Limit the quote to these carriers. Choose none to price across every carrier on the account.
- Customs form
customs_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 for
insurance_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 currency
insurance_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 insured
insurance_contentstext - Short description of the contents, for the insurer.
- Signature on delivery
signature_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 delivery
saturday_deliverytrue/false - Ask for Saturday delivery where the carrier offers it. Costs extra.
- Reference 1
reference_1text - Text printed on the label where the carrier supports it, an order number usually. Up to 50 characters.
- Reference 2
reference_2text - A second line of label text, up to 50 characters.
- Reference
metadatatext - 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
- Carrier
carriertext - 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 from
active_onlytrue/false - Leave out accounts that are switched off. A switched-off account quotes nothing.
- Page
pagenumber - Which page of results to return. Leave blank for the first.From 1 to 10000.
- Results per page
resultsnumber - 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 status
order_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 from
shop_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 after
placed_afterdate and time - Only orders placed after this moment.
- Ordered before
placed_beforedate and time - Only orders placed before this moment.
- Page
pagenumber - Which page of results to return. Leave blank for the first.From 1 to 10000.
- Results per page
resultsnumber - 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 status
statustext - 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 status
tracking_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). - Rate
rate_idtext - Only the label bought against this rate, using a 'Rate ID' from 'Get shipping rates'. Leave blank for all of them.
- Bought after
created_afterdate and time - Only labels bought after this moment.
- Bought before
created_beforedate and time - Only labels bought before this moment.
- Page
pagenumber - Which page of results to return. Leave blank for the first.From 1 to 10000.
- Results per page
resultsnumber - 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
- Carrier
carriertextRequired - 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 number
tracking_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"
}