How to Insure a Shipment
Protect parcels against loss and damage in transit. Insure shipments you create with Easyship, or insure parcels you ship with labels from other providers.
Choose your flow
Start with one question: is the label for this shipment from Easyship or another provider?
Turn on insurance when you create the shipment, or add it within 24 hours of the label being generated.
Get a price now (valid for 48 hours). Convert it to a policy once you have the tracking number.
Before you start
| Item | Value |
|---|---|
| Base URL | https://public-api.easyship.com/2024-09Sandbox: https://public-api-sandbox.easyship.com/2024-09 |
| Flow A scope | public.insurance_policy:write |
| Flow B scopes | public.insurance_quote:write, public.insurance_policy_from_quote:write |
| List / cancel scopes | public.insurance_policy:read / public.insurance_policy_from_quote:write |
| Payment | Fees are charged to your Easyship balance. Easyship labels are charged when the label is bought; labels from other providers are charged once cover is confirmed |
/insure) is available on request, and Flow B requires an updated contract. Contact your account manager or Easyship Support before you start building.Flow A: Shipment with an Easyship label
- Option 1: Turn on insurance when you create the shipment (recommended)
Add an
insuranceobject to Create a Shipment (or Update a Shipment before the label is bought). The policy is created automatically when the label is bought, and the fee charged is theinsurance_feeshown on the rate. If you leave outinsured_amount, Easyship uses the total customs value of the items.Request body"insurance": { "is_insured": true, "insured_amount": 250, "insured_currency": "USD" } - Option 2: Add insurance after the label is bought
Call this endpoint within 24 hours of label generation. The label must already be generated, and the shipment must not be cancelled or already insured. The request has no body.
cURLcurl -X POST https://public-api-sandbox.easyship.com/2024-09/shipments/ESUS100000001/insure \ -H "Authorization: Bearer $EASYSHIP_TOKEN"Response{ "success": { "message": "Insurance successfully purchased" } }
Flow B: Shipment with a label from another provider
- Create a quote
No tracking number is needed. Easyship checks the route and each product's category, then returns the fee.
cURLcurl -X POST https://public-api-sandbox.easyship.com/2024-09/insurances/quotes \ -H "Authorization: Bearer $EASYSHIP_TOKEN" \ -H "Content-Type: application/json" \ -d '{ "quote": { "insured_value": 200, "currency": "USD", "origin_country": "US", "destination_country": "GB", "products": [ { "category": "Fashion", "price": 100, "quantity": 2, "description": "T-shirt" } ] } }'Response{ "insurance_quote": { "quote_id": "af8f1016-6910-4f1b-b909-49a8fc48919c", "total_insurance_fee": 3.0, "insurance_fee_currency": "USD", "valid_until": "2026-10-17T12:21:00Z", "products": [{ "insured_eligibility": true, "insured_fee": 3.0 }] } }Field Rule insured_valueTotal amount to insure. Must be greater than 0, no more than the sum of price×quantity, and no more than USD 10,000 (or equivalent)currencyRequired. ISO 4217 code, for example USD. Must be a currency Easyship supports — if it isn't, the quote fails withCurrency not supported. Contact your account manager if you need a currency addedorigin_country/destination_countryISO 3166-1 alpha-2 codes. Insurance must be available for both countries products[].categoryRequired. Use a name from List all Item Categories products[].priceRequired. Unit price products[].quantityOptional, defaults to 1 products[].platform_product_idOptional. If it matches a product saved in Easyship, its saved category is used Show
total_insurance_feeto the buyer. Products in categories that can't be insured are returned withinsured_eligibility: falseandinsured_fee: 0, and their value is left out of the cover. - Convert the quote into a policy
Do this once you have a tracking number and before
valid_until. A quote can be used only once.When you're charged. Creating the policy doesn't charge you straight away. Easyship first checks that your balance covers the fee, then creates the policy as pending (awaiting) and begins tracking the parcel. Once the first tracking update arrives — usually within a few hours — Easyship confirms whether the parcel is eligible for cover:- Eligible — the policy becomes
activeand the fee is deducted from your balance. - Not eligible — the policy is
canceled, the quote is voided, and you are not charged. - Balance no longer sufficient — the policy stays
awaitingand nothing is deducted. Top up your balance and the policy can still activate on a later tracking update.
Use a tracking number the courier already recognises. If Easyship can't start tracking the parcel, both the policy and the quote are voided. Because a quote can only be used once, thatquote_idcan't be retried — you'll need to create a new quote and convert that one instead.cURLcurl -X POST https://public-api-sandbox.easyship.com/2024-09/insurances/policies-from-quote \ -H "Authorization: Bearer $EASYSHIP_TOKEN" \ -H "Content-Type: application/json" \ -d '{ "policy": { "quote_id": "af8f1016-6910-4f1b-b909-49a8fc48919c", "tracking_number": "1Z999AA10123456784", "courier_service_name": "DHL Express Worldwide", "policy_holder_type": "merchant", "email_address": "[email protected]", "first_name": "John", "last_name": "Doe" } }'Response{ "insurance_policy": { "policy_id": "IPUS10000103", "insured_value": 200.0, "insurance_fee": 3.0, "currency": "USD", "tracking_number": "1Z999AA10123456784", "status": "Policy Created Successfully" } }Field Rule quote_id,tracking_number,email_address,first_name,last_nameRequired courier_service_nameRequired. Must be one of the courier names listed in the API reference, for example, DHL Express Worldwidepolicy_holder_typemerchant(default) orbuyerOptional order_number,order_date,ship_date,phone,send_email, shipping and billing address fieldsWhere to find these policies. Quote-based policies don't appear on the Easyship dashboard. Once a policy is active, Easyship emails the policyholder a link to the claims portal, where they can file claims. - Eligible — the policy becomes
List and cancel policies
| Task | Endpoint |
|---|---|
List policies (filter by policy_type, easyship_shipment_id, state, recipient, source) | GET /insurances/policies |
Cancel a policy created from a quote. This works only while the policy is still pending (awaiting) — that is, before cover is confirmed. Policies for Easyship labels can't be cancelled here (the request returns 404) | POST /insurances/policies/{policy_id}/cancel |
FAQ and common errors
/insure works only within 24 hours of label generation. Next time, turn insurance on when you create the shipment.Insured value exceeds the maximum allowed for the specified currency.category you sent. If the route itself isn't covered, the quote fails with Insurance is not available for shipments originating from / destined to the specified country.Your insurance quote has expired, create a new quote to continue.Unable to identify courier service mean?courier_service_name must match one of the names in the API reference exactly.Updated 6 days ago
