Architect Data Action hard timeout at 3s despite config change

Running into a wall with a custom Data Action in Architect. The endpoint is a simple internal REST call that usually returns in under 100ms, but occasionally it hits 4-6 seconds due to database lock contention on the backend.

I’ve set the timeout in the Data Action config to 10000ms (10s). I even tried bumping it to 30000ms just to be sure. But the flow consistently fails with a TIMEOUT error after exactly 3000ms. It feels like there’s a hard-coded ceiling I’m missing.

Here’s the JSON config for the action:

{
 "name": "GetInventoryStatus",
 "type": "External",
 "uri": "https://internal-api.example.com/inventory/{sku}",
 "method": "GET",
 "timeout": 10000,
 "headers": {
 "Authorization": "Bearer {{token}}"
 }
}

The error log in the flow trace shows:
Data Action execution failed: Request timed out after 3000ms

I’ve checked the API Gateway logs and the request does reach the backend, but Architect kills it before the response comes back. Is the timeout field in the Data Action definition actually respected? Or is there a global setting in the platform admin console that caps external calls at 3 seconds?

Tried restarting the flow environment too. No luck.

Architect imposes a hard limit on Data Action timeouts, a deliberate design decision to prevent the flow engine from indefinite hangs. The maximum timeout for synchronous actions is 3000ms, irrespective of the value configured in the Data Action definition - the UI slider is misleading in this regard.

If your backend call consistently exceeds 3 seconds, decoupling is essential. Consider these approaches:

  1. Initiate the action from a Script in Architect rather than directly within the flow. Scripts offer greater flexibility in handling longer-running requests.
  2. Explore the use of Asynchronous Data Actions, if your integration supports callback mechanisms. This allows the flow to continue while the Data Action completes in the background.

As a workaround within Architect, break down the logic. Invoke a Script that manages the long-running request via a Proxy. Architect Scripts do not share the 3-second ceiling for outbound HTTP calls.

// Architect Script Snippet
async function fetchInventory(sku) {
 try {
 const response = await client.request({
 method: 'GET',
 url: `https://internal-api.example.com/inventory/${sku}`,
 headers: {
 "Authorization": "Bearer {{token}}"
 }
 });
 return response.body;
 } catch (error) {
 return { error: error.message };
 }
}

Alternatively, investigate the root cause of the database lock contention. Four to six seconds is suboptimal for real-time interaction processing. You might also look at configuring timeout settings at the Proxy level to see if that affects the behaviour.

3 Likes