Skip to main content

Export orders

Export orders from Propeller to an external system for fulfillment. Orders are typically created in Propeller through a webshop, the Sales Hub or the API and then sent to an ERP, WMS or third-party supplier that handles logistics and delivery.

The export flow

Exporting orders is a two-step process:

  1. Search for orders that have not been exported yet
  2. Update each order with export metadata after the receiving system confirms receipt

This pattern ensures every order is exported exactly once. The search filter excludes orders that already have an export status, and the update marks them as processed so they do not appear in the next export run.

Search for unexported orders

Use the orders search endpoint with the expands parameter to include order items and addresses in the response. See Expanding resources for more on the expands parameter.

POST /v2/orders/search?expands=ORDER_ITEMS,ADDRESSES

Filter by status and exportStatuses in the request body. An empty exportStatuses array matches orders where no export status has been set.

{
"status": ["NEW"],
"exportStatuses": []
}

This returns all orders in status NEW that have not been exported yet.

Response

{
"items": [
{
"shopId": 0,
"id": 36,
"channelId": 1,
"uuid": "019cb83f-0e75-746c-a834-a5b567d834b7",
"status": "NEW",
"type": "dropshipment",
"email": "noreply@propel.us",
"currency": "EUR",
"currencyRatio": 1,
"language": "NL",
"date": "2026-03-04T09:47:46.207Z",
"createdAt": "2026-03-04T09:47:46.207Z",
"postageData": {
"method": "",
"taxPercentage": 21,
"requestDate": null,
"gross": 10,
"net": 12.1,
"tax": 2.1,
"partialDeliveryAllowed": "Y",
"pickUpLocationId": null,
"overruled": "Y",
"carrier": null
},
"paymentData": {
"net": 0,
"gross": 0,
"tax": 0,
"taxPercentage": 21,
"method": "",
"status": "UNKNOWN",
"statusDate": null,
"overruled": "N",
"accountingId": null
},
"total": {
"orderId": 36,
"gross": 910,
"net": 1101.1,
"tax": 191.1,
"discountValue": 0,
"discountType": "N",
"taxPercentages": [],
"isFromRevision": false,
"sourceRevisionNumber": 3
},
"items": [
{
"uuid": "019cb83e-c6b4-7934-91aa-b0bff014ee2e",
"class": "product",
"productId": 799,
"parentOrderItemId": null,
"sku": "12345",
"quantity": 6,
"minimumQuantity": 1,
"notes": "",
"name": "skuname",
"supplier": "",
"supplierCode": "",
"manufacturer": "",
"manufacturerCode": "",
"eanCode": null,
"unit": 1,
"package": "",
"packageUnit": "",
"packageUnitQuantity": "1",
"purchaseUnit": 1,
"purchaseMinimumQuantity": 1,
"originalPrice": 150,
"customerPrice": 150,
"price": 150,
"priceTotal": 900,
"priceNet": 181.5,
"costPrice": 0,
"priceTotalNet": 1089,
"discount": 0,
"tax": 189,
"taxCode": "H",
"taxPercentage": 21,
"isBonus": "N",
"requestDate": null,
"priority": 1,
"id": 27594,
"orderId": 36
}
],
"lastModifiedAt": "2026-03-04T09:48:04.707Z",
"public": true,
"revisionNumber": 3,
"invalid": false,
"sources": [],
"userId": 14590,
"accountManagerId": null,
"cartId": null,
"externalId": null,
"debtorId": null,
"source": "Sales Portal",
"emailDate": null,
"remarks": null,
"reference": null,
"extra3": null,
"extra4": null,
"statusDate": "2026-03-04T09:48:02.480Z",
"addresses": [
{
"createdAt": "2026-03-04T09:47:46.224Z",
"lastModifiedAt": "2026-03-04T09:47:46.224Z",
"firstName": null,
"middleName": null,
"lastName": null,
"gender": "M",
"company": "Propeller test bedrijf",
"street": "Teststraat ",
"number": "12",
"numberExtension": null,
"postalCode": "1234ED",
"city": "Ede",
"region": null,
"country": "NL",
"phone": null,
"mobile": null,
"email": null,
"code": null,
"notes": null,
"icp": "N",
"type": "delivery",
"url": null,
"name": null,
"id": 22091,
"orderId": 36
},
{
"createdAt": "2026-03-04T09:47:46.224Z",
"lastModifiedAt": "2026-03-04T09:47:46.224Z",
"firstName": null,
"middleName": null,
"lastName": null,
"gender": "U",
"company": "Propeller test bedrijf",
"street": "Teststraat",
"number": "12",
"numberExtension": null,
"postalCode": "1234ED",
"city": "Ede",
"region": null,
"country": "NL",
"phone": null,
"mobile": null,
"email": null,
"code": null,
"notes": null,
"icp": "N",
"type": "invoice",
"url": null,
"name": null,
"id": 22092,
"orderId": 36
}
],
"invoiceUserId": 14590,
"validUntil": null,
"companyId": 167,
"originalOrderId": 0,
"exportedAt": null,
"exportStatus": "",
"exportMessage": null,
"publicVersionNumber": null,
"invalidationReason": null
}
],
"itemsFound": 2,
"offset": 12,
"page": 1,
"pages": 1,
"start": 1,
"end": 2
}

The key fields for mapping to an external system are:

  • items[] contains line items with SKU, quantity and pricing
  • addresses[] contains delivery and invoice addresses, identified by the type field
  • exportStatus and exportedAt are empty on orders that have not been exported yet

The response includes pagination metadata (itemsFound, page, pages). When exporting large numbers of orders, iterate through all pages. See Pagination for details.

Update the order after export

After the receiving system confirms it has processed the order, update the order in Propeller with export metadata. This prevents the order from appearing in the next export run because the exportStatuses: [] filter no longer matches.

PATCH /v2/orders/id/36
{
"exportedAt": "2026-03-04T10:12:19.000Z",
"exportMessage": "ERP order id = 12355",
"exportStatus": "exported"
}

The three export fields:

  • exportedAt: timestamp of when the export happened
  • exportMessage: free text field to store a reference from the receiving system (for example the order ID in the ERP)
  • exportStatus: status string used by the exportStatuses filter in the search endpoint

The exportStatus field accepts the following values: exported, finished or failed. The search filter in the orders search endpoint matches on exact values.

Supplier and purchase order scenarios

When the export target is a third-party supplier handling fulfillment (a purchase order), it can also make sense to change the order status (for example PURCHASED).

PATCH /v2/orders/id/36
{
"status": "PURCHASED"
}

See also