Skip to content

Using n8n with Custom Link

Every Custom Link command — RequestDateTime, StoreOrdersNormal, RequestTracesGoods, and everything else in the command reference — goes through the same single SOAP operation, ExecuteRequest (how calls work). That means every Custom Link workflow in n8n uses the same four-node shape, whatever command you’re calling. This page documents that shape once; individual guides link back here instead of re-explaining it.

Why a Set node instead of an n8n credential

Section titled “Why a Set node instead of an n8n credential”

Custom Link authentication is a UserName/Password pair sent in the TAuthenticationHeader SOAP header, inside the XML envelope itself — not in an HTTP header, the query string, or a JSON body. n8n’s credential system can only inject values into those three places, so it can’t reach inside a raw XML body. The workaround used throughout this portal’s SOAP examples is a plain Set node named SOAP credentials holding two fields (soapUserName, soapPassword) that a later Code node reads and writes into the envelope.

The four-node shape, worked through with the smallest command

Section titled “The four-node shape, worked through with the smallest command”

The smallest possible Custom Link call — asking the TMS for its current date/time — makes a good first import: it confirms your endpoint URL and SOAP credentials work before you build a real integration.

The payload:

<?xml version="1.0" encoding="windows-1252"?>
<EoCustomLinkRequestDateTime Type="TEoCustomLinkRequestDateTime"/>

The envelope — the payload goes entity-escaped into 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;EoCustomLinkRequestDateTime Type="TEoCustomLinkRequestDateTime"/&gt;</ARequest>
</m:ExecuteRequest>
</SOAP-ENV:Body>
</SOAP-ENV:Envelope>

Import soap-server-time.json (Workflows → Import from File), fill in the SOAP credentials node and replace <your-client-name>. The workflow is four nodes:

  1. SOAP credentials (Set node) — two string fields, soapUserName and soapPassword, holding your tenant’s Custom Link credentials. The single place to fill them in per workflow.
  2. Build SOAP envelope (Code node) — constructs the command-specific Eo payload (e.g. EoCustomLinkRequestDateTime, EoCustomLinkStoreOrdersNormal), entity-escapes it (& → &amp;, < → &lt;, > → &gt;), and wraps it in the ExecuteRequest envelope together with the credentials from step 1.
  3. Call ExecuteRequest (HTTP Request node) — POST to https://<your-client-name>.mendrix.cloud:5564/soap/ICustomLinkSoap with Content-Type: text/xml; charset=utf-8 and SOAPAction: "urn:UCoSoapDispatcherCustomLink-ICustomLinkSoap#ExecuteRequest", body = the envelope above (raw/text). Leave Options → Response → Response Format on its default, Autodetect — forcing Text causes errors against this endpoint.
  4. Unwrap the response (Code node) — extracts the return element from the SOAP body, unescapes it, checks for a TEoCustomLinkException before treating it as a successful result, and outputs serverTime.

The response — the result XML comes back 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;EoCustomLinkResponseDateTime Type="TEoCustomLinkResponseDateTime"&gt;
&lt;DateTime&gt;2026-07-22T12:40:13+02:00&lt;/DateTime&gt;
&lt;/EoCustomLinkResponseDateTime&gt;</return>
</NS1:ExecuteRequestResponse>
</SOAP-ENV:Body>
</SOAP-ENV:Envelope>

Unescaped, the return payload is:

<?xml version="1.0" encoding="windows-1252"?>
<EoCustomLinkResponseDateTime Type="TEoCustomLinkResponseDateTime">
<DateTime>2026-07-22T12:40:13+02:00</DateTime>
</EoCustomLinkResponseDateTime>

With wrong credentials you still receive an HTTP 200 SOAP response, but the return payload is a TEoCustomLinkException (ExceptionClassName: EWrongUserPassword) — see errors.

To call a different Custom Link command, only step 2 changes:

  • Replace the Eo payload with the command you need (see the command reference for the full list and GdxEoStructures.xsd for every field).
  • Steps 1, 3, and 4 are identical for every command — the credentials, the endpoint/headers, and the unwrap-and-check-for-exception logic don’t change.

For example, to poll for order status changes instead of creating an order, swap the payload for EoCustomLinkRequestOrdersNormal (see Order retrieval & sync) or EoCustomLinkRequestTracesGoods (see Traces (track & trace)) — this is exactly what Order status & track-and-trace does.