canonical: https://jentic.com/apis/easyship.com/easyship

# Easyship API

Easyship is a global shipping platform that aggregates rates and label generation across hundreds of couriers for direct-to-consumer brands and marketplaces. The API exposes endpoints for managing shipments end to end, calculating rates, registering and configuring couriers, validating addresses, generating shipping documents, and tracking parcels through the courier network. It is used by Shopify, BigCommerce, and custom storefronts that need multi-courier shipping without integrating each carrier individually.

## For AI agents

Create and manage shipments, calculate multi-courier rates, validate addresses, generate shipping labels, and track parcels through the Easyship logistics platform.

## Scope

Does not handle order capture, payment processing, or warehouse management - use for Easyship rate calculation, shipment creation, label generation, and parcel tracking only.

## Capabilities

- Compare shipping rates across registered couriers for a given parcel and destination
- Create, update, or cancel a shipment record with sender, recipient, and parcel dimensions
- Generate and download shipping documents including labels and customs paperwork
- Validate a postal address against courier-specific format requirements
- Insure a shipment in line with the declared parcel value
- Track a parcel through every leg of the courier network
- Manage saved sender and recipient addresses for repeat shipments

## Use cases

### Multi-courier rate shopping at checkout

E-commerce checkouts surface the cheapest or fastest shipping option to the buyer in real time. An agent calls POST /rates with the cart's parcel and destination details, then displays the ranked courier options. Easyship returns rates from every courier connected on the merchant's account in a single call, removing the need to integrate each one.

Example prompt: Call POST /rates with origin postcode SW1A1AA, destination postcode 10001, and a 1kg parcel, then return the three cheapest courier options with their service names.

### End-to-end shipment fulfilment

Once a buyer pays, the merchant creates the shipment, generates a label, and hands the parcel to the chosen courier. POST /shipments creates the record, GET /shipments/{id}/documents returns the label PDF, and GET /shipments/{id}/trackings exposes the courier events back to the buyer. The full flow is three endpoints rather than per-courier integrations.

Example prompt: Create a shipment for order ORD-789 with the supplied sender, recipient, and parcel details, then download the shipping label as a PDF.

### Address validation at the moment of capture

Failed deliveries from typo'd addresses are expensive. POST /addresses/validate scrubs each customer-supplied address against courier-specific rules at the moment of entry, surfacing corrections to the buyer before the order is placed and saving redelivery fees downstream.

Example prompt: Validate the supplied recipient address and return either 'valid' or the suggested correction returned by Easyship.

### Customer-facing parcel tracking

Brands embed live tracking inside their order status page rather than redirecting buyers to courier websites. GET /shipments/{id}/trackings returns every event captured by the courier so the merchant's UI can render a unified timeline regardless of which courier carries the parcel.

Example prompt: Fetch tracking for shipment SHP-12345 and return the most recent event with its timestamp and courier description.

### Agent-driven shipping operations

Through Jentic, an operations agent translates natural-language requests like 'ship this order with the cheapest courier' or 'cancel and re-rate shipment 12345' into the right combination of /rates, /shipments, and /shipments/{id} calls. The agent does not need to know the 51-endpoint surface - Jentic resolves the right operation by intent.

Example prompt: Given an order ID and the cheapest courier from a prior /rates call, create the matching shipment and generate a label.

## Key endpoints

| Method | Path | Description |
| --- | --- | --- |
| POST | /rates | Calculate multi-courier shipping rates |
| POST | /shipments | Create a new shipment |
| GET | /shipments/{id} | Retrieve shipment details |
| DELETE | /shipments/{id} | Cancel a shipment |
| GET | /shipments/{id}/documents | Retrieve shipping label and documents |
| GET | /shipments/{id}/trackings | Get courier tracking events |
| POST | /addresses/validate | Validate a postal address |
| POST | /shipments/{id}/insure | Insure a shipment |

## Key resources

- **Shipments** — Create, retrieve, update, cancel, and insure shipments
- **Rates** — Calculate multi-courier shipping rates
- **Couriers** — Register and configure couriers connected to the account
- **Addresses** — Manage saved addresses and validate customer-supplied ones
- **Tracking** — Read courier-level events for a shipment
- **Documents** — Generate shipping labels and customs paperwork
- **Batches** — Manage batched shipping operations

## Why Jentic

- **Setup:** Wiring Easyship by hand means setting up its bearer auth and coding the rate, shipment, label, and tracking calls across a large surface yourself. Through Jentic you install once, import Easyship from the API Directory, store the token once, and your agent calls it.
- **Permission scoping:** Easyship puts the shipment id in the URL path (/shipments/{id}, /shipments/{id}/trackings), so a rule can pin your agent to one shipment: it can read documents and trackings for that shipment and nothing else. You choose the operations it may call, so destructive ones like deleting a shipment are not included unless you add them.
- **Credential handling:** Your Easyship bearer token is stored once, encrypted, by your own Jentic One instance and injected at execution time. It never enters the agent's prompt, logs, or context.
- **Discovery method:** Agents search Jentic by intent such as 'compare shipping rates' or 'create a shipping label', and Jentic returns the matching Easyship operation with its input schema so the agent calls the right endpoint without browsing the reference docs.

## Related APIs

- **ShipStation API** — US-focused multi-courier shipping platform with deep marketplace integrations
- **Shopify Admin API** — Order source that feeds shipments into Easyship
- **Stripe API** — Payment processing for the order before shipment is generated

## FAQ

### What authentication does the Easyship API use?

Easyship uses HTTP bearer authentication. The token is passed in the Authorization header on every request. Through Jentic, the bearer token is stored encrypted in your Jentic One instance and injected at execution time, so it never enters the agent's context or logs.

### Can I generate shipping labels with the Easyship API?

Yes. After creating a shipment with POST /shipments, call GET /shipments/{id}/documents to retrieve the courier-issued shipping label and any required customs paperwork as a downloadable PDF.

### What are the rate limits for the Easyship API?

The OpenAPI spec does not publish numeric rate limits. Easyship applies per-account quotas tied to plan tier and traffic profile - monitor 429 responses, back off on burst, and contact Easyship support for the limit applied to your subscription.

### How do I rate-shop and create a shipment through Jentic?

Search Jentic for 'compare shipping rates', load the schema for POST /rates, execute, then chain into POST /shipments using the chosen courier. The flow is: pip install jentic, then await client.search, await client.load, await client.execute, repeated for each step.

### Does the Easyship API support insurance and customs documents?

Yes. POST /shipments/{id}/insure attaches insurance up to the declared parcel value, and the customs paperwork required for cross-border shipments is included in the response from GET /shipments/{id}/documents alongside the label.

### Can I cancel a shipment after it has been created?

Yes. DELETE /shipments/{id} cancels a shipment that has not yet been collected by the courier. Once collection has occurred, cancellation must be handled directly with the courier.

### Can I limit what my agent is allowed to do with the Easyship API?

Yes. Because you run Jentic One yourself, your own rules decide which Easyship operations and credentials the agent may use. Easyship puts the shipment id in the URL path, so you can pin the agent to a single shipment and let it read only that shipment's documents and tracking through GET /shipments/{id}/documents and GET /shipments/{id}/trackings. You choose the operations it may call, so destructive ones like DELETE /shipments/{id} are excluded unless you add them, and the bearer token stays with your instance and is injected only at execution time.
