Skip to content

transfer_order/completed ​

Overview ​

PropertyValue
Webhook typetransfer_order/completed
Kafka topictransfer-order.completed
DirectionPlatform → Your endpoint

Description ​

Fired when a transfer order is marked as completed. This happens once reception is finalized at the warehouse — all lines have been processed (received, restocked, or marked as garbage), and the order state transitions to COMPLETED.

Trigger Conditions ​

  • Warehouse staff completes reception of all lines on the transfer order
  • The order state transitions from OPENED to COMPLETED

Message Envelope ​

json
{
  "header": {
    "organizationId": "org_xxxxxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxxx",
    "messageId": "xxxxxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxxx",
    "webhookId": "xxxxxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxxx",
    "type": "transfer_order/completed",
    "date": "2024-03-26T15:45:00.000Z"
  },
  "body": { ... }
}

Body — Property Table ​

TransferOrder Object ​

FieldTypeNullableDescription
idstring (uuid)NoUnique transfer order identifier
organizationIdstring (uuid)NoOrganization that owns this transfer order
locationIdstring (uuid)NoDestination warehouse/location
supplierIdstring (uuid)YesSupplier who provided the stock
stateenumNoAlways COMPLETED for this event
orderNumberstringNoHuman-readable order reference number
externalReferencestringYesExternal system reference
shippingDatestring (ISO 8601)NoOriginally scheduled shipping date
expectedDatestring (ISO 8601)NoOriginally expected arrival date
carrierstringYesCarrier name
trackingstringYesCarrier tracking number
commentstringYesFree-text comment
emergencybooleanYesEmergency replenishment flag
containerNumberintegerYesNumber of containers/pallets
containerTypeenumNoContainer type: BOX, PALLET, CONTAINER
linesTransferOrderLine[]NoFinal line details with reception quantities
createdAtstring (ISO 8601)NoOriginal creation timestamp
issuedAtstring (ISO 8601)NoIssue timestamp
updatedAtstring (ISO 8601)NoTimestamp of completion

TransferOrderLine Object ​

FieldTypeNullableDescription
idstring (uuid)NoUnique line identifier
transferOrderIdstring (uuid)NoParent transfer order ID
stockReferenceIdstring (uuid)YesAssociated stock reference
labelstringYesDisplay label
skustringYesStock keeping unit
referencestringYesProduct reference code
limitUsageDatestring (ISO 8601)YesExpiry date
batchNumberstringYesBatch / lot number
expectedQuantityintegerNoDeclared quantity from supplier
receivedQuantityintegerYesTotal quantity received
restockedQuantityintegerYesQuantity placed into available stock
garbageQuantityintegerYesQuantity discarded (damaged/expired)
metaobjectYesArbitrary metadata (JSON)
stateenumNoLine state: ACTIVE or CANCELED

Full JSON Payload Sample ​

json
{
  "header": {
    "organizationId": "a1b2c3d4-e5f6-7890-abcd-ef1234567890",
    "messageId": "g8h9i0j1-k2l3-4567-mnop-890123456789",
    "webhookId": "c3d4e5f6-a7b8-9012-cdef-123456789012",
    "type": "transfer_order/completed",
    "date": "2024-03-26T15:45:00.000Z"
  },
  "body": {
    "id": "d4e5f6a7-b8c9-0123-defa-234567890123",
    "organizationId": "a1b2c3d4-e5f6-7890-abcd-ef1234567890",
    "locationId": "e5f6a7b8-c9d0-1234-efab-345678901234",
    "supplierId": "f6a7b8c9-d0e1-2345-fabc-456789012345",
    "state": "COMPLETED",
    "orderNumber": "TO-2024-001234",
    "externalReference": "SUPP-PO-98765",
    "shippingDate": "2024-03-20T00:00:00.000Z",
    "expectedDate": "2024-03-25T00:00:00.000Z",
    "carrier": "DHL Freight",
    "tracking": "1234567890123456",
    "comment": null,
    "emergency": false,
    "containerNumber": 2,
    "containerType": "PALLET",
    "createdAt": "2024-03-15T10:23:45.000Z",
    "issuedAt": "2024-03-15T10:23:45.000Z",
    "updatedAt": "2024-03-26T15:45:00.000Z",
    "lines": [
      {
        "id": "a7b8c9d0-e1f2-3456-abcd-567890123456",
        "transferOrderId": "d4e5f6a7-b8c9-0123-defa-234567890123",
        "stockReferenceId": "b8c9d0e1-f2a3-4567-bcde-678901234567",
        "label": "T-Shirt Blanc Taille M",
        "sku": "TSHIRT-WHITE-M",
        "reference": "TSH-WH-M-001",
        "limitUsageDate": null,
        "batchNumber": null,
        "expectedQuantity": 100,
        "receivedQuantity": 98,
        "restockedQuantity": 95,
        "garbageQuantity": 3,
        "meta": null,
        "state": "ACTIVE"
      },
      {
        "id": "c9d0e1f2-a3b4-5678-cdef-789012345678",
        "transferOrderId": "d4e5f6a7-b8c9-0123-defa-234567890123",
        "stockReferenceId": null,
        "label": "Pantalon Bleu Taille 38",
        "sku": "PANTS-BLUE-38",
        "reference": "PNT-BL-38-001",
        "limitUsageDate": null,
        "batchNumber": "BATCH-2024-Q1",
        "expectedQuantity": 50,
        "receivedQuantity": 50,
        "restockedQuantity": 50,
        "garbageQuantity": 0,
        "meta": null,
        "state": "ACTIVE"
      }
    ]
  }
}

Notes ​

  • The lines payload reflects the final reconciliation: expectedQuantity vs receivedQuantity.
  • restockedQuantity + garbageQuantity should equal receivedQuantity when reception is complete.
  • Discrepancies between expectedQuantity and receivedQuantity are normal and should be tracked by your integration.
  • Stock levels at locationId are updated in real-time as reception progresses; the completed event signals the final state.

HappyColis API Documentation