Skip to content

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.

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>

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">&lt;?xml version="1.0" encoding="windows-1252"?&gt;&lt;EoCustomLinkStoreOrdersNormal Type="TEoCustomLinkStoreOrdersNormal"&gt;…the payload above, entity-escaped…&lt;/EoCustomLinkStoreOrdersNormal&gt;</ARequest>
</m:ExecuteRequest>
</SOAP-ENV:Body>
</SOAP-ENV:Envelope>

Escape the payload, build the envelope, POST it. Credentials come from environment variables — never hard-code them:

Terminal window
PAYLOAD_ESCAPED=$(sed 's/&/\&amp;/g; s/</\&lt;/g; s/>/\&gt;/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.xml

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">&lt;?xml version="1.0" encoding="windows-1252"?&gt;&lt;EoCustomLinkResponseOrdersNormal Type="TEoCustomLinkResponseOrdersNormal"&gt;…&lt;/EoCustomLinkResponseOrdersNormal&gt;</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 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.