Import orders
Create orders in Propeller via the REST API. This is used when orders originate outside your webshop and need to be synced into the platform.
When to import orders
The two most common scenarios:
- Offline orders. In B2B, orders are created through meetings, phone calls, email or directly in the ERP. Although the Sales Hub offers options to convert these into orders, some organizations prefer to create orders in the ERP first and sync them to Propeller so sales reps and end customers can see all orders in one place.
- Marketplace orders. Orders created through B2C marketplaces need to be synced into Propeller to centralize order management.
Create an order
POST /v2/orders
The request body contains the order header, line items, payment and shipping data and addresses.
{
"userId": 14590,
"email": "customer@example.com",
"currency": "EUR",
"language": "NL",
"type": "dropshipment",
"status": "NEW",
"items": [
{
"class": "product",
"productId": 408,
"quantity": 2,
"sku": "#117",
"name": "voorbeeld artikel",
"originalPrice": 49.99,
"price": 49.99,
"priceTotal": 99.98,
"taxPercentage": 21,
"taxCode": "H",
"isBonus": "N"
}
],
"paymentData": {
"net": 99.99,
"gross": 121.99,
"tax": 22,
"taxPercentage": 21,
"method": "rekening",
"status": "unknown",
"overruled": "N"
},
"postageData": {
"method": "DELIVERY",
"taxPercentage": 21,
"gross": 7.25,
"net": 5.99,
"tax": 1.26,
"carrier": "",
"partialDeliveryAllowed": "N",
"overruled": "N"
},
"total": {
"gross": 129.24,
"net": 105.98,
"tax": 23.26,
"discountType": "A",
"discountValue": 0
},
"addresses": [
{
"type": "invoice",
"firstName": "John",
"lastName": "Doe",
"street": "123 Business Street",
"city": "Amsterdam",
"postalCode": "1012AB",
"country": "NL",
"gender": "U",
"icp": "N"
},
{
"type": "delivery",
"firstName": "John",
"lastName": "Doe",
"street": "456 Home Avenue",
"city": "Rotterdam",
"postalCode": "3011CD",
"country": "NL",
"gender": "U",
"icp": "N"
}
]
}
The request includes:
userIdlinks the order to a user in Propelleritems[]contains the line items with product reference, quantity and pricingpaymentDataandpostageDatacontain payment and shipping totalsaddresses[]requires at least aninvoiceanddeliveryaddress, identified by thetypefieldtotalcontains the order totals including tax and discount
Preventing export loops
Imported orders that are not marked correctly will be picked up by the order export process and sent back to the originating system, creating an infinite loop.
When you import orders from an external system (for example an ERP), those orders should not be exported back to the same system. There are two ways to prevent this:
Option A: Set a distinctive order status. Use a status that your export process does not pick up. If your export filters on status: ["NEW"], use a different status for imported orders so they are excluded from the export search. A distinctive status also makes it easier on the frontend to distinguish these orders when displaying them to end customers.
Option B: Mark the order as exported on creation. Include the export fields directly in the create request so the order is immediately marked as exported:
{
"userId": 14590,
"status": "NEW",
"exportedAt": "2026-03-04T10:00:00.000Z",
"exportStatus": "exported",
"exportMessage": "Imported from ERP, skip export",
"items": [...]
}
The exportStatus field accepts the following values: exported, finished or failed. By setting it on creation, the order will not match an exportStatuses: [] filter in the export process.
See also
- Export orders for exporting orders to external systems
- Authentication and security for token management
- REST API Reference for the full endpoint specification