Skip to main content

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:

  • userId links the order to a user in Propeller
  • items[] contains the line items with product reference, quantity and pricing
  • paymentData and postageData contain payment and shipping totals
  • addresses[] requires at least an invoice and delivery address, identified by the type field
  • total contains the order totals including tax and discount

Preventing export loops

warning

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