Order intake example
A complete, worked StoreOrdersNormal example: a Custom Link request that
creates one order with one good, a pickup task and a delivery task (linked to
that good via GoodsToTasks), and a representative response.
For the workflow (manual + n8n) see the Order intake guide; for the envelope mechanics and authentication see the SOAP overview; for the smallest possible call see the server time example.
The payload
Section titled “The payload”Orders are stored with an EoCustomLinkStoreOrdersNormal payload, grounded in
GdxEoStructures.xsd. Save it as store-orders-normal.xml:
<?xml version="1.0" encoding="windows-1252"?><EoCustomLinkStoreOrdersNormal Type="TEoCustomLinkStoreOrdersNormal"> <ApplyImportSettings>1</ApplyImportSettings> <Data Type="TEoOrderMxList"> <_TEoListBase_Items> <EoOrderMx Type="TEoOrderMx"> <OrderId Type="TEoKeyIntInfraMx"><Id>-1</Id></OrderId> <ClientNumber>1001</ClientNumber> <Reference>PO-2026-00042</Reference> <Contact>Jan de Vries</Contact> <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> <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> <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> <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>The envelope
Section titled “The envelope”Like every Custom Link call, the payload is sent entity-escaped in the
ARequest parameter of the single ExecuteRequest operation
(how calls work):
<?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>YOUR_SOAP_NAME</UserName> <Password>YOUR_SOAP_PASSWORD</Password> </h:TAuthenticationHeader> </SOAP-ENV:Header> <SOAP-ENV:Body> <m:ExecuteRequest xmlns:m="urn:UCoSoapDispatcherCustomLink-ICustomLinkSoap"> <ARequest xsi:type="xsd:string"><?xml version="1.0" encoding="windows-1252"?><EoCustomLinkStoreOrdersNormal Type="TEoCustomLinkStoreOrdersNormal">…the payload above, entity-escaped…</EoCustomLinkStoreOrdersNormal></ARequest> </m:ExecuteRequest> </SOAP-ENV:Body></SOAP-ENV:Envelope>Sending it with curl
Section titled “Sending it with curl”Escape the payload, build the envelope, POST it. Credentials come from environment variables — never hard-code them:
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.xmlResponse
Section titled “Response”The service answers with the result XML entity-escaped inside return:
<?xml version="1.0"?><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" xmlns:SOAP-ENC="http://schemas.xmlsoap.org/soap/encoding/"> <SOAP-ENV:Body SOAP-ENV:encodingStyle="http://schemas.xmlsoap.org/soap/encoding/" xmlns:NS1="urn:UCoSoapDispatcherCustomLink-ICustomLinkSoap"> <NS1:ExecuteRequestResponse> <return xsi:type="xsd:string"><?xml version="1.0" encoding="windows-1252"?><EoCustomLinkResponseOrdersNormal Type="TEoCustomLinkResponseOrdersNormal">…</EoCustomLinkResponseOrdersNormal></return> </NS1:ExecuteRequestResponse> </SOAP-ENV:Body></SOAP-ENV:Envelope>Unescaped, the return payload contains the stored order(s) with the
assigned (positive) ids replacing the negative placeholders you sent:
<?xml version="1.0" encoding="windows-1252"?><EoCustomLinkResponseOrdersNormal Type="TEoCustomLinkResponseOrdersNormal"> <Data Type="TEoOrderMxList"> <_TEoListBase_Items> <EoOrderMx Type="TEoOrderMx"> <OrderId Type="TEoKeyIntInfraMx"><Id>48213</Id></OrderId> <Reference>PO-2026-00042</Reference> <Goods Type="TEoGoodMxList"> <_TEoListBase_Items> <EoGoodMx Type="TEoGoodMx"> <GoodId Type="TEoKeyIntInfraMx"><Id>55031</Id></GoodId> <Comments>2 pallets general cargo</Comments> </EoGoodMx> </_TEoListBase_Items> </Goods> <Tasks Type="TEoTaskMxList"> <_TEoListBase_Items> <EoTaskMx Type="TEoTaskMx"> <TaskId Type="TEoKeyIntInfraMx"><Id>91011</Id></TaskId> <ReferenceYour>PICKUP-42</ReferenceYour> </EoTaskMx> <EoTaskMx Type="TEoTaskMx"> <TaskId Type="TEoKeyIntInfraMx"><Id>91012</Id></TaskId> <ReferenceYour>DELIVERY-42</ReferenceYour> </EoTaskMx> </_TEoListBase_Items> </Tasks> <GoodsToTasks Type="TEoGoodToTaskMxList"> <_TEoListBase_Items> <EoGoodToTaskMx Type="TEoGoodToTaskMx"> <GoodId Type="TEoKeyIntInfraMx"><Id>55031</Id></GoodId> <TaskId Type="TEoKeyIntInfraMx"><Id>91011</Id></TaskId> </EoGoodToTaskMx> <EoGoodToTaskMx Type="TEoGoodToTaskMx"> <GoodId Type="TEoKeyIntInfraMx"><Id>55031</Id></GoodId> <TaskId Type="TEoKeyIntInfraMx"><Id>91012</Id></TaskId> </EoGoodToTaskMx> </_TEoListBase_Items> </GoodsToTasks> </EoOrderMx> </_TEoListBase_Items> </Data></EoCustomLinkResponseOrdersNormal>Match your ReferenceYour / Reference values to correlate the returned ids
back to what you sent.
Errors
Section titled “Errors”Errors come in two layers.
Custom Link exceptions — wrong credentials, unknown ClientNumber,
validation failures. The HTTP status is still 200 and the SOAP response is
still an ExecuteRequestResponse, but the return payload is a
TEoCustomLinkException:
<?xml version="1.0" encoding="windows-1252"?><EoCustomLinkException Type="TEoCustomLinkException"> <ExceptionClassName>EWrongUserPassword</ExceptionClassName> <ExceptionMessage>401: Unauthorized for …/api/account/login-custom-link</ExceptionMessage></EoCustomLinkException>Always check the unescaped return payload for TEoCustomLinkException
before parsing it as a result.
SOAP faults — a malformed request, such as POSTing the bare payload
without the ExecuteRequest envelope:
<SOAP-ENV:Envelope xmlns:SOAP-ENV="http://schemas.xmlsoap.org/soap/envelope/"> <SOAP-ENV:Body> <SOAP-ENV:Fault> <faultcode>SOAP-ENV:Server</faultcode> <faultstring>Invalid SOAP request</faultstring> <faultactor/> </SOAP-ENV:Fault> </SOAP-ENV:Body></SOAP-ENV:Envelope>Validate payloads against GdxEoStructures.xsd before
sending.
- Read Custom Link: rules of engagement for the retrieve-before-update and one-order-per-call rules this example builds on.