eShip Compatibility
Overview
Parsel offers compatible API layers that mirror the API surface of popular shipping platforms. If your WMS or TMS already integrates with one of these platforms, you can switch to Parsel without rewriting your integration — just change the base URL and use your Parsel API token.
This page covers the eShip compatible API. Additional compatibility layers will be added over time.
How it works
If your WMS or TMS already integrates with eShip, you can switch to Parsel by changing the base URL and API token. No code changes needed.
| eShip endpoint | Parsel equivalent |
|---|---|
https://api.myeship.co/rest/quotation | https://api.parsel.app/compatible/eship/rest/quotation |
https://api.myeship.co/rest/shipment | https://api.parsel.app/compatible/eship/rest/shipment |
https://api.myeship.co/rest/shipments | https://api.parsel.app/compatible/eship/rest/shipments |
https://api.myeship.co/rest/track | https://api.parsel.app/compatible/eship/rest/track |
Authentication
Use the same Authorization: Bearer <token> header, but with your Parsel API token instead of your eShip API key.
Authorization: Bearer YOUR_PARSEL_API_TOKENQuick Start
Step 1: Get rates (quotation)
curl -X POST https://api.parsel.app/compatible/eship/rest/quotation \
-H "Authorization: Bearer YOUR_PARSEL_API_TOKEN" \
-H "Content-Type: application/json" \
-d '{
"address_from": {
"name": "Warehouse",
"street1": "123 Main St",
"city": "Los Angeles",
"state": "CA",
"zip": "90001",
"country": "US",
"phone": "5551234567"
},
"address_to": {
"name": "Customer",
"street1": "456 Oak Ave",
"city": "New York",
"state": "NY",
"zip": "10001",
"country": "US",
"phone": "5559876543"
},
"parcels": [
{
"length": 10,
"width": 8,
"height": 5,
"weight": 2,
"mass_unit": "lb",
"distance_unit": "in"
}
]
}'Response:
{
"object_id": "shipment-uuid",
"status": "SUCCESS",
"rates": [
{
"rate_id": "rate-uuid",
"provider": "UPS",
"amount": 8.50,
"currency": "USD",
"days": 3,
"servicelevel": {
"name": "Ground",
"token": "ground"
},
"tags": []
}
],
"address_from": { "..." : "..." },
"address_to": { "..." : "..." },
"parcels": [ { "..." : "..." } ]
}Step 2: Buy a label (shipment)
Use the rate_id from the quotation response to purchase a shipping label.
curl -X POST https://api.parsel.app/compatible/eship/rest/shipment \
-H "Authorization: Bearer YOUR_PARSEL_API_TOKEN" \
-H "Content-Type: application/json" \
-d '{
"rate_id": "rate-uuid-from-quotation",
"label_format": "PDF"
}'Response:
{
"object_id": "shipment-uuid",
"status": "SUCCESS",
"label_url": "https://labels.parsel.app/label.pdf",
"tracking_number": "1Z999AA10123456784",
"commercial_invoice": false
}Step 3: Track a shipment
curl -X POST https://api.parsel.app/compatible/eship/rest/track \
-H "Authorization: Bearer YOUR_PARSEL_API_TOKEN" \
-H "Content-Type: application/json" \
-d '{
"tracking_number": "1Z999AA10123456784"
}'Response:
{
"object_id": "1Z999AA10123456784",
"status": "TRANSIT",
"substatus": "in_transit",
"tracking_number": "1Z999AA10123456784",
"events": [
{
"status": "TRANSIT",
"substatus": "in_transit",
"status_details": "Package in transit to destination",
"timestamp": "2025-03-15T14:30:00Z",
"location": "Memphis, TN, US"
}
]
}Status Mapping
Parsel maps its internal shipping statuses to eShip-compatible statuses:
| Parsel Status | eShip Status | eShip Substatus |
|---|---|---|
PRE_TRANSIT | UNKNOWN | label_created |
IN_TRANSIT | TRANSIT | in_transit |
OUT_FOR_DELIVERY | TRANSIT | out_for_delivery |
DELIVERED | DELIVERED | delivered |
RETURN_TO_SENDER | RETURNED | returned |
ERROR | FAILURE | delivery_issue |
Migration Guide
To switch from eShip to Parsel:
- Get a Parsel API token from your Parsel dashboard
- Change the base URL from
https://api.myeship.cotohttps://api.parsel.app/compatible/eship - Replace the API key in the
Authorization: Bearerheader with your Parsel token - No code changes needed - request/response formats are compatible
Limitations
- Only the first parcel in the
parcelsarray is processed (multi-parcel support coming soon) - Batch shipment endpoints are not yet supported
- Pickup scheduling is not yet supported
- Address validation (
/rest/validate) is available on the native Parsel API atPOST /addresses/verify