delivery_order/created
Overview
| Property | Value |
|---|---|
| Webhook type | delivery_order/created |
| Kafka topic | delivery-order.created |
| Direction | Platform → Your endpoint |
Description
Fired when a delivery order (also called a fulfillment order) is created. A delivery order groups one or more order lines for fulfillment at a specific warehouse location. A single customer order can generate multiple delivery orders (e.g. lines fulfilled from different locations).
Trigger Conditions
- The dispatching engine creates a delivery order from one or more order lines
- An operator manually creates a delivery order via the GraphQL API
- The
fulfillmentTypedetermines whether fulfillment is handled internally (INTERNAL) or by an external warehouse (WAREHOUSE)
Message Envelope
json
{
"header": {
"organizationId": "org_xxxxxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxxx",
"messageId": "xxxxxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxxx",
"webhookId": "xxxxxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxxx",
"type": "delivery_order/created",
"date": "2024-03-15T10:30:00.000Z"
},
"body": { ... }
}Body — Property Table
DeliveryOrder Object
| Field | Type | Nullable | Description |
|---|---|---|---|
id | string (uuid) | No | Unique delivery order identifier |
orderIds | string[] (uuid[]) | Yes | IDs of the source orders (one DO can aggregate multiple orders) |
locationId | string (uuid) | Yes | Warehouse/location assigned to fulfill this delivery order |
organizationId | string (uuid) | No | Organization that owns this delivery order |
shippingMethodId | string (uuid) | Yes | Assigned shipping method |
shippingMethodName | string | Yes | Human-readable shipping method name |
collectPointId | string | Yes | Pickup point ID (for PICKUP delivery type) |
collectPointCountry | string | Yes | Country of the pickup point |
collectPointZipCode | string | Yes | ZIP code of the pickup point |
type | enum | No | Order type: B2B or B2C |
priority | enum | No | Priority: LOW, NORMAL, or HIGH |
issuedAt | string (ISO 8601) | No | Timestamp when the original order was placed |
lines | DeliveryOrderLine[] | No | Array of delivery order lines (see below) |
events | FulfillmentEvent[] | No | Array of fulfillment events (see below) |
deliveryAddress | DeliveryAddress | Yes | Delivery address (see below) |
status | enum | No | Current status: DRAFT, PENDING, OPENED, or COMPLETED |
fulfillmentType | enum | No | Fulfillment type: INTERNAL or WAREHOUSE |
total | float | No | Total amount (tax-exclusive) |
totalTaxInclusive | float | No | Total amount (tax-inclusive) |
totalShipping | float | No | Shipping cost |
totalDiscount | float | Yes | Discount amount |
totalVat | float | No | VAT amount |
totalInsurance | float | Yes | Insurance amount |
currency | string | No | ISO 4217 currency code, default EUR |
invoiceNumber | string | No | Invoice reference number |
invoiceUrl | string | Yes | URL to the invoice document |
orderNumber | string | Yes | Human-readable order number |
gift | boolean | Yes | Whether this is a gift delivery |
inventoryPolicy | enum | No | Inventory policy: DENY or CONTINUE, default DENY |
createdAt | string (ISO 8601) | No | Timestamp when the delivery order was created |
prepareAt | string (ISO 8601) | Yes | Scheduled preparation date |
comment | string | Yes | Free-text comment |
meta | object | Yes | Arbitrary metadata (JSON) |
incoterms | enum | Yes | Incoterms for international shipments: DDP or DAP |
virtual | boolean | No | Whether this is a virtual delivery order (no physical goods) |
DeliveryOrderLine Object
| Field | Type | Nullable | Description |
|---|---|---|---|
id | string (uuid) | No | Unique line identifier |
deliveryOrderId | string (uuid) | No | Parent delivery order ID |
orderLineId | string (uuid) | Yes | Source order line ID (if linked) |
stockReferenceId | string (uuid) | No | Stock reference (SKU) being fulfilled |
status | enum | No | Line status: NEW, AWAITING_STOCK, PENDING, CANCELED, ACCEPTED, IN_PROGRESS, REJECTED, FULFILLED, PARTIALLY_FULFILLED, DELIVERED, ERRORED |
label | string | No | Product label |
sku | string | No | Stock keeping unit |
quantity | integer | No | Ordered quantity |
price | float | No | Unit price (tax-exclusive) |
vatRate | float | No | VAT rate as decimal |
total | float | No | Line total (tax-exclusive) |
totalTaxInclusive | float | No | Line total (tax-inclusive) |
meta | object | Yes | Arbitrary metadata (JSON) |
fulfilledQuantity | integer | No | Quantity already fulfilled, default 0 |
FulfillmentEvent Object
| Field | Type | Nullable | Description |
|---|---|---|---|
id | string (uuid) | No | Unique event identifier |
deliveryOrderId | string (uuid) | No | Parent delivery order ID |
type | enum | No | Event type: FULFILLMENT_ACCEPTED, FULFILLMENT_REJECTED, INTEGRATED, INTEGRATION_ERROR, INSUFFICIENT_STOCK, FULFILLMENT_IN_PROGRESS, PACKED, SHIPPED, CANCELED, CANCEL_REJECTED, HOLDED, RESUMED, COMPLETED, FULFILLMENT_REQUESTED, UPDATED, UPDATE_REJECTED, UNPROCESSABLE |
level | enum | No | Severity: NORMAL, WARNING, or ERROR |
message | string | Yes | Human-readable event description |
date | string (ISO 8601) | No | When this event occurred |
DeliveryAddress Object
| Field | Type | Nullable | Description |
|---|---|---|---|
id | string (uuid) | No | Unique address identifier |
type | enum | No | Contact type: PERSON or COMPANY |
deliveryOrderId | string (uuid) | No | Parent delivery order ID |
fullname | string | Yes | Full name |
email | string | No | Email address |
address | string | Yes | Street address line 1 |
addressComplement | string | Yes | Street address line 2 |
zipcode | string | Yes | Postal/ZIP code |
country | string | Yes | ISO 3166-1 alpha-2 country code |
city | string | Yes | City name |
state | string | Yes | State/region |
phone | string | Yes | Phone number |
comments | string | Yes | Free-text comment |
metadata | object | Yes | Arbitrary metadata (JSON) |
taxId | string | Yes | Tax identifier |
eori | string | Yes | EORI number |
form | string | Yes | Legal form |
capital | string | Yes | Share capital |
companyId | string | Yes | Company registration number |
registration | string | Yes | Trade register number |
Full JSON Payload Sample
json
{
"header": {
"organizationId": "a1b2c3d4-e5f6-7890-abcd-ef1234567890",
"messageId": "b2c3d4e5-f6a7-8901-bcde-789012345678",
"webhookId": "c3d4e5f6-a7b8-9012-cdef-123456789012",
"type": "delivery_order/created",
"date": "2024-03-15T10:30:00.000Z"
},
"body": {
"id": "e5f6a7b8-c9d0-1234-efab-890123456789",
"orderIds": ["d4e5f6a7-b8c9-0123-defa-234567890123"],
"locationId": "f0a1b2c3-d4e5-6789-f0ab-123456789012",
"organizationId": "a1b2c3d4-e5f6-7890-abcd-ef1234567890",
"shippingMethodId": "f6a7b8c9-d0e1-2345-fabc-456789012345",
"shippingMethodName": "Colissimo Domicile",
"collectPointId": null,
"collectPointCountry": null,
"collectPointZipCode": null,
"type": "B2C",
"priority": "NORMAL",
"issuedAt": "2024-03-15T09:00:00.000Z",
"status": "PENDING",
"fulfillmentType": "WAREHOUSE",
"total": 85.00,
"totalTaxInclusive": 102.00,
"totalShipping": 5.99,
"totalDiscount": 0.00,
"totalVat": 17.00,
"totalInsurance": null,
"currency": "EUR",
"invoiceNumber": "INV-2024-001234",
"invoiceUrl": "https://cdn.example.com/invoices/INV-2024-001234.pdf",
"orderNumber": "ORD-2024-001234",
"gift": false,
"inventoryPolicy": "DENY",
"createdAt": "2024-03-15T10:30:00.000Z",
"prepareAt": null,
"comment": null,
"meta": null,
"incoterms": null,
"virtual": false,
"deliveryAddress": {
"id": "a1b2c3d4-e5f6-7890-abcd-901234567890",
"type": "PERSON",
"deliveryOrderId": "e5f6a7b8-c9d0-1234-efab-890123456789",
"fullname": "Alice Dupont",
"email": "alice.dupont@example.com",
"address": "12 Rue de la Paix",
"addressComplement": "Apt 4B",
"zipcode": "75001",
"country": "FR",
"city": "Paris",
"state": null,
"phone": "+33612345678",
"comments": null,
"metadata": null,
"taxId": null,
"eori": null,
"form": null,
"capital": null,
"companyId": null,
"registration": null
},
"events": [],
"lines": [
{
"id": "b2c3d4e5-f6a7-8901-bcde-012345678901",
"deliveryOrderId": "e5f6a7b8-c9d0-1234-efab-890123456789",
"orderLineId": "c9d0e1f2-a3b4-5678-cdef-789012345678",
"stockReferenceId": "d0e1f2a3-b4c5-6789-defa-123456789012",
"status": "NEW",
"label": "T-Shirt Blanc Taille M",
"sku": "TSHIRT-WHITE-M",
"quantity": 2,
"price": 25.00,
"vatRate": 0.20,
"total": 50.00,
"totalTaxInclusive": 60.00,
"meta": null,
"fulfilledQuantity": 0
},
{
"id": "c3d4e5f6-a7b8-9012-cdef-123456789012",
"deliveryOrderId": "e5f6a7b8-c9d0-1234-efab-890123456789",
"orderLineId": "d0e1f2a3-b4c5-6789-defa-890123456789",
"stockReferenceId": "e1f2a3b4-c5d6-7890-efab-234567890123",
"status": "NEW",
"label": "Pantalon Bleu Taille 38",
"sku": "PANTS-BLUE-38",
"quantity": 1,
"price": 35.00,
"vatRate": 0.20,
"total": 35.00,
"totalTaxInclusive": 42.00,
"meta": null,
"fulfilledQuantity": 0
}
]
}
}Related Events
delivery_order/updated— any field changes (not currently dispatched — see note in that file)delivery_order/opened— when DO transitions toOPENEDdelivery_order/pending— when DO transitions toPENDINGdelivery_order/completed— terminal success statedelivery_order/cancelled— terminal cancelled statedelivery_order/fulfillment_accepted— warehouse acceptance
Notes
- A single customer order (
order/created) may generate one or more delivery orders depending on the dispatching rules and available warehouse locations. - The
eventsarray is empty at creation time; it grows as fulfillment progresses. - The
statusesandlogsfields on the entity are excluded from the webhook payload (@Exclude()). virtual: trueindicates a logical grouping with no physical goods shipment (used for digital products or services).- For B2B orders,
incoterms(DDPorDAP) defines the customs responsibility split between buyer and seller.