OK
ShipSaving New Open API (v1.0.5)
https://x-api.shipsaving.us/
https://x-api.shipsaving.com/
Request
This endpoint allows you to quickly retrieve shipment rate quotes by providing the from_address_data
, to_address_data
, package_data
and the ship_date
. Currently, only the USPS Ground Advantage service level is supported.
Each API call can include up to 10 individual rate requests.
- Sandbox server
https://x-api.shipsaving.us/api/shipment/batch/quick_rate
- Production server
https://x-api.shipsaving.com/api/shipment/batch/quick_rate
- curl
- JavaScript
- Node.js
- Python
- Java
- C#
- PHP
- Go
- Ruby
- R
- Payload
curl -i -X POST \
https://x-api.shipsaving.us/api/shipment/batch/quick_rate \
-H 'Authorization: Bearer <YOUR_JWT_HERE>' \
-H 'Content-Type: application/json' \
-d '{
"rate_requests": [
{
"request_unique_id": "unique_uuid_001",
"from_address_data": {
"phone": "1234567890",
"email": "support@shipsaving.com",
"street": "xxxx Castleton Street",
"street2": "STE XXX",
"city": "Los Angeles",
"state": "CA",
"country": "US",
"company_name": "company name",
"first_name": "Alice",
"last_name": "Green",
"zip_code": "917XX",
"address_type": "residential"
},
"to_address_data": {
"phone": "1234567890",
"email": "support@shipsaving.com",
"street": "xxxx Castleton Street",
"street2": "STE XXX",
"city": "Los Angeles",
"state": "CA",
"country": "US",
"company_name": "company name",
"first_name": "Alice",
"last_name": "Green",
"zip_code": "917XX",
"address_type": "residential"
},
"package_data": {
"type": "my_package",
"length": 10,
"width": 10,
"height": 10,
"weight": 10,
"carrier_package_code": "USPS_LETTER",
"dimension_unit": "in",
"weight_unit": "lb"
},
"option_data": {
"signature": "signature",
"custom_text_on_label_1": "text1",
"custom_text_on_label_2": "text2",
"hazardous_materials": true,
"additional_handing": false
},
"ship_date": "2025-07-31T00:00:00+08:00"
}
]
}'
Address object of the sender/recipient.
Phone number of the sender/recipient. Required for international shipments. Providing a phone number is highly recommended for all shipments to ensure accurate delivery and facilitate carrier contact if needed. For the Batch Quick Rate API, this parameter is optional.
Email address of the sender/recipient. May be used by the carrier for delivery notifications or issue resolution. For the Batch Quick Rate API, this parameter is optional.
Optional secondary address line (e.g., Apt, Suite, Unit, Floor).
- For U.S. addresses, this field must be a valid two-letter state code as defined by ISO 3166-2:US (e.g., "CA" for California, "NY" for New York).
- For non-U.S. addresses, there is no restriction on the value.
2-letter code for country. This field’s value will be an ISO 3166-1 two-digit code.
For the Batch Quick Rate API, this parameter is optional.
For the Batch Quick Rate API, this parameter is optional.
Specifying this parameter allows you to filter rates by carrier and service level, enabling faster queries.
Address object of the sender/recipient.
Phone number of the sender/recipient. Required for international shipments. Providing a phone number is highly recommended for all shipments to ensure accurate delivery and facilitate carrier contact if needed. For the Batch Quick Rate API, this parameter is optional.
Email address of the sender/recipient. May be used by the carrier for delivery notifications or issue resolution. For the Batch Quick Rate API, this parameter is optional.
Optional secondary address line (e.g., Apt, Suite, Unit, Floor).
- For U.S. addresses, this field must be a valid two-letter state code as defined by ISO 3166-2:US (e.g., "CA" for California, "NY" for New York).
- For non-U.S. addresses, there is no restriction on the value.
2-letter code for country. This field’s value will be an ISO 3166-1 two-digit code.
For the Batch Quick Rate API, this parameter is optional.
For the Batch Quick Rate API, this parameter is optional.
Defines the type of package being shipped.
my_package
: Use when specifying custom package dimensions. Requireswidth
,length
,height
,dimension_unit
,weight
, andweight_unit
.predefined
: Use when selecting a carrier’s predefined package type. Requirescarrier_package_code
and weight fields only; dimension fields are ignored.
carrier package code
- Sandbox server
https://x-api.shipsaving.us/api/shipment/get_rates
- Production server
https://x-api.shipsaving.com/api/shipment/get_rates
- curl
- JavaScript
- Node.js
- Python
- Java
- C#
- PHP
- Go
- Ruby
- R
- Payload
curl -i -X POST \
https://x-api.shipsaving.us/api/shipment/get_rates \
-H 'Authorization: Bearer <YOUR_JWT_HERE>' \
-H 'Content-Type: application/json' \
-d '{
"from_address_data": {
"phone": "1234567890",
"email": "support@shipsaving.com",
"street": "xxxx Castleton Street",
"street2": "STE XXX",
"city": "Los Angeles",
"state": "CA",
"country": "US",
"company_name": "company name",
"first_name": "Alice",
"last_name": "Green",
"zip_code": "917XX",
"address_type": "residential"
},
"shipment_rate_carrier_data": [
{
"provider_id": "USPS_B",
"service_levels": [
"USPS_GROUND_ADVANTAGE"
]
}
],
"to_address_data": {
"phone": "1234567890",
"email": "support@shipsaving.com",
"street": "xxxx Castleton Street",
"street2": "STE XXX",
"city": "Los Angeles",
"state": "CA",
"country": "US",
"company_name": "company name",
"first_name": "Alice",
"last_name": "Green",
"zip_code": "917XX",
"address_type": "residential"
},
"package_data": {
"type": "my_package",
"length": 10,
"width": 10,
"height": 10,
"weight": 10,
"carrier_package_code": "USPS_LETTER",
"dimension_unit": "in",
"weight_unit": "lb"
},
"custom_data": {
"signing_person": "Ray",
"content_type": "merchandise",
"tax_ids": [
{
"tax_id_type": "TIN",
"tax_id_number": "tin2888",
"country_code": "US"
}
],
"eel_pfc_type": "EXEMPTION_CODE",
"eel_pfc_code": "X20250719123456",
"undeliverable_option": "return_to_sender",
"item_data_list": [
{
"description": "cloth",
"quantity": 10,
"origin": "US",
"weight": 10,
"unit_cost": 19.99,
"weight_unit": "lb",
"hs_tariff_number": "xx"
}
]
},
"option_data": {
"signature": "signature",
"custom_text_on_label_1": "text1",
"custom_text_on_label_2": "text2",
"hazardous_materials": true,
"additional_handing": false
},
"ship_date": "2025-07-31T00:00:00+08:00"
}'
Request
Creates and pays for a shipment label using the rate_id
obtained from a prior get_rates
call. This endpoint also allows purchasing shipment insurance in the same request (insurance cannot be purchased separately).
To prevent duplicate purchases caused by network fluctuations or retries, the API checks ether a shipment already exists under the specified platform_uk_id
.
- If a related shipment is found, the existing shipment information will be returned, and the
duplicate_label
field in the response will be set totrue
. - If no shipment exists, a new shipment will be created as normal, and the
duplicate_label
field will befalse
.
The unique identifier of a shipping rate returned by the get_rates
endpoint. Use this value to reference a specific rate when purchasing a label.
A unique identifier provided by the calling party (e.g., the caller’s order number). Each platform_uk_id
must correspond to exactly one shipment and cannot be reused across multiple shipments.
- Sandbox server
https://x-api.shipsaving.us/api/shipment/create_and_pay
- Production server
https://x-api.shipsaving.com/api/shipment/create_and_pay
- curl
- JavaScript
- Node.js
- Python
- Java
- C#
- PHP
- Go
- Ruby
- R
- Payload
curl -i -X POST \
https://x-api.shipsaving.us/api/shipment/create_and_pay \
-H 'Authorization: Bearer <YOUR_JWT_HERE>' \
-H 'Content-Type: application/json' \
-d '{
"rate_id": "dc288147-f7dd-494d-9353-5ce00020c7aa",
"platform_uk_id": "platformUkId175377917713",
"insurance_data": {
"rate_id": "dc288147-f7dd-494d-9353-5ce00020c7aa"
},
"label_print_type": "common"
}'
Request
Creates and purchases a shipment label in a single step without calling get_rates
separately.
To prevent duplicate purchases caused by network fluctuations or retries, the API checks ether a shipment already exists under the specified platform_uk_id
.
- If a related shipment is found, the existing shipment information will be returned, and the
duplicate_label
field in the response will be set totrue
. - If no shipment exists, a new shipment will be created as normal, and the
duplicate_label
field will befalse
.
Address object of the sender/recipient.
Phone number of the sender/recipient. Required for international shipments. Providing a phone number is highly recommended for all shipments to ensure accurate delivery and facilitate carrier contact if needed. For the Batch Quick Rate API, this parameter is optional.
Email address of the sender/recipient. May be used by the carrier for delivery notifications or issue resolution. For the Batch Quick Rate API, this parameter is optional.
Optional secondary address line (e.g., Apt, Suite, Unit, Floor).
- For U.S. addresses, this field must be a valid two-letter state code as defined by ISO 3166-2:US (e.g., "CA" for California, "NY" for New York).
- For non-U.S. addresses, there is no restriction on the value.
2-letter code for country. This field’s value will be an ISO 3166-1 two-digit code.
For the Batch Quick Rate API, this parameter is optional.
For the Batch Quick Rate API, this parameter is optional.
Address object of the sender/recipient.
Phone number of the sender/recipient. Required for international shipments. Providing a phone number is highly recommended for all shipments to ensure accurate delivery and facilitate carrier contact if needed. For the Batch Quick Rate API, this parameter is optional.
Email address of the sender/recipient. May be used by the carrier for delivery notifications or issue resolution. For the Batch Quick Rate API, this parameter is optional.
Optional secondary address line (e.g., Apt, Suite, Unit, Floor).
- For U.S. addresses, this field must be a valid two-letter state code as defined by ISO 3166-2:US (e.g., "CA" for California, "NY" for New York).
- For non-U.S. addresses, there is no restriction on the value.
2-letter code for country. This field’s value will be an ISO 3166-1 two-digit code.
For the Batch Quick Rate API, this parameter is optional.
For the Batch Quick Rate API, this parameter is optional.
Defines the type of package being shipped.
my_package
: Use when specifying custom package dimensions. Requireswidth
,length
,height
,dimension_unit
,weight
, andweight_unit
.predefined
: Use when selecting a carrier’s predefined package type. Requirescarrier_package_code
and weight fields only; dimension fields are ignored.
carrier package code
Additional shipping options
Request standard or adult signature confirmation.
Customized print on label.If the label itself supports custom printing content, this field will be printed onto the label.
Customized print on label.If the label itself supports custom printing content, this field will be printed onto the label.
Whether this shipment contains dangerous goods or hazardous materials (USPS Ground Advantage service only). View tutorial about how to package, label and ship HAZMAT for domestic shipments.
Timestamp in ISO 8601 format, including local time and time zone offset.
A unique identifier provided by the calling party (e.g., the caller’s order number). Each platform_uk_id
must correspond to exactly one shipment and cannot be reused across multiple shipments.
- Sandbox server
https://x-api.shipsaving.us/api/shipment/direct_buy
- Production server
https://x-api.shipsaving.com/api/shipment/direct_buy
- curl
- JavaScript
- Node.js
- Python
- Java
- C#
- PHP
- Go
- Ruby
- R
- Payload
curl -i -X POST \
https://x-api.shipsaving.us/api/shipment/direct_buy \
-H 'Authorization: Bearer <YOUR_JWT_HERE>' \
-H 'Content-Type: application/json' \
-d '{
"service_level": "string",
"from_address_data": {
"phone": "1234567890",
"email": "support@shipsaving.com",
"street": "xxxx Castleton Street",
"street2": "STE XXX",
"city": "Los Angeles",
"state": "CA",
"country": "US",
"company_name": "company name",
"first_name": "Alice",
"last_name": "Green",
"zip_code": "917XX",
"address_type": "residential"
},
"to_address_data": {
"phone": "1234567890",
"email": "support@shipsaving.com",
"street": "xxxx Castleton Street",
"street2": "STE XXX",
"city": "Los Angeles",
"state": "CA",
"country": "US",
"company_name": "company name",
"first_name": "Alice",
"last_name": "Green",
"zip_code": "917XX",
"address_type": "residential"
},
"package_data": {
"type": "my_package",
"length": 10,
"width": 10,
"height": 10,
"weight": 10,
"carrier_package_code": "USPS_LETTER",
"dimension_unit": "in",
"weight_unit": "lb"
},
"custom_data": {
"signing_person": "Ray",
"content_type": "merchandise",
"tax_ids": [
{
"tax_id_type": "TIN",
"tax_id_number": "tin2888",
"country_code": "US"
}
],
"eel_pfc_type": "EXEMPTION_CODE",
"eel_pfc_code": "X20250719123456",
"undeliverable_option": "return_to_sender",
"item_data_list": [
{
"description": "cloth",
"quantity": 10,
"origin": "US",
"weight": 10,
"unit_cost": 19.99,
"weight_unit": "lb",
"hs_tariff_number": "xx"
}
]
},
"option_data": {
"signature": "signature",
"custom_text_on_label_1": "text1",
"custom_text_on_label_2": "text2",
"hazardous_materials": true,
"additional_handing": false
},
"ship_date": "2025-07-31T00:00:00+08:00",
"platform_uk_id": "platformUkId175377917713",
"insurance_data": {
"rate_id": "dc288147-f7dd-494d-9353-5ce00020c7aa"
},
"label_print_type": "common"
}'
Unique shipment number returned by the create_and_pay
endpoint.
- Sandbox server
https://x-api.shipsaving.us/api/shipment/void_label
- Production server
https://x-api.shipsaving.com/api/shipment/void_label
- curl
- JavaScript
- Node.js
- Python
- Java
- C#
- PHP
- Go
- Ruby
- R
- Payload
curl -i -X POST \
https://x-api.shipsaving.us/api/shipment/void_label \
-H 'Authorization: Bearer <YOUR_JWT_HERE>' \
-H 'Content-Type: application/json' \
-d '{
"shipment_no": "1222241586",
"platform_uk_id": "platformUkId175377917713"
}'
- Sandbox server
https://x-api.shipsaving.us/api/shipment/insurance/rate
- Production server
https://x-api.shipsaving.com/api/shipment/insurance/rate
- curl
- JavaScript
- Node.js
- Python
- Java
- C#
- PHP
- Go
- Ruby
- R
- Payload
curl -i -X GET \
'https://x-api.shipsaving.us/api/shipment/insurance/rate?declared_value=200&service_level=USPS_GROUND_ADVANTAGE' \
-H 'Authorization: Bearer <YOUR_JWT_HERE>'
Request
Indicates the current location or state of a package within the supply chain (e.g., in_transit, out for delivery). Use the tracking status object to monitor shipment progress. In test mode, this API will return fixed mock data to facilitate testing and integration validation.
- Sandbox server
https://x-api.shipsaving.us/api/shipment/tracking
- Production server
https://x-api.shipsaving.com/api/shipment/tracking
- curl
- JavaScript
- Node.js
- Python
- Java
- C#
- PHP
- Go
- Ruby
- R
- Payload
curl -i -X GET \
'https://x-api.shipsaving.us/api/shipment/tracking?shipment_no=1222241586' \
-H 'Authorization: Bearer <YOUR_JWT_HERE>'
OK
This is the latest tracking record.
The UTC timestamp when the package was scanned, in ISO 8601 format.
Current shipment status. Possible values include:
created: The shipment label has been generated but not yet scanned by the carrier.
Indicates the shipping process has not started.available_for_pickup: The package has arrived at a designated location and is waiting for the recipient to collect it.
Indicates customer action is required to retrieve the shipment.in_transit: The package is in transit, moving through different facilities or checkpoints.
Indicates the shipment is on its way but has not yet reached the destination.out_for_delivery: The package has been handed over to the courier and is on its final delivery route.
Indicates the shipment is in the last-mile delivery stage.delivered: The package has been successfully delivered and signed for by the recipient.
Indicates the shipping process is complete.return_to_sender: The package is being returned to the sender due to failed delivery or other issues.
Indicates a reverse logistics process.voided: The shipping label has been voided and the package will not be processed.
Indicates the shipment has been canceled or invalidated.error: An error occurred during shipment handling.
Indicates carrier-side issues that may require manual intervention.seized_by_law_enforcement: The package was seized by law enforcement authorities.
Indicates compliance or legal issues affecting the shipment.unknown: The shipment status is unknown or no valid update is available from the carrier.
Indicates no current tracking information.
Request
Indicates the current location or state of a package within the supply chain (e.g., in_transit, out for delivery). Use the tracking status object to monitor shipment progress. In test mode, this API will return fixed mock data to facilitate testing and integration validation.
- Sandbox server
https://x-api.shipsaving.us/api/shipment/tracking_by_platform_uk_id
- Production server
https://x-api.shipsaving.com/api/shipment/tracking_by_platform_uk_id
- curl
- JavaScript
- Node.js
- Python
- Java
- C#
- PHP
- Go
- Ruby
- R
- Payload
curl -i -X GET \
'https://x-api.shipsaving.us/api/shipment/tracking_by_platform_uk_id?platform_uk_id=platformUkId175377917713' \
-H 'Authorization: Bearer <YOUR_JWT_HERE>'
OK
This is the latest tracking record.
The UTC timestamp when the package was scanned, in ISO 8601 format.
Current shipment status. Possible values include:
created: The shipment label has been generated but not yet scanned by the carrier.
Indicates the shipping process has not started.available_for_pickup: The package has arrived at a designated location and is waiting for the recipient to collect it.
Indicates customer action is required to retrieve the shipment.in_transit: The package is in transit, moving through different facilities or checkpoints.
Indicates the shipment is on its way but has not yet reached the destination.out_for_delivery: The package has been handed over to the courier and is on its final delivery route.
Indicates the shipment is in the last-mile delivery stage.delivered: The package has been successfully delivered and signed for by the recipient.
Indicates the shipping process is complete.return_to_sender: The package is being returned to the sender due to failed delivery or other issues.
Indicates a reverse logistics process.voided: The shipping label has been voided and the package will not be processed.
Indicates the shipment has been canceled or invalidated.error: An error occurred during shipment handling.
Indicates carrier-side issues that may require manual intervention.seized_by_law_enforcement: The package was seized by law enforcement authorities.
Indicates compliance or legal issues affecting the shipment.unknown: The shipment status is unknown or no valid update is available from the carrier.
Indicates no current tracking information.
Request
The Address Validation API checks the validity of U.S. domestic addresses and returns standardized address components in accordance with USPS® addressing standards. This helps improve delivery accuracy, reduce undeliverable mail, and support consistent pricing for shipping and logistics.
Non-U.S. addresses
Ifcountry != "US"
, the validation process is skipped (the API is designed for U.S. domestic addresses only).Errored results
Iferrored = true
, theerrors
array is returned and should be used directly as the error message(s).Corrected without errors
Iferrored = false && corrected = true
, use the returned address fields (street
,street2
,city
,state
,zip
,country
,residential
) as the standardized address.- The
corrections
array provides machine-readable codes that indicate how to improve the original input for a better match.
- The
Standardized flag
The fieldstandardized
indicates whether the returned address differs from the original input:- If identical,
standardized = false
. - If different (e.g., casing, ZIP+4 adjustments, or street corrections), then
standardized = true
.
- If identical,
Primary street line (house number + street name).
ZIP or ZIP+4 (US). Accepts 5 or 9 digits, with optional dash.
- Sandbox server
https://x-api.shipsaving.us/api/address/validate
- Production server
https://x-api.shipsaving.com/api/address/validate
- curl
- JavaScript
- Node.js
- Python
- Java
- C#
- PHP
- Go
- Ruby
- R
- Payload
curl -i -X POST \
https://x-api.shipsaving.us/api/address/validate \
-H 'Authorization: Bearer <YOUR_JWT_HERE>' \
-H 'Content-Type: application/json' \
-d '{
"street": "17XXX Castleton Street",
"street2": "STE XXX",
"city": "City Of XXXX",
"state": "CA",
"zip": "91748-5761",
"country": "US"
}'
OK
Validation errors discovered during processing.
Applied corrections or suggestions.
{ "code": "ok", "msg": "ok", "data": { "street": "17800 CASTLETON ST", "street2": null, "city": "CITY OF INDUSTRY", "state": "CA", "zip": "91748-1749", "country": "US", "residential": true, "errored": true, "corrected": true, "standardized": false, "errors": [ … ], "corrections": [ … ] } }