Skip to main content
The External AI agent node delegates the conversation to an agent you host outside Jelou. With the HTTP (Jelou contract) provider (http_sync), Jelou sends a POST to your agent’s URL on every turn and expects a JSON reply in an exact format. This guide describes that format, with examples you can copy.
The same format applies to an HTTP agent deployed on Amazon Bedrock AgentCore: what your handler returns is what Jelou validates.

What your agent receives

Jelou sends a POST with content-type: application/json, the credential headers you configured and, if enabled, the request signature. The body looks like this:

What your agent must reply

Reply with HTTP 200 and JSON. The reply is strict: any field not in this table is rejected. Rules by status: failed and timed_out require error and outputs: []; blocked requires outputs: []; action_required requires an action_required signal.
The names must be exactly status and outputs. Jelou does not accept aliases such as output, messages, result or turnStatus.

outputs parts

Signals (signals)

Example replies

Minimal reply

It is equivalent to sending the full form:

With choices

Hand off to an agent

Save variables and end

Error on the agent side

The node leaves through agent_failed.

HTTP status codes

If your agent answers with a non-2xx status the turn fails: 401 and 403 as auth, 404 and 410 as not_active, 429 as rate_limited, and 408, 504 or 5xx as provider_error. 429 and 5xx are retried if you configured retries.

What happens when the reply breaks the format

The turn fails with code malformed and the message says what to fix, using field names and paths only (never values). For example:
You can read the message in externalAgent.error.message of the node result in the execution or in the test.

Example: HTTP handler on Amazon Bedrock AgentCore (Python)

It reads the user’s message from input.parts and returns a valid reply. The function’s return value is the JSON body of the response.