Skip to main content

Shipments

Karrio exposes API endpoints that forwards shipping requests to the carrier's API.

Shipping Flow

From a technical perspective, the shipping process can visualized as follow

Prepare a package

Prepare a package

Yes

Yes

Require shipping details
  • shipper address

  • receiver address
    - package weight & dimension

Require shipping details...

Receive a list of rates

Receive a list of rates

GET SHIPPING RATES

GET SHIPPING RATES

Buy a shipping label

Buy a shipping label

Yes

Yes

Require preferred shipping rate

Require preferred shipp...

Receive a shipping label

Receive a shipping label

GENERATE SHIPPING LABEL

GENERATE SHIPPING LABEL

Viewer does not support full SVG 1.1

Shipments Management APIs

The shipments management APIs offer a set of endpoints around the karrio unified shipment object.

Create a shipment

POST /v1/shipments

You can use this endpoint to create a shipment object in the karrio system and retrieve shipping rates for it.

curl --request POST \
--url 'https://api.karrio.io/v1/shipments' \
--header 'Authorization: Token [API_KEY]' \
--header 'Content-Type: application/json' \
--data '{
"shipper": {
"postal_code": "E1C4Z8",
"city": "Moncton",
"federal_tax_id": null,
"state_tax_id": null,
"person_name": "John Doe",
"company_name": "A corp.",
"country_code": "CA",
"email": null,
"phone_number": "+1 514-000-0000",
"state_code": "NB",
"suburb": null,
"residential": false,
"address_line1": "125 Church St",
"address_line2": null,
"validate_location": null
},
"recipient": {
"postal_code": "V6M2V9",
"city": "Vancouver",
"person_name": "Jane Doe",
"company_name": "B corp.",
"country_code": "CA",
"email": null,
"phone_number": "+1 514-000-0000",
"state_code": "BC",
"residential": true,
"address_line1": "5840 Oak St",
"address_line2": null,
"validate_location": null
},
"parcels": [
{
"weight": 1,
"width": 46,
"height": 38,
"length": 32,
"packaging_type": null,
"package_preset": "canadapost_corrugated_medium_box",
"description": null,
"content": null,
"is_document": false,
"weight_unit": "KG",
"dimension_unit": "CM"
}
],
"options": {},
"carrier_ids": ["canadapost"]
}'

Buy the shipment label

POST /v1/shipments/[shipment_id]/purchase

Since the shipment object is stored on the karrio server, all you need is to provide the preferred shipping rate id to buy the label.

curl --request POST \
--url https://api.karrio.io/v1/shipments/shp_e53f4d88846a48079e71c2fff81dfddc/purchase \
--header 'Authorization: Token [API_KEY]' \
--header 'Content-Type: application/json' \
--data '{
"selected_rate_id": "rat_314a24e3a2b3444a9c4f688daced0cb8"
}'

Proxy Request APIs

The proxy APIs allow you to send shipping requests to carriers without creating any objects in karrio.

info

In that schenario, karrio is just a proxy that forward requests.

Get shipping rates

POST /v1/proxy/rates

You can use the this endpoint to get shipping rates from a carrier. based off the provided shipping details.

curl --request POST \
--url https://api.karrio.io/v1/proxy/rates \
--header 'Authorization: Token [API_KEY]' \
--header 'Content-Type: application/json' \
--data '{
"shipper": {
"postal_code": "V6M2V9",
"city": "Vancouver",
"country_code": "CA",
"state_code": "BC",
"residential": true,
"address_line1": "5840 Oak St"
},
"recipient": {
"postal_code": "E1C4Z8",
"city": "Moncton",
"country_code": "CA",
"state_code": "NB",
"residential": false,
"address_line1": "125 Church St"
},
"parcels": [{
"weight": 1,
"weight_unit": "KG",
"package_preset": "canadapost_corrugated_small_box"
}],
"carrier_ids": ["canadapost"]
}'

Buy shipping label

POST /v1/proxy/shipping

You can use this endpoint to buy a shipping service from a carrier and get a label in return.

To buy a shipping label, you need to provide the shipping details, the rates retrieved previously and the preferred rate' selected_rate_id.

curl --request POST \
--url https://api.karrio.io/v1/proxy/shipping \
--header 'Authorization: Token [API_KEY]' \
--header 'Content-Type: application/json' \
--data '{
"selected_rate_id": "rat_c84e2953599d4757b1d9265a5e36a54b",
"label_type": "PDF",
"options": {},
"recipient": {
"address_line1": "125 Church St",
"person_name": "John Doe",
"company_name": "A corp.",
"phone_number": "514 000 0000",
"city": "Moncton",
"country_code": "CA",
"postal_code": "E1C4Z8",
"residential": false,
"state_code": "NB"
},
"shipper": {
"address_line1": "5840 Oak St",
"person_name": "Jane Doe",
"company_name": "B corp.",
"phone_number": "514-000-0000",
"city": "Vancouver",
"country_code": "CA",
"postal_code": "V6M2V9",
"residential": false,
"state_code": "BC"
},
"parcels": [
{
"weight": 1,
"weight_unit": "LB",
"package_preset": "canadapost_corrugated_small_box"
}
],
"rates": [
{
"id": "rat_c84e2953599d4757b1d9265a5e36a54b",
"carrier_name": "canadapost",
"carrier_id": "canadapost",
"currency": "CAD",
"service": "canadapost_regular_parcel",
"discount": 3.52,
"base_charge": 27.06,
"total_charge": 35.17,
"duties_and_taxes": 4.59,
"transit_days": 10,
"extra_charges": [
{
"name": "Fuel surcharge",
"amount": 3.52,
"currency": "CAD"
}
],
"meta": {
"service_name": "CANADAPOST REGULAR PARCEL",
"rate_provider": "canadapost"
},
"carrier_ref": "car_773f4a5577e4471e8918a9a1d47b208b",
"test_mode": true
},
{
"id": "rat_c557e31a85ee46e6914545f0c4eb60fb",
"carrier_name": "canadapost",
"carrier_id": "canadapost",
"currency": "CAD",
"service": "canadapost_xpresspost",
"discount": 9.74,
"base_charge": 74.96,
"total_charge": 97.41,
"duties_and_taxes": 12.71,
"transit_days": 3,
"extra_charges": [
{
"name": "Fuel surcharge",
"amount": 9.74,
"currency": "CAD"
}
],
"meta": {
"service_name": "CANADAPOST XPRESSPOST",
"rate_provider": "canadapost"
},
"carrier_ref": "car_773f4a5577e4471e8918a9a1d47b208b",
"test_mode": true
}
],
"payment": {
"currency": "CAD",
"paid_by": "sender"
},
"reference": "Order Id: #1222"
}'

Next steps