ShipEngine API
ShipEngine's easy-to-use REST API lets you manage all of your shipping needs without worrying about the complexities of different carrier APIs and protocols. We handle all the heavy lifting so you can focus on providing a first-class shipping experience for your customers at the best possible prices.
Each of ShipEngine's features can be used by itself or in conjunction with each other to build powerful shipping functionality into your application or service.
Getting Started
If you're new to REST APIs then be sure to read our to understand the basics. Learn how to , and then use our to kick the tires and get familiar with our API. If you run into any problems, then be sure to check the for tips.
Here are some step-by-step tutorials to get you started:
Shipping Labels for Every Major Carrier
ShipEngine makes it easy to and in a . You can even customize labels with your own and .
Real-Time Package Tracking
With ShipEngine you can or via webhooks. You can also create with your own branding so your customers will always know where their package is.
Compare Shipping Costs Across Carriers
Make sure you ship as cost-effectively as possible by using the ShipEngine Rates API. Or if you don't know the full shipment details yet, then you can with limited address info.
Worldwide Address Validation
ShipEngine supports for virtually , including the United States, Canada, Great Britain, Australia, Germany, France, Norway, Spain, Sweden, Israel, Italy, and over 160 others.
- Homepage
- https://api.apis.guru/v2/specs/shipengine.com/1.1.202303022103.json
- Provider
- shipengine.com
- OpenAPI version
- 3.0.0
- Spec (JSON)
- https://api.apis.guru/v2/specs/shipengine.com/1.1.202303022103/openapi.json
- Spec (YAML)
- https://api.apis.guru/v2/specs/shipengine.com/1.1.202303022103/openapi.yaml
Tools (86)
Extracted live via the executor SDK.
-
addresses.parseAddressThe address-recognition API makes it easy for you to extract address data from unstructured text, including the recipient name, line 1, line 2, city, postal code, and more.
Data often enters your system as unstructured text (for example: emails, SMS messages, support tickets, or other documents). ShipEngine's address-recognition API helps you extract meaningful, structured data from this unstructured text. The parsed address data is returned in the same structure that's used for other ShipEngine APIs, such as address validation, rate quotes, and shipping labels.
Note: Address recognition is currently supported for the United States, Canada, Australia, New Zealand, the United Kingdom, and Ireland.
-
addresses.validateAddressAddress validation ensures accurate addresses and can lead to reduced shipping costs by preventing address correction surcharges. ShipEngine cross references multiple databases to validate addresses and identify potential deliverability issues.
-
batches.addToBatchAdd a Shipment or Rate to a Batch
-
batches.createBatchCreate a Batch
-
batches.deleteBatchDelete Batch By Id
-
batches.getBatchByExternalIdGet Batch By External ID
-
batches.getBatchByIdGet Batch By ID
-
batches.listBatchErrorsError handling in batches are handled differently than in a single synchronous request. You must retrieve the status of your batch by and getting an overview of the statuses or you can list errors directly here below to get detailed information about the errors.
-
batches.listBatchesList Batches associated with your Shipengine account
-
batches.processBatchProcess Batch ID Labels
-
batches.removeFromBatchRemove a shipment or rate from a batch
-
batches.updateBatchUpdate Batch By Id
-
carrierAccounts.connectCarrierConnect a carrier account
-
carrierAccounts.disconnectCarrierDisconnect a carrier
-
carrierAccounts.getCarrierSettingsGet carrier settings
-
carrierAccounts.updateCarrierSettingsUpdate carrier settings
-
carriers.addFundsToCarrierAdd Funds To A Carrier
-
carriers.getCarrierByIdRetrive carrier info by ID
-
carriers.getCarrierOptionsGet a list of the options available for the carrier
-
carriers.listCarrierPackageTypesList the package types associated with the carrier
-
carriers.listCarriersList all carriers that have been added to this account
-
carriers.listCarrierServicesList the services associated with the carrier ID
-
downloads.downloadFileGet File
-
insurance.addFundsToInsuranceYou may need to auto fund your account from time to time. For example, if you don't normally ship items over $100, and may want to add funds to insurance rather than keeping the account funded.
-
insurance.connectInsurerConnect a Shipsurance Account
-
insurance.disconnectInsurerDisconnect a Shipsurance Account
-
insurance.getInsuranceBalanceRetrieve the balance of your Shipsurance account.
-
labels.createLabelPurchase and print a label for shipment
-
labels.createLabelFromRateWhen retrieving rates for shipments using the
/ratesendpoint, the returned information contains arate_idproperty that can be used to generate a label without having to refill in the shipment information repeatedly. -
labels.createLabelFromShipmentPurchase a label using a shipment ID that has already been created with the desired address and package info.
-
labels.createReturnLabelCreate a return label
-
labels.getLabelByExternalShipmentIdFind a label by using the external shipment id that was used during label creation
-
labels.getLabelByIdRetrieve information for individual labels.
-
labels.getTrackingLogFromLabelRetrieve the label's tracking information
-
labels.listLabelsThis endpoint returns a list of labels that you've . You can optionally filter the results as well as control their sort order and the number of results returned at a time.
By default, all labels are returned, 25 at a time, starting with the most recently created ones. You can combine multiple filter options to narrow-down the results. For example, if you only want to get your UPS labels for your east coast warehouse you could query by both
warehouse_idandcarrier_id -
labels.voidLabelVoid a label by ID to get a refund.
-
manifests.createManifestEach ShipEngine manifest is created for a specific warehouse, so you'll need to provide the warehouse_id rather than the ship_from address. You can create a warehouse for each location that you want to create manifests for.
-
manifests.getManifestByIdGet Manifest By Id
-
manifests.getManifestRequestByIdGet Manifest Request By Id
-
manifests.listManifestsSimilar to querying shipments, we allow you to query manifests since there will likely be a large number over a long period of time.
-
packagePickups.deleteScheduledPickupDelete a previously-scheduled pickup by ID
-
packagePickups.getPickupByIdGet Pickup By ID
-
packagePickups.listScheduledPickupsList all pickups that have been scheduled for this carrier
-
packagePickups.schedulePickupSchedule a package pickup with a carrier
-
packageTypes.createPackageTypeCreate a custom package type to better assist in getting accurate rate estimates
-
packageTypes.deletePackageTypeDelete a custom package using the ID
-
packageTypes.getPackageTypeByIdGet Custom Package Type by ID
-
packageTypes.listPackageTypesList the custom package types associated with the account
-
packageTypes.updatePackageTypeUpdate the custom package type object by ID
-
rates.calculateRatesIt's not uncommon that you want to give your customer the choice between whether they want to ship the fastest, cheapest, or the most trusted route. Most companies don't solely ship things using a single shipping option; so we provide functionality to show you all your options!
-
rates.compareBulkRatesGet Bulk Shipment Rates
-
rates.estimateRatesGet Rate Estimates
-
rates.getRateByIdRetrieve a previously queried rate by its ID
-
servicePoints.servicePointsGetByIdReturns a carrier service point by using the service_point_id
-
servicePoints.servicePointsListList carrier service points by location
-
shipments.cancelShipmentsMark a shipment cancelled, if it is no longer needed or being used by your organized. Any label associated with the shipment needs to be voided first An example use case would be if a batch label creation job is going to run at a set time and only queries
pendingshipments. Marking a shipment as cancelled would remove it from this process -
shipments.createShipmentsCreate one or multiple shipments.
-
shipments.getShipmentByExternalIdQuery Shipments created using your own custom ID convention using this endpint
-
shipments.getShipmentByIdGet an individual shipment based on its ID
-
shipments.listShipmentRatesGet Rates for the shipment information associated with the shipment ID
-
shipments.listShipmentsGet list of Shipments
-
shipments.parseShipmentThe shipment-recognition API makes it easy for you to extract shipping data from unstructured text, including people's names, addresses, package weights and dimensions, insurance and delivery requirements, and more.
Data often enters your system as unstructured text (for example: emails, SMS messages, support tickets, or other documents). ShipEngine's shipment-recognition API helps you extract meaningful, structured data from this unstructured text. The parsed shipment data is returned in the same structure that's used for other ShipEngine APIs, so you can easily use the parsed data to create a shipping label.
Note: Shipment recognition is currently supported for the United States, Canada, Australia, New Zealand, the United Kingdom, and Ireland.
-
shipments.tagShipmentAdd a tag to the shipment object
-
shipments.untagShipmentRemove an existing tag from the Shipment object
-
shipments.updateShipmentUpdate a shipment object based on its ID
-
tags.createTagCreate a new Tag for customizing how you track your shipments
-
tags.deleteTagDelete a tag that is no longer needed
-
tags.listTagsGet a list of all tags associated with an account.
-
tags.renameTagChange a tag name while still keeping the relevant shipments attached to it
-
tokens.tokensGetEphemeralTokenThis endpoint returns a token that can be passed to an application for authorized access. The lifetime of this token is 10 seconds.
-
tracking.getTrackingLogRetrieve package tracking information
-
tracking.startTrackingAllows you to subscribe to tracking updates for a package. You specify the carrier_code and tracking_number of the package, and receive notifications via webhooks whenever the shipping status changes.
-
tracking.stopTrackingUnsubscribe from tracking updates for a package.
-
warehouses.createWarehouseCreate a warehouse location that you can use to create shipping items by simply passing in the generated warehouse id. If the return address is not supplied in the request body then it is assumed that the origin address is the return address as well
-
warehouses.deleteWarehouseDelete a warehouse by ID
-
warehouses.getWarehouseByIdRetrieve warehouse data based on the warehouse ID
-
warehouses.listWarehousesRetrieve a list of warehouses associated with this account.
-
warehouses.updateWarehouseUpdate Warehouse object information
-
warehouses.updateWarehouseSettingsUpdate Warehouse settings object information
-
webhooks.createWebhookCreate a webook for specific events in the environment.
-
webhooks.deleteWebhookDelete a webhook
-
webhooks.getWebhookByIdRetrieve individual webhook by an ID
-
webhooks.listWebhooksList all webhooks currently enabled for the account.
-
webhooks.updateWebhookUpdate the webhook url property
-
openapi.previewSpecPreview an OpenAPI document before adding it as a source
-
openapi.addSourceAdd an OpenAPI source and register its operations as tools