Order intake
Order intake means pushing orders from your system into MendriX. Today this
goes through the legacy SOAP Custom Link call StoreOrdersNormal — the same
XML on both the manual and the n8n path.
Endpoint
Section titled “Endpoint”https://<your-client-name>.mendrix.cloud:5564/soap/ICustomLinkSoapOperation: StoreOrdersNormal — like every Custom Link call it is sent
through the single ExecuteRequest SOAP operation, with the payload
entity-escaped inside the envelope and the SOAP name/password in the
TAuthenticationHeader header. The WSDL is published at
https://<your-client-name>.mendrix.cloud:5564/wsdl/ICustomLinkSoap.
See the SOAP overview for the envelope mechanics and
authentication, and
the full order-intake example for a complete
request/response pair.
For the fuller field reference on creating orders, see Order intake. For the retrieve-then-update workflow (changing an existing order, not just creating one), see Order update. For efficient polling/retrieval, see Order retrieval & sync.
The order payload
Section titled “The order payload”Orders are described by the EoCustomLinkStoreOrdersNormal structure (defined
in GdxEoStructures.xsd). A new order has OrderId/Id set to
a negative value (negative = insert), a client reference, and three
separate lists: Tasks (the pickup/delivery stops), Goods (the
packages/cargo), and GoodsToTasks (which good moves through which
task — nothing else establishes that link):
<EoCustomLinkStoreOrdersNormal Type="TEoCustomLinkStoreOrdersNormal"> <ApplyImportSettings>1</ApplyImportSettings> <Data Type="TEoOrderMxList"> <_TEoListBase_Items> <EoOrderMx Type="TEoOrderMx"> <!-- Negative Id requests a new order. ClientNumber is resolved to a ClientId automatically when ClientId is not supplied. --> <OrderId Type="TEoKeyIntInfraMx"><Id>-1</Id></OrderId> <ClientNumber>1001</ClientNumber> <Reference>PO-2026-00042</Reference> <Goods Type="TEoGoodMxList"> <_TEoListBase_Items> <EoGoodMx Type="TEoGoodMx"> <GoodId Type="TEoKeyIntInfraMx"><Id>-1</Id></GoodId> <Comments>2 pallets general cargo</Comments> <Parts>2.0</Parts> <Weight>480.0</Weight> </EoGoodMx> </_TEoListBase_Items> </Goods> <Tasks Type="TEoTaskMxList"> <_TEoListBase_Items> <!-- Pickup task --> <EoTaskMx Type="TEoTaskMx"> <TaskId Type="TEoKeyIntInfraMx"><Id>-1</Id></TaskId> <TaskTypeIdEx>1</TaskTypeIdEx> <Address Type="TEoAddress"> <Name>Acme Warehouse</Name> <Street>Havenweg</Street> <Number>12</Number> <PostalCode>3011 XA</PostalCode> <Place>Rotterdam</Place> <CountryCode>NL</CountryCode> </Address> <ContactName>Jan de Vries</ContactName> <Requested Type="TEoDateTimeWindow"> <DateTimeBegin>2026-07-22T08:00:00</DateTimeBegin> <DateTimeEnd>2026-07-22T12:00:00</DateTimeEnd> </Requested> <Instructions>Call on arrival</Instructions> <ReferenceYour>PICKUP-42</ReferenceYour> </EoTaskMx> <!-- Delivery task --> <EoTaskMx Type="TEoTaskMx"> <TaskId Type="TEoKeyIntInfraMx"><Id>-2</Id></TaskId> <TaskTypeIdEx>2</TaskTypeIdEx> <Address Type="TEoAddress"> <Name>Beta Distribution</Name> <Street>Industrieweg</Street> <Number>88</Number> <PostalCode>5651 GH</PostalCode> <Place>Eindhoven</Place> <CountryCode>NL</CountryCode> </Address> <Requested Type="TEoDateTimeWindow"> <DateTimeBegin>2026-07-22T14:00:00</DateTimeBegin> <DateTimeEnd>2026-07-22T17:00:00</DateTimeEnd> </Requested> <ReferenceYour>DELIVERY-42</ReferenceYour> </EoTaskMx> </_TEoListBase_Items> </Tasks> <GoodsToTasks Type="TEoGoodToTaskMxList"> <_TEoListBase_Items> <!-- The good is picked up at the first task and delivered at the second — one GoodsToTasks entry per (good, task) pair it passes through, using the same negative Ids as above. --> <EoGoodToTaskMx Type="TEoGoodToTaskMx"> <GoodId Type="TEoKeyIntInfraMx"><Id>-1</Id></GoodId> <TaskId Type="TEoKeyIntInfraMx"><Id>-1</Id></TaskId> </EoGoodToTaskMx> <EoGoodToTaskMx Type="TEoGoodToTaskMx"> <GoodId Type="TEoKeyIntInfraMx"><Id>-1</Id></GoodId> <TaskId Type="TEoKeyIntInfraMx"><Id>-2</Id></TaskId> </EoGoodToTaskMx> </_TEoListBase_Items> </GoodsToTasks> </EoOrderMx> </_TEoListBase_Items> </Data></EoCustomLinkStoreOrdersNormal>Submit the order
Section titled “Submit the order”There is no REST endpoint for order creation yet (see the callout above).
Submit via SOAP: entity-escape the payload above (saved as
store-orders-normal.xml), wrap it in the ExecuteRequest envelope and POST
it to the Custom Link endpoint:
PAYLOAD_ESCAPED=$(sed 's/&/\&/g; s/</\</g; s/>/\>/g' store-orders-normal.xml)
cat > envelope.xml <<EOF<?xml version="1.0" encoding="utf-8"?><SOAP-ENV:Envelope xmlns:SOAP-ENV="http://schemas.xmlsoap.org/soap/envelope/" xmlns:xsd="http://www.w3.org/2001/XMLSchema" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" SOAP-ENV:encodingStyle="http://schemas.xmlsoap.org/soap/encoding/"> <SOAP-ENV:Header> <h:TAuthenticationHeader xmlns:h="urn:UCoSoapDispatcherBase"> <UserName>$MENDRIX_SOAP_NAME</UserName> <Password>$MENDRIX_SOAP_PASSWORD</Password> </h:TAuthenticationHeader> </SOAP-ENV:Header> <SOAP-ENV:Body> <m:ExecuteRequest xmlns:m="urn:UCoSoapDispatcherCustomLink-ICustomLinkSoap"> <ARequest xsi:type="xsd:string">$PAYLOAD_ESCAPED</ARequest> </m:ExecuteRequest> </SOAP-ENV:Body></SOAP-ENV:Envelope>EOF
curl "https://<your-client-name>.mendrix.cloud:5564/soap/ICustomLinkSoap" \ -H 'Content-Type: text/xml; charset=utf-8' \ -H 'SOAPAction: "urn:UCoSoapDispatcherCustomLink-ICustomLinkSoap#ExecuteRequest"' \ --data-binary @envelope.xmlThe result XML comes back entity-escaped inside the response’s return
element; see the full example for a sample
response and error handling, and the SOAP overview for how
the credentials are supplied.
The n8n path builds the same envelope in a Code node and posts it with an
HTTP Request node — this is the general four-node Custom Link shape
described in Using n8n with Custom Link,
applied to StoreOrdersNormal:
- Add a Manual Trigger (or a Webhook trigger to accept orders from your system).
- Add a Set node named
SOAP credentialswith two fields,soapNameandsoapPassword— the one place to fill in your Custom Link credentials (n8n credentials cannot be injected into a raw XML body; see the server time example). - Add a Code node
Build SOAP envelopethat fills the order fields into theEoCustomLinkStoreOrdersNormalpayload, entity-escapes it and wraps it in theExecuteRequestenvelope with the credentials — the importable workflow below contains the complete code. - Add an HTTP Request node:
- Method:
POST - URL:
https://<your-client-name>.mendrix.cloud:5564/soap/ICustomLinkSoap - Headers:
Content-Type: text/xml; charset=utf-8,SOAPAction: "urn:UCoSoapDispatcherCustomLink-ICustomLinkSoap#ExecuteRequest" - Body Content Type: Raw/Text, body = the envelope from the Code node.
- Response format: leave on the default, Autodetect — forcing Text causes errors against this endpoint.
- Method:
- Add a Code node
Unwrap SOAP responsethat extracts and unescapes thereturnpayload (and fails the run on aTEoCustomLinkException), followed by an XML node to parse the created order id(s).
Importable workflow: order-intake.json.
After the order is created
Section titled “After the order is created”- Track its progress via Order status & track-and-trace.
- Update non-intake fields later using the REST Order endpoints (
PATCH) — see the reference.