Skip to main content
POST
/
v1
/
agents
/
{agent_id}
/
invoke
/
async
curl --request POST \
  --url https://api.xpander.ai/v1/agents/{agent_id}/invoke/async \
  --header 'Content-Type: application/json' \
  --header 'x-api-key: <api-key>' \
  --data '
{
  "input": {
    "text": "What is xpander.ai?",
    "user": {
      "id": "user-uuid",
      "email": "user@example.com"
    }
  }
}
'
{
  "id": "87b81bf7-7777-456e-805d-2767da39c62d",
  "agent_id": "47c3b020-9a6b-4699-8d94-d92d71929b53",
  "organization_id": "91fbe9bc-35b3-41e8-b59d-922fb5a0f031",
  "status": "pending",
  "result": null,
  "created_at": "2026-04-10T19:01:35.114410Z",
  "finished_at": null,
  "source": "api"
}
Invoke an agent asynchronously. Returns immediately with a task ID and status: "pending". Poll the Get Task endpoint to check when results are ready. Use this for long-running tasks, background processing, or when you don’t want to block a request.

Path Parameters

agent_id
string
required
Agent ID (UUID)

Request Body

The request body is identical to Invoke Agent (Sync).
  • input.text is required
  • input.user.id is required
  • input.user.email is required
  • user_oidc_token is optional for MCP OAuth-backed tools
input
object
required
user_oidc_token
string
Optional OIDC token for MCP OAuth-authenticated tools.
id
string
Thread ID for multi-turn conversations. Pass the id from a previous task to continue the conversation.
disable_attachment_injection
boolean
default:"false"
When true, files in input.files are not injected into the LLM context window. See Invoke Sync: Processing Files.
think_mode
string
default:"default"
default or harder. Controls reasoning depth.
instructions_override
string
Additional instructions appended to the system prompt for this invocation only.
expected_output
string
Natural-language description of desired output

Query Parameters

version
string
Agent version to invoke. Defaults to latest deployed. Use "draft" to test undeployed changes.

Response

Returns immediately with the task object in pending state.
id
string
Task ID — use this to poll for results via Get Task
status
string
Always pending on initial return. Transitions to executingcompleted (or failed/error).
result
string | null
null until the task completes

Basic Example

curl -s -X POST "https://api.xpander.ai/v1/agents/<agent-id>/invoke/async" \
  -H "Content-Type: application/json" \
  -H "x-api-key: <your-api-key>" \
  -d '{"input": {"text": "Analyze competitor pricing for Q1 2026"}}'
Response (immediate):
{
  "id": "81250b20-e9d7-4b3b-9995-07dc72b4bb59",
  "agent_id": "<agent-id>",
  "status": "pending",
  "result": null,
  "created_at": "2026-02-07T02:13:26.325626Z"
}

Polling for Results

# 1. Start the async task
TASK_ID=$(curl -s -X POST "https://api.xpander.ai/v1/agents/<agent-id>/invoke/async" \
  -H "Content-Type: application/json" \
  -H "x-api-key: <your-api-key>" \
  -d '{"input": {"text": "Generate a market report"}}' | jq -r '.id')

echo "Task started: $TASK_ID"

# 2. Poll until done
while true; do
  RESPONSE=$(curl -s "https://api.xpander.ai/v1/tasks/$TASK_ID" \
    -H "x-api-key: <your-api-key>")

  STATUS=$(echo "$RESPONSE" | jq -r '.status')
  echo "Status: $STATUS"

  if [ "$STATUS" = "completed" ] || [ "$STATUS" = "failed" ] || [ "$STATUS" = "error" ]; then
    echo "$RESPONSE" | jq -r '.result'
    break
  fi

  sleep 2
done

Example Response (After Completion)

Poll the task after it finishes to get the full result:
{
  "id": "81250b20-e9d7-4b3b-9995-07dc72b4bb59",
  "agent_id": "<agent-id>",
  "status": "completed",
  "input": {
    "text": "Analyze competitor pricing for Q1 2026",
    "user": null
  },
  "result": "Based on my analysis, the three main competitors...",
  "created_at": "2026-02-07T02:13:26.325626Z",
  "finished_at": "2026-02-07T02:13:41.897000Z",
  "source": "api"
}

Task Status Flow

pendingexecutingcompleted | failed | error | stopped
For multi-turn conversations, always wait for a task to reach completed before sending the next message with the same id. Sending a follow-up while the previous task is still executing may cause unexpected behavior.

See Also

Authorizations

x-api-key
string
header
required

API Key for authentication

Path Parameters

agent_id
string
required

Query Parameters

version
string | null

The agent/workflow version to invoke. default = latest

Body

application/json
input
AgentExecutionInput · object
required
id
string

Pass the id from a previous response to continue a multi-turn conversation with the same agent. Omit for a new conversation.

Example:

"02843b37-4d77-48a0-8da7-2c76afe54401"

Response

Successful Response

id
string

Unique task identifier. Use this to poll for results when invoking async.

Example:

"02843b37-4d77-48a0-8da7-2c76afe54401"

agent_id
string
Example:

"47c3b020-9a6b-4699-8d94-d92d71929b53"

organization_id
string
Example:

"91fbe9bc-35b3-41e8-b59d-922fb5a0f031"

status
enum<string>

pending | executing | completed | error

Available options:
pending,
executing,
completed,
error,
failed,
stopped
Example:

"completed"

result
string | null

The agent's response. Populated when status is 'completed'. Null for async until polling shows completed.

Example:

"Hello! 👋"

created_at
string<date-time>
Example:

"2026-04-10T19:01:22.898813Z"

finished_at
string<date-time> | null

Null until the task completes.

Example:

"2026-04-10T19:01:33.120590Z"

source
string
Example:

"api"