Shipping
Connect Shippo
Your application calls one EchoRelay URL. When Shippo changes its API, you update the mapping, not your application.
How Shippo signs requests
Every call carries your API token in the Authorization header, written as ShippoToken, a space, then the token. Test tokens start with shippo_test_ and live tokens with shippo_live_.
Can you connect it today?
Yes. Add an API-key-in-a-header credential with the header name Authorization and the value ShippoToken, a space, then your API token.
A sample mapping
Your application sends the first request below. The mapping turns it into the body of POST /shipments, shown second.
Your request
{
"from": {
"name": "Acme Shop",
"street": "215 Clayton St.",
"city": "San Francisco",
"state": "CA",
"zip": "94117",
"country": "US"
},
"to": {
"name": "Ana Silva",
"street": "965 Mission St",
"city": "San Francisco",
"state": "CA",
"zip": "94103",
"country": "US"
},
"boxes": [
{
"length": "10",
"width": "15",
"height": "10",
"weight": "1"
}
]
}
What Shippo receives
{
"address_from": {
"name": "Acme Shop",
"street1": "215 Clayton St.",
"city": "San Francisco",
"state": "CA",
"zip": "94117",
"country": "US"
},
"address_to": {
"name": "Ana Silva",
"street1": "965 Mission St",
"city": "San Francisco",
"state": "CA",
"zip": "94103",
"country": "US"
},
"parcels": [
{
"length": "10",
"width": "15",
"height": "10",
"distance_unit": "in",
"weight": "1",
"mass_unit": "lb"
}
],
"async": false
}
The mapping
{
"$schema": "https://schemas.echorelay.dev/transform/mapping/v1.json",
"root": {
"type": "object",
"id": "root",
"properties": {
"address_from": {
"type": "object",
"id": "address-from",
"properties": {
"name": {
"type": "field",
"id": "from-name",
"path": "from.name"
},
"street1": {
"type": "field",
"id": "from-street",
"path": "from.street"
},
"city": {
"type": "field",
"id": "from-city",
"path": "from.city"
},
"state": {
"type": "field",
"id": "from-state",
"path": "from.state"
},
"zip": {
"type": "field",
"id": "from-zip",
"path": "from.zip"
},
"country": {
"type": "field",
"id": "from-country",
"path": "from.country"
}
}
},
"address_to": {
"type": "object",
"id": "address-to",
"properties": {
"name": {
"type": "field",
"id": "to-name",
"path": "to.name"
},
"street1": {
"type": "field",
"id": "to-street",
"path": "to.street"
},
"city": {
"type": "field",
"id": "to-city",
"path": "to.city"
},
"state": {
"type": "field",
"id": "to-state",
"path": "to.state"
},
"zip": {
"type": "field",
"id": "to-zip",
"path": "to.zip"
},
"country": {
"type": "field",
"id": "to-country",
"path": "to.country"
}
}
},
"parcels": {
"type": "arrayMap",
"id": "parcels",
"source": {
"type": "field",
"id": "box-list",
"path": "boxes"
},
"element": {
"type": "object",
"id": "parcel",
"properties": {
"length": {
"type": "field",
"id": "length",
"path": "length"
},
"width": {
"type": "field",
"id": "width",
"path": "width"
},
"height": {
"type": "field",
"id": "height",
"path": "height"
},
"distance_unit": {
"type": "constant",
"id": "distance-unit",
"value": "in"
},
"weight": {
"type": "field",
"id": "weight",
"path": "weight"
},
"mass_unit": {
"type": "constant",
"id": "mass-unit",
"value": "lb"
}
}
}
},
"async": {
"type": "constant",
"id": "async",
"value": false
}
}
}
}
The grammar, the answer mapping and the dry run are in the mapping docs.
What you bring
This is not a ready-made connector. You bring a sample request or Shippo’s OpenAPI document, you or your agent write the mapping, and we run the integration you define.
Shippo facts on this page were read 2026-10-30 from Shippo API authentication, Shippo API reference: create a shipment. Another service? Check it here.
Connect everything. Deploy nothing.
No credit card required.