Flexport Logistics API provides access to the Flexport logistics network that powers all of our e-commerce operations, such as order fulfillment, order returns, freight, and parcel. With the Logistics API, you can create custom applications and integrations to access your Flexport account, or authorize Flexport-approved partner applications for that purpose.
/logistics/api/2026-02/documentation/raw. Use it to generate clients with openapi-generator, import into Postman, or build custom tooling.
To start using the Logistics API, you must have an active Flexport Portal account. To inbound physical inventory, ship orders, process returns or buy parcel labels, you'll also need to set up a billing account.
The API has two audiences: merchants, who build integrations for their own business or shop, and partners, who build applications that serve Flexport merchants or their own customers.
To use the Logistics API you need a Flexport Portal account. Creating an account is free - you can start calling the API immediately.
The API surfaces available to you depend on your account status:
| API surface | Requires |
|---|---|
| Products, Webhooks, Reports | A Flexport Portal account - available immediately. |
| Parcels, Returns | Account approval. Submit a support ticket to request access. |
| Orders, Inbounds, Freight, and others | A Flexport billing account. |
There are two isolated environments, each with its own Seller Portal account and API token:
| Account type | Purpose |
|---|---|
| Production | Fulfilling real orders against physical inventory. Orders that ship incur charges. |
| Sandbox | Testing your integration without moving physical goods. Inventory is simulated and auto-received; orders are auto-fulfilled. Returns and Parcels are not supported in Sandbox. See Testing in Sandbox. |
Both environments share the same API endpoint (https://logistics-api.flexport.com). Your access token determines which account the request targets.
| Step | What to do |
|---|---|
| 1. Get an access token | Create an API token in Seller Portal or via OAuth as described here. |
| 2. Try the API | Make your first request, e.g., create a product. |
| 3. Test in Sandbox | Request a Sandbox account and run through the end-to-end fulfillment workflow without moving real inventory. |
| 4. Set up Webhooks | Subscribe to events so your system is notified when orders ship, inventory changes, or returns are received. |
To use the API, you will need an access token. Each access token is issued with one or more permission scopes that define which resources and operations it can access. You can issue separate tokens scoped to different resources — for example, one token scoped only to products and another scoped only to orders — to follow the principle of least privilege.
There are two ways to request an access token:
When creating a token, select the permission scopes it should carry — each scope grants access to a specific resource family in either read-only or read-write mode. The required scope for each operation is listed on its reference page under Authorizations.
You must be an Administrator of your organization to manage access tokens.
401 when expired. Partner (3PL) tokens do not expire. Administrators can revoke tokens at any time. Rotate tokens in Settings → API Tokens.
This quickstart walks you through verifying your access token and making your first API request. You'll confirm your token is wired up correctly before moving on to creating products, inbound shipments, and orders.
The Logistics API authenticates requests with a bearer token. In Seller Portal, go to Settings → API Tokens and click Create Token. Copy the token — you'll use it in the next step.
If you don't have a Flexport account yet, follow Account Creation first. For the full token flow, including partner (OAuth) tokens, see Creating Access Tokens.
export FLEXPORT_TOKEN="YOUR_API_TOKEN"
GET /logistics/api/2026-02/warehouses/active
Examples below use API version 2026-02. Substitute the version you target in production — see Versioning.
curl "https://logistics-api.flexport.com/logistics/api/2026-02/warehouses/active" \
-H "Authorization: Bearer $FLEXPORT_TOKEN"
[
"ATL1",
"LAX2",
"RNO1"
]
{
"status": 401,
"type": "https://docs.logistics-api.flexport.com/2026-02/#section/Errors/401-Unauthorized",
"title": "Unauthorized",
"instance": "92e04577-c56b-47b9-b075-62096165a0ce",
"code": 401,
"message": "Unauthorized"
}
{
"status": 403,
"type": "https://docs.logistics-api.flexport.com/2026-02/#section/Errors/403-Forbidden",
"title": "Forbidden",
"instance": "f47ac10b-58cc-4372-a567-0e02b2c3d479",
"code": 403,
"message": "Forbidden"
}
The request invokes GetActiveWarehouses and requires the read_logistics_warehouses scope. It returns the warehouse codes (for example, ATL1) available to your account — the same identifiers that appear on shipment and order responses to indicate the fulfillment facility. You can filter by country using the countryCode query parameter (US, NL).
A 200 OK with this array confirms the token is valid and correctly scoped. A 401 Unauthorized indicates an invalid, malformed, or expired token; a 403 Forbidden indicates the token is valid but missing the read_logistics_warehouses scope. See Errors for resolution.
With the token verified, the typical integration order is:
| Step | API | What it does |
|---|---|---|
| Sync your catalog | Products | Create products and barcodes that identify your SKUs. |
| Send inventory in | Inbounds | Create an inbound shipment that moves units into a warehouse. |
| Fulfill D2C orders | Orders | Submit orders that Flexport will pick, pack, and ship. |
| Buy parcel labels | Parcels | Get rates and purchase labels for parcels you ship yourself. |
| Process returns | Returns | Create return shipments and track returned inventory. |
| Receive event notifications | Webhooks | Get pushed notifications for order, shipment, and inventory events instead of polling. |
Sandbox allows Flexport customers and partners using the Logistics API to test their applications without moving physical goods around.
To request a Sandbox account:
After you have created the Sandbox account using the steps above, you can test your application against it.
Sandbox uses the same API endpoint as production. The API token serves as a pointer that allows the backend system to find the account you are accessing. Use the API token from the Sandbox account to work with Sandbox data. Sandbox and Production accounts are completely isolated from one another, as if they were accounts from separate customers.
As an example, you can use this workflow to go from production creation to inbounding inventory and order placement in Sandbox:
At this time, our sandbox environment only supports the happy-path use cases. We currently cannot test:
Logistics API may be used by Merchants and by Partners. Either a Merchant or a Partner may develop a software application that uses the Logistics API.
Key difference between a Merchant and a Partner is that:
Currently partner registration is manual but may be self-served in the future.
If you wish to develop an application for use by one or more merchants, reach out to us to request a unique application ID and secret. Your software application must include a public API server that receives callbacks with the authorization code whenever a merchant authorizes it using the OAuth authorization_code flow. In response to callback, your application would exchange the one-time OAuth code for an API token.
Provide the following:
You will receive your application ID and secret. You must use the application ID and secret as client credentials when exchanging OAuth authorization code for an API token during OAuth token exchange.
In order for your application to receive Merchant consent and the API token, you would direct the merchant to the OAuth authorization_code flow that has your application ID, as well as the scopes that your application requires. You do not need to include the callback URI, because it is known to us since your application is registered.
For example, if your application requires read access to products and orders and the application ID is 01HKBBNEVYKM0D84E63MMYN022 the URI is: https://logistics-api.flexport.com/logistics/api/2026-02/oauth/authorize?response_type=code&scope=read_logistics_products+read_logistics_orders&client_id=01HKBBNEVYKM0D84E63MMYN022
When Merchant visits this URL they'll be shown a Consent page displaying your application name and required access (scopes). If they click through to agree to use your application, your application server will receive the OAuth code on the callback URI that you registered with your application.
Your application would then exchange the OAuth authorization code for an API token during OAuth token exchange. For client credentials, you would submit your application ID 01HKBBNEVYKM0D84E63MMYN022 and the secret you received. In addition to the API token, the response will include the logisticsAccountId of the merchant.
Your application must treat each API token with utmost care and store in a secure encrypted location and encrypt and protect it while in transit.
This section will guide you through migration from the Deliverr API V1.
Here are the key differences between the two APIs at a high level:
| Difference | Logistics API version 2023-04 | Deliverr API version 1.0.0 |
|---|---|---|
| OAuth 2.0, RFC6749 compliant | Yes | No |
| Release schedule | Every 3 months | Ad-hoc |
A handful of identifiers have been renamed or added in the Logistics API. Refer to the tables, like the one below, in each of the following guides.
| Changes in | Deliverr API | Logistics API |
|---|---|---|
| All resources | productId (DSKU) | logisticsSku |
You must request new access tokens as described here when migrating from Deliverr API.
| Changes in | Deliverr API | Logistics API |
|---|---|---|
| All resources | productId | logisticsSku |
| Inbounds | shippingPlan | shipment |
| Inbounds | externalShippingPlanId | N/A |
| Inbounds | destination | N/A |
| Inbounds | caseQuantity | N/A |
In the Logistics API, inventory inbounding has been simplified and a number of new endpoints have been added. Refer to the Inbounds reference for additional details.
Key differences between the API are highlighted below:
id of the shipment or as a list by specifying a list of ids via the shipmentIds query parameterlogisticsSku replaces productId as the identifier for the product being inboundedexternalShippingPlanId, destination and caseQuantity are no longer supportedshippingId.| Changes in | Deliverr API | Logistics API |
|---|---|---|
| All resources | productId | logisticsSku |
| Product | msku | merchantSku |
| Product | externalProductId | N/A |
| Inventory | availableUnits | available |
| Inventory | N/A | onHand |
| Inventory | N/A | unavailable |
A few fundamental changes:
logisticsSku instead of externalProductId in the list of lineItemsexternalProductId mapping under the aliases section of a Product Detail page as "Deliverr API" will not be used in the Logistics API and will remain unchangedheight, length, width, weight), units (lb/kg, in/cm), or category via the APIThe retrieve inventoryretrieve inventory endpoint response contains a few new fields.
The retrieve warehouse details endpoint is a POST request instead of a GET. Instead of passing a list of productId in the productIds query parameter, you will now send a body in the following JSON format:
{
"logisticsSKUs": [
"DSKU1",
"DSKU2",
"DSKU3"
]
}
The bundle endpoints remain semantically similar between the Deliverr API and the Logistics API. However, the bundle creation flow has changed between the APIs. The order endpoints in the Logistics API do not support fulfilling orders by bundleId. Merchants who wish to fulfill bundle orders in the logistics API have two options:
{ logisticsSku, quantity }.In both cases, you must use the logisticsSku and its total quantity when creating an order.
The following operations no longer exist in the Logistics API.
| Deprecated Endpoints |
|---|
| PATCH LinkAliasToBundle |
| PATCH UnlinkAliasFromBundles |
| GET GetBundleByExternalBundleId |
| Changes in endpoint | Deliverr API | Logistics API |
|---|---|---|
| Create order | externalProductId | logisticsSku |
| Create order | orderShipmentTime | promisedShipByTime |
| Create order | orderDeliverTime | promisedDeliveryByTime |
| Create order | shipToAddress | address |
| Create order | deliverDays | deliveryDays |
| Create order | N/A | packingSlipUrl |
| Create order | N/A | duties |
| Create order | createdAt | N/A |
| Create order | updatedAt | N/A |
| Create order | orderCreationTime | N/A |
The response payload for getting an order’s information has now changed. See the retrieve order response.
Beyond changes to the URIs, the report endpoints are a one-to-one mapping between the Deliverr API and the Logistics API.
Your webhook subscriptions must be recreated using the create webhook endpoint.
The Outbounds API lets you programmatically create and manage B2B (wholesale) outbound orders from Flexport warehouses. When an order is submitted, Flexport picks, packs, and ships the inventory to the specified business destination (such as a retailer distribution center, a third-party fulfilment facility, or an Amazon/Walmart fulfilment center) via a freight or parcel carrier.
Orders ship from one of two warehouse types, depending on how your account is configured. The APIs do not accept a warehouse type during order creation; the origin warehouse is resolved automatically per your account configuration.
| Warehouse type | Description | Typical use case |
|---|---|---|
| Reserve Storage (RS) | Bulk pallet or case-pack inventory held in a Flexport reserve storage facility. | Bulk B2B orders; shipping cases or pallets to retailers or distribution centers. |
| DTC fulfilment center | Individual unit inventory in a Flexport fulfilment center. | Merchants configured for single-pool outbounds who need to ship eaches as well as cases. |
All Outbounds endpoints share the path prefix /orders/rs and require Bearer token authentication with the write_logistics_orders_b2b (write) or read_logistics_orders_b2b (read) scope.
A typical B2B outbound integration follows the five steps below. Steps 3 and 4 are optional depending on your setup.
POST /orders/rs (Create Order). Submit the order with destination address, line items, and transportation preferences. On success, the order is immediately in PLANNED or BOOKED status. Store the returned orderId for all subsequent operations.GET /orders/rs/{orderId} (Get Order) or GET /orders/rs/external_id/{externalId} (Get Order By External ID). Poll periodically until the order reaches a terminal state (COMPLETED, CANCELLED, LOST_DAMAGED, or ERROR). Use the externalId lookup if your system stores its own reference. See Order status lifecycle.POST /orders/rs/{shipmentId}/attachments (Get Shipment Attachment Url). After a shipmentId appears in the order response, call this endpoint to request a pre-signed upload URL, then PUT your PDF directly to that URL (no Bearer token on the PUT). The URL is valid for one hour. See Attachment types.POST /orders/rs/{orderId}/cancel (Cancel Order). Orders in PLANNED or BOOKED status can be cancelled. Once the warehouse starts processing (IN_PROGRESS or later), cancellation is no longer possible via the API.Each order line item requires a product identifier. There are two options:
logisticsSku (preferred): the Flexport-assigned logistics SKU. Fastest and most reliable. Retrieve it from the Products API or the Flexport merchant portal and store it in your system of record.productData fallback: if you do not have the logisticsSku, supply a productData object. Its sku (merchant SKU) field is required; you may additionally include upc, buyerPartNumber, and/or gtin to improve resolution. Note that gtin is an integer, not a string. Send it as a number (e.g. 00012345678905 as 12345678905), while the others are strings. Flexport will attempt to resolve the product; if resolution fails, the order moves to ERROR status.logisticsSku after your first successful order. Relying on productData lookups increases the risk of resolution failures, especially when product records are incomplete.
Use the shipBy field to schedule an order for a specific future date. The timestamp must be in UTC and at least three business days from today. The warehouse only picks and ships during local business hours. Do not use a past timestamp or a same-day date.
For products with expiry dates or batch/lot control, include the lotNumber field on each order item. If omitted, Flexport uses FEFO (First Expiry, First Out) allocation by default.
If an order moves to ERROR status it is terminal; there is no API retry mechanism. Common causes:
logisticsSku not found, or productData mismatch).externalId (another order already uses this reference).shipBy date is less than three business days in the future.To recover from an error, correct the underlying issue and submit a new Create Order request with a fresh externalId.
| Constraint | Detail |
|---|---|
| Retailer routing support | Wholesale orders that require routing through retailer (Target/Walmart) systems, i.e. vendor-route EDI, are not supported. Use the EDI integration for those flows. |
| Single warehouse per order | All line items in a single order must be available in one warehouse location. If inventory is split across warehouses, create separate orders per location. |
| Maximum line items | A maximum of 1,000 line items are allowed per order. |
| No duplicate SKUs | Each logisticsSku (or product identifier) may appear only once per order. Combine quantities into a single line item if needed. |
| Future ship date minimum | When using the shipBy field, the date must be at least three business days after the current UTC date. |
| Attachment format | Only PDF (application/pdf) is supported for shipment attachments. Other formats are not accepted. |
The transportationDetails object on the Create Order request controls how the shipment is carried. The key fields are shippingPartner, shippingType, shippingMethod, and shippingSpeed.
The shippingPartner field determines whose carrier account is used and which additional fields are required:
shippingPartner |
Description | shippingType |
Carrier account in request? |
|---|---|---|---|
FLEXPORT |
Flexport selects and books the best carrier on your behalf. Recommended default; optimises cost and transit time. | LTL, FTL, PARCEL |
Not required |
SELLER |
You purchase and upload shipping labels from your carrier after order creation. | LTL, FTL, PARCEL |
Not required |
THIRD_PARTY |
You supply your own carrier account details in each request. | PARCEL only |
Yes. carrierAccountDetails required, with all fields (carrierName as UPS or FEDEX, carrierAccountId, country, postalCode) |
RECEIVER |
The consignee (recipient) pays freight using their own carrier account. Common for retailer-collect arrangements. | PARCEL only |
Yes. carrierAccountDetails required, with all fields (carrierName as UPS or FEDEX, carrierAccountId, country, postalCode) |
COLLECT |
FedEx collect billing; charges are billed to the receiver's FedEx account. | PARCEL only |
Yes. carrierAccountDetails required with carrierName: "FEDEX"; carrierAccountId, country, and postalCode are optional |
Two optional fields let you influence carrier service selection:
| Field | What it does | When to use |
|---|---|---|
shippingMethod |
Pins a specific carrier service, e.g. UPS.GROUND or FEDEX.2DAY. Takes precedence over shippingSpeed when both are provided. |
When you have a contractual obligation or retailer requirement to use a specific service. |
shippingSpeed |
Specifies a delivery speed (ONE_DAY, TWO_DAY, THREE_DAY, STANDARD) and lets Flexport select the carrier. |
When you want Flexport to optimise carrier selection within a speed constraint. |
shippingSpeed is accepted. shippingSpeed is only valid when shippingPartner is FLEXPORT and shippingType is PARCEL. Supplying it with any other combination (including any SELLER shipment, or a FLEXPORT LTL/FTL shipment) returns a validation error.
shippingMethod nor shippingSpeed is provided and shippingPartner is FLEXPORT, Flexport defaults to the most cost-effective STANDARD speed option available for the destination. Not all speeds are available for all destinations.
An order moves through the following statuses from creation to completion. The current value is returned in the orderStatus field of the Get Order response.
| Status | Description | Cancellable? | Typical next status |
|---|---|---|---|
PLANNED |
Order received and validated. Inventory allocation is pending, or the order is scheduled for a future ship date. | Yes | BOOKED |
BOOKED |
Inventory has been allocated. The warehouse has accepted the order and will begin processing on the scheduled date. | Yes | IN_PROGRESS |
IN_PROGRESS |
The warehouse is actively picking and packing. The order can no longer be cancelled once this state is reached. | No | TENDERED |
TENDERED |
The shipment has been handed off to a carrier. Tracking information (tracking number or BOL) is typically available. | No | COMPLETED |
COMPLETED |
All shipments in the order have been successfully delivered. Terminal state. | No | N/A |
CANCELLED |
The order was cancelled before it was tendered to a carrier. Terminal state. | N/A | N/A |
LOST_DAMAGED |
One or more shipments were lost or damaged in transit. Flexport will initiate a claims process. Terminal state. | No | N/A |
ERROR |
The order encountered an unrecoverable error (e.g. insufficient inventory, invalid address, unresolvable product). Terminal state. | No | N/A |
Each order may produce one or more shipments. Shipment-level status is returned in the shipments[].status field of the Get Order response and in outbound webhook payloads.
| Status | Description |
|---|---|
CREATED |
The shipment record has been created in the system. The warehouse has not yet begun physical processing. |
NOT_SYNCED |
The shipment has been created but not yet transmitted to the warehouse management system (WMS). This is a transient state. |
WAREHOUSE |
The warehouse has received and acknowledged the shipment. Picking and packing is underway. |
SHIPPED |
All items in the shipment have been picked, packed, and dispatched to the carrier. Tracking information is available. |
PARTIALLY_SHIPPED |
Some (but not all) items in the shipment have been dispatched. This can occur when inventory ships in multiple waves. |
OVER_SHIPPED |
More units were shipped than were requested on the order. Flexport will notify the merchant and initiate a review. |
CANCELLED |
The shipment was cancelled before dispatch. This occurs when the parent order is cancelled. |
ERROR |
The shipment encountered an error during processing (e.g. a carrier booking failure). Check the parent order for details. |
The Get Shipment Attachment Url endpoint accepts the following document types. Supply the exact enum value in the attachmentType field of the request body.
attachmentType |
Document | When to upload | Required by |
|---|---|---|---|
SHIPPING_LABELS |
Carrier-specific labels for individual parcels or cartons. | After order creation and before the warehouse ships, when using SELLER shipping where you supply labels. |
SELLER parcel shipments |
CASE_LABELS |
Case-level GS1-128 or retailer-specific labels affixed to each case. | When the destination retailer requires pre-labelled cases (common for Walmart, Target, and other big-box retailers). | Retailer compliance programs |
PALLET_LABELS |
Pallet-level labels (e.g. GS1-128, SSCC-18) for LTL/FTL shipments. | When the destination retailer or DC requires compliant pallet labels before receiving. | LTL/FTL freight shipments |
BILL_OF_LADING |
A legal document issued by the carrier acknowledging receipt of the freight. | Required for LTL and FTL shipments. Upload your own BOL when using SELLER shipping. |
LTL/FTL freight shipments |
COMMERCIAL_INVOICE |
An invoice detailing goods, values, and parties for customs purposes. | Required for all international (cross-border) outbound shipments to accompany customs clearance. | International shipments |
application/pdf content type is accepted for all attachment types. The pre-signed upload URL is valid for one hour after generation. If the upload is not completed within this window, call the endpoint again to obtain a new URL.
Flexport recommends using webhooks instead of repeatedly polling the Get Order endpoint. When an order or shipment changes state, Flexport sends an HTTP POST to your registered webhook URL with a structured event payload. Register an endpoint using the Create Webhook API with the event types you want to subscribe to.
Every webhook payload includes the common envelope fields logisticsAccountId, logisticsEventId, logisticsEventType, and logisticsEventTime. Order and shipment events additionally include orderId and externalOrderId (the externalId you supplied on the order); shipment events also include the shipment's id. To retrieve full order or shipment detail (status, tracking, carrier, line items), call Get Order with the orderId from the payload. See the Events reference for each event's exact schema.
The following events are relevant for B2B outbound orders:
| Event | Triggered when |
|---|---|
Order.Submitted |
The order has been accepted and is in PLANNED or BOOKED status. Fires immediately after a successful Create Order call. |
Order.Held |
The order has been placed on hold by the warehouse or Flexport operations (e.g. inventory discrepancies or compliance checks). |
Order.Shipped |
The entire order has shipped. If the order has multiple shipments, each also triggers a Shipment.Shipped event. |
Order.Delivered |
All shipments in the order have been delivered. The order moves to COMPLETED status. |
Order.Cancelled |
The order has been cancelled (via the Cancel Order API or by Flexport operations). |
Shipment.Submitted |
A shipment record has been created for the order and transmitted to the warehouse management system. |
Shipment.Shipped |
A specific shipment has been dispatched. Useful when an order produces multiple shipments; fires per shipment. |
Shipment.PartiallyShipped |
Some items in the shipment have been dispatched but the shipment is not yet complete. |
Shipment.Delivered |
A specific shipment has been confirmed as delivered. Fires per shipment. |
Shipment.Cancelled |
A specific shipment has been cancelled. |
200 within 5 seconds. Deliveries that take longer are treated as failures and retried.Order.Submitted, Order.Shipped, Order.Delivered, and Order.Cancelled.orderId to read the current status, shipments, and tracking.200 response or times out, Flexport retries delivery with exponential back-off. Ensure your handler is idempotent (de-duplicate on logisticsEventId).Besides following the OpenAPI 3.0 specification, below is a list of common resources and standards shared across the APIs.
The Logistics API makes use of the following custom HTTP headers.
| Header field name | in request | in response | description |
|---|---|---|---|
x-correlation-id |
no | yes | UUID v4 tied to a request |
idempotency-key |
yes | no | Can be any string, use for making POST or PATCH requests fault tolerant |
idempotent-replayed |
no | yes | If included in the response, indicates a stored value was used to replay the request |
Every access token is issued with one or more permission scopes. Each scope grants access to a specific resource family in either read-only or read-write mode. Requests that target an operation whose required scope is not present on the token are rejected with 403 — see 403 Forbidden. When requesting an OAuth token, omitted or unknown scopes return 405003 Missing scopes or 405004 Invalid scopes.
The per-operation scope requirement is declared on each endpoint's reference page under Authorizations. When requesting a partner (OAuth) token, pass the scopes as a +-separated list in the scope query parameter of the AuthorizationRedirect call.
| Scope | Grants |
|---|---|
read_logistics_products |
Read the product catalog (SKUs, dimensions, barcodes). |
write_logistics_products |
Create and update products in the catalog. |
read_logistics_inbounds |
Read inbound shipments and their contents. |
write_logistics_inbounds |
Create, cancel, and modify inbound shipments. |
read_logistics_orders |
Read outbound (D2C) orders and shipments. |
write_logistics_orders |
Create, cancel, and modify outbound (D2C) orders. |
read_logistics_orders_b2b |
Read B2B orders and shipments. (2024-07 and later.) |
write_logistics_orders_b2b |
Create, cancel, and modify B2B orders. (2024-07 and later.) |
read_logistics_bundles |
Read bundle (kit) definitions. |
write_logistics_bundles |
Create and update bundle definitions. |
read_logistics_parcels |
Read parcel labels, rates, and master cartons. |
write_logistics_parcels |
Purchase parcel labels and create/link master cartons. |
read_logistics_returns |
Read return shipments and their contents. |
write_logistics_returns |
Create and update return shipments. |
read_logistics_warehouses |
Read the list of warehouses available to the account. (2025-03 and later.) |
read_logistics_webhooks |
Read webhook subscriptions. |
write_logistics_webhooks |
Create, update, and delete webhook subscriptions. |
read_logistics_events |
Read the event stream that backs webhook deliveries. |
read_logistics_reports |
Read generated reports. |
write_logistics_reports |
Request new reports. |
The unstable version exposes additional scopes covering experimental endpoints (freight, sales channels, uploads). Refer to the unstable reference for the full list; these scopes are not yet available on stable versions.
Follow the principle of least privilege: issue separate tokens with the narrowest scope set each integration needs, rather than a single token with every scope.
The Logistics API uses date based versioning for releases. Versions are declared explicitly in the Logistics API URI with a format of /logistics/api/{api_version}/{endpoint}. Stable releases follow the format of yyyy-mm. Experimental releases have an API version of unstable. For example:
/logistics/api/2023-04/orders
/logistics/api/unstable/orders
INACTIVEOrder.Submitted: This event and webhook is generated when Order is Submitted to system.Order.PickingStarted: This event and webhook is generated when Order picking has started at the warehouse.Order.Packed: This event and webhook is generated when Order is Packed at the warehouse.Order.Dispatched: This event and webhook is generated when Order has been dispatched from the warehouse for delivery.Order.Delivered: This event and webhook is generated when Order is Delivered to destination.Shipment.Submitted: This event and webhook is generated when Shipment is Submitted to system.Shipment.PickingStarted: This event and webhook is generated when Shipment picking has started at the warehouse.Shipment.Packed: This event and webhook is generated when Shipment is Packed at the warehouse.Shipment.Dispatched: This event and webhook is generated when Shipment has been dispatched from the warehouse for delivery.Shipment.Delivered: This event and webhook is generated when Shipment is Delivered to destination.getBundles: This API retrieves list of bundles with cursor-based pagination.createMasterCarton: This API creates master carton labels in bulk.linkMasterCarton: API to link a master carton barcode to list of parcel tracking codes.getOrderByExternalId: This API gets the order details based on the external ID provided by the seller.getShipmentAttachmentUrl: This API generates a pre-signed URL that can be used to upload an attachment for a specific outbound shipment.getStorageWarehouses: API to get a list of storage warehouses that can store products.
Update createAShipment API to:
Update getInboundingShipment API to allow support storage shipments
Update getInboundingShipments API to allow support for storage shipments
get_inbounds_warehouses: API to get a list of storage warehouses and Fulfillment Centres
createOrder: Update API to allow drop ship ordersgetOrder: Update API to get drop ship details for ordersgetBulkParcelJob: This API retrieves details about a bulk parcel creation job.createBulkParcelJob: Use this API to submit a bulk parcel creation job.getParcel, getParcelTracking, getParcelTrackingByTrackingCode and createParcel to return an option field carrierBarcode.flexportTrackingUrl datatype from string to URLsource marketplace.Outbounds API allows you to create outbound orders from reserve storage warehouses to fulfilment centres. The APIs also allow you to track the status of the reserve storage outbound orders and cancel them.Create a shipment API to accept a shippingPlanName. This is the name that will appear in the Flexport Portal.Get a shipment and Get a list of shipments APIs to support reading direct shipments that were created in Seller Portal.InboundReceivedEvent documentation was updated to include DAMAGED state.GetProductAliases API to list all aliases by logisticsSku.GetProductsByMerchantSku API to get a paginated list of products by merchantSku.CreateProductBarcode API to validate and assign a new barcode to a product by logisticsSku.CreateOrder API to accept Flexport bundle SKUs.CreateOrder API to take packingSlipUrl that overrides the default packing slip.CreateOrder API.Shipment.Shipped and Order.Shipped.customsInformation to create a parcel. You can now send parcels to international addresses and specify the relevant customs information.customLabelFooterFields to create a parcel. This field lets you define a string to be placed on the footer of the shipping label.flexportTrackingUrl field when creating a parcel, retrieving a parcel, or retrieving parcel tracking events. This field can be used to track a package end-to-end through Flexport and final mile partner networks.shippingPlanName to create an inbounding shipment. This is the name that will appear in the Flexport Portal.shippingPlanExternalId to create an inbounding shipment. This field is an external ID that can be used to link to/from other systems.shippingPlanName and shippingPlanExternalId in getting an inbound shipment, or getting a list of inbound shipments.GetAllInventory. Get a paginated list of available inventory information for products.GetProducts. Return a paginated list of products.The "unstable" version contains code experimental changes, developer previews, and new features. However, endpoints can always change and may update with breaking changes without notice.
getInboundsWarehouses: This API Fetches List of Warehouse Details for Both DTC & RS based on the request parameters.When an API error occurs, the HTTP response includes a three-digit HTTP status code with additional information returned as a problem+json object, for example:
HTTP/1.1 404 Not Found
Content-Type: application/problem+json
Content-Language: en
{
"type": "https://docs.logistics-api.flexport.com/2026-02/#section/Errors/404-Not-Found",
"title": "Not Found",
"detail": "Cannot find order 49201824029",
"instance": "92e04577-c56b-47b9-b075-62096165a0ce"
}
In addition to the three-digit HTTP status code, some errors carry a six-digit error code
that provides additional detail about the specific error condition. For example 405004 error code
refers to Invalid scopes and is documented here.
Bad Request.
The access token is invalid or expired.
Access token does not have permission to perform the requested operation.
The requested object cannot be found.
The object with the same identifier already exists.
The request is malformed.
Too many requests in a given amount of time ("rate limiting").
Retry-After header for the number of seconds to wait before retrying the request.Access to the Logistics API is locked and denied.
An internal error has occurred while processing the request (these are uncommon).
The redirect URI specified as a callback for OAuth authorization is invalid.
https://deliverr.com if identity is used as the client ID.Invalid client_id.
identity or a valid client ID registered with Flexport.Scopes were not provided.
Some of the scopes provided are invalid. For all available scopes see OAuth.
The one-time authorization code provided is invalid, expired, or has already been used.
Canceled.