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 has a hard limit on Data Action timeouts. It’s not a bug, it’s a design choice to keep the flow engine from hanging. The max is 3000ms for synchronous actions. You can’t override that in the UI config, even if the slider lets you type higher numbers.

If your backend call takes longer than 3 seconds, you need to decouple it. Use an async pattern.

  1. Trigger the action from a Studio script or an external webhook instead of directly in the flow.
  2. Or, use the Async Data Action type if your integration supports callbacks.

For a quick fix in Architect, break the logic. Call a Studio snippet that handles the long-running request via REST Proxy. Studio scripts don’t have that 3s hard ceiling for outbound HTTP calls.

// Studio Script Snippet
async function fetchUserData(userId) {
 const response = await rest.get(`https://api.internal.com/users/${userId}`);
 return response.json();
}

Set the Data Action to call a local endpoint that queues the job, then poll for completion. Or just fix the DB lock. 4-6s is too slow for real-time CTI anyway.

3 Likes