Autonomous Agents
An autonomous agent is an assistant that no visitor talks to: another system starts it by calling a webhook, for example when an invoice becomes overdue or a payment fails. The agent reads the call’s JSON body through its prompt, does the work with the tools, instructions and settings of a widget you choose, and returns its answer to the caller. The Agents tab of the Autonomous Agents page is where you create these agents, write their prompt, copy the requests that trigger them, and follow their runs. Open it from ConfigureAutonomous Agents. Every signed-in user of your workspace can view it; creating, changing and deleting agents needs the Admin role.
What you can do here
Section titled “What you can do here”- See your agents at a glance. One card per agent, with its status and its number of runs. The screen at a glance.
- Create an agent. Give it a name, a widget whose tools and settings it uses, a response mode and a prompt. Create an agent.
- Fill the prompt from the webhook body. Paste an example body and insert its fields as
{{payload.…}}variables. Write the prompt. - Get the webhook details. The webhook panel shows the agent’s address and ready-made requests for every step. Use the webhook panel · Autonomous agents end to end.
- Follow runs and read their output. The last 20 runs with their status, customer, error and output. Follow the runs.
- Pause or delete an agent. An inactive agent refuses webhook calls; deleting removes it and its run history. Pause or delete an agent.
The screen at a glance
Section titled “The screen at a glance”

What this screenshot shows
- Screen
- Agents (/admin/configure/autonomous-agents)
- Highlighted
- button “New”, panel-header-right, enabled. opens the create form
- Also visible
- Overdue invoice follow-up (Active, 184 runs), Weekly usage digest (Active, 22 runs), Failed payment triage (Disabled, 7 runs)
- Purpose
- entry point
| Region | What it shows | What you do there |
|---|---|---|
| Header | Autonomous Agents and Trigger an agent from an external system with a webhook. | — |
| Tabs | Agents (selected) and Access tokens | Switch to the per-user tokens |
| Agents | One card per agent: name, Active or Disabled, and {{count}} runs; a refresh icon and New | Open an agent, reload, create one |
Without any agent, the list shows No autonomous agents yet.. Selecting a card opens the agent’s editor; Back to agents returns to the cards.
What a run does
Section titled “What a run does”When a webhook call reaches an active agent:
- StrikeUp checks the per-user token in the call and fills the agent’s prompt from the call’s JSON body.
- It starts a run, attributed to the end-user the token belongs to. The run gets its own chat session, named after the agent with the date and time, and a job with the trigger
Webhookthat you can follow under AnalyticsAgent jobs. - The agent works through the normal pipeline of its widget: guardrails, planning, the widget’s main toolkit, its skills and instructions, and the widget’s budgets.
- In Async (202) mode the caller gets a run ID at once and collects the result later. In Synchronous (200) mode the caller waits for the answer.
The token’s end-user must be a customer in your workspace with a PIN or password. Tokens are created through the API and listed on the Access tokens tab; see Autonomous agents: access tokens.
Create an agent
Section titled “Create an agent”-
Open ConfigureAutonomous Agents and select New. An empty form opens.
-
Enter a Name, such as Overdue invoice follow-up, and choose the Widget whose tools, skills and instructions the agent should use.
-
Choose the Response mode: Async (202) (the default) or Synchronous (200).
-
Write the Prompt, as described under Write the prompt.


A new agent needs a name, a widget and a prompt; the webhook details appear once it is created. What this screenshot shows
- Screen
- Create agent (/admin/configure/autonomous-agents)
- Highlighted
- button “Create agent”, form-footer, enabled. creates the agent
- Also visible
- Name Trial ending reminder, Widget Demo Ltd Help Centre widget, Async (202)
- Purpose
- creating an agent
-
Select Create agent. The notice Agent created appears, and the webhook panel and the run list appear under the form.
A new agent is active. If a field is missing, the form shows Name is required., Select a widget. or Prompt is required.. If saving fails for another reason, the server’s message appears above the buttons, or Could not save the agent. Please try again..
Choose a widget with a toolkit. When the chosen widget has no toolkit connected, the form shows a warning. Runs of such an agent fail with “Server ID is required”, so connect a toolkit to the widget, or pick another widget, before you use the agent.
Write the prompt
Section titled “Write the prompt”The prompt tells the agent what to do with each call. Values from the call’s JSON body go in as variables with double braces: {{payload.invoiceNumber}} is replaced with the body’s invoiceNumber field when the run starts.


What this screenshot shows
- Screen
- Agents (/admin/configure/autonomous-agents)
- Highlighted
- combobox “”, form-top-right, Async (202). chooses whether the webhook waits for the answer
- Also visible
- Name, Widget Demo Ltd Support chat, Active on; Prompt with {{payload.*}} variables
- Purpose
- editing an agent
-
Paste an example of the webhook body into Sample payload JSON. If it is not valid JSON, the editor shows That isn't valid JSON — check for a missing quote, comma, or bracket.
-
Under Fields from your sample payload, select a field. Its variable is inserted into the prompt where the cursor is.


Paste an example webhook body and its fields become buttons that insert {{payload…}} variables into the prompt. What this screenshot shows
- Screen
- Agents (/admin/configure/autonomous-agents)
- Highlighted
- button “”, prompt-editor, enabled. inserts the variable into the prompt
- Also visible
- Sample payload JSON filled; field buttons for invoiceNumber, customerName, daysOverdue, amount.value, amount.currency
- Purpose
- building the prompt from webhook data
-
For a field that is not in your example, type its path in the path box, such as
payload.customer.email, and select Insert variable.
| In the prompt | Body | Replaced with |
|---|---|---|
{{payload.invoiceNumber}} | {"invoiceNumber": "INV-2026-0412"} | INV-2026-0412 |
{{payload.amount.value}} | {"amount": {"value": 1290}} | 1290 |
{{payload.items[0].sku}} | {"items": [{"sku": "ABC-1"}]} | ABC-1 |
{{payload.dueDate}} | {"invoiceNumber": "INV-2026-0412"} (no dueDate) | Nothing: the variable becomes empty |
{{payload.invoiceNumber}} | Not valid JSON | The prompt is used unchanged |
{payload.invoiceNumber} with single braces | Any | Not replaced; the text stays as typed |
- Values are marked as data. Each inserted value is wrapped in markers, and the agent is told that marked text is data from the webhook, not instructions. A body that says ignore your instructions is treated as text to read, not as an order.
- Long values are cut. Each value is limited to 4,000 characters and ends with ” …[truncated]” when longer.
- The whole body is limited to 64 KB. A larger call is refused.
- The hints under the prompt show examples with single braces; always use double braces.
| Do | Don’t |
|---|---|
| Say what the agent should do and what it should return: “Check the invoice with getInvoice and draft a reminder for the billing contacts.” | Leave the task to be guessed from the data |
| Name the fields you rely on, so a missing field shows up as an empty value you notice | Rely on fields that only some callers send |
| Say what not to do: “Do not issue refunds.” | Rely on the agent to infer limits |
Use the webhook panel
Section titled “Use the webhook panel”The Webhook panel appears below the form once the agent is saved. It follows the response mode currently selected in the form, even before you save it.


What this screenshot shows
- Screen
- Webhook (/admin/configure/autonomous-agents)
- Highlighted
- button “Copy”, webhook-endpoint, enabled. copies the endpoint URL
- Also visible
- Endpoint URL /api/autonomous/hook/{companyId}/{agentId} (local test host in samples); Step 1 sign-in request
- Purpose
- wiring the external system
| Part | What it gives you |
|---|---|
| Endpoint URL and Copy | The agent’s address. Copy the URL shown in the panel; it ends in /api/autonomous/hook/ followed by your workspace ID and the agent’s ID. |
| Every call needs a per-user token in the Authorization header (or the X-Autonomous-Token header). A company admin signs in (step 1), then generates one (step 2). | Every call needs a per-user token |
| 1. Sign in as a company admin, Copy sign-in | A ready-made sign-in request for a company admin. The admin token it returns lasts about an hour. |
| 2. Generate a token (company admin), Copy exchange | The request that creates a per-user token from an end-user’s PIN or password, with your workspace ID filled in |
| 3. Trigger the agent, Copy curl | A ready-made call to the agent. Use the token you generated in step 2 as the Bearer <token>. |
| 4. Get the result, Copy status request | Asynchronous agents only: the request that collects the result of a run |
| Prefer not to poll? Send an X-Callback-Url header with the trigger in step 3 and we POST the same result to that HTTPS URL as soon as the run finishes. | Asynchronous agents only: how to receive the result at your own HTTPS address instead |
Each copy button puts the text on your clipboard and shows Copied to clipboard. The full sequence, with responses and error codes, is in Autonomous agents end to end.
Follow the runs
Section titled “Follow the runs”Recent runs at the bottom of the editor lists the agent’s last 20 runs, newest first.


What this screenshot shows
- Screen
- Recent runs (/admin/configure/autonomous-agents)
- Highlighted
- “”, runs-table, failed run. none
- Also visible
- Running, Waiting for approval, Completed and Failed runs with customer IDs
- Purpose
- monitoring runs
| Status | Meaning |
|---|---|
| Pending | Accepted, not started yet |
| Running | The agent is working |
| Completed | Finished; the output is ready |
| Failed | Stopped with an error, shown under Error |
| Waiting for approval | The agent reached a tool that needs approval and is waiting for it |
app.autonomousAgents.status.waitingforinput | The agent asked a question and is waiting for a reply; this status shows its internal name |
The Triggered for column appears when at least one run has a customer, and shows the end-user the run is attributed to. Select View output to open Run output:


What this screenshot shows
- Screen
- Run output (/admin/configure/autonomous-agents)
- Highlighted
- “”, dialog-top, completed run. none
- Also visible
- Agent output with a draft payment reminder
- Purpose
- reading a run's result
- A finished run shows Completed in {{duration}} and the agent’s answer, the same text the caller receives.
- A run still in progress shows This run is still in progress. Check back shortly.
- A run with no answer shows This run produced no output.
- If the output cannot be loaded: Could not load the run output. Please try again.
When every AI provider fails, the run fails with “The assistant is temporarily unavailable. Please try again shortly.” as its error. Each run is also a job under AnalyticsAgent jobs, with its steps and events.
Pause or delete an agent
Section titled “Pause or delete an agent”-
Open the agent. To pause it, switch Active off and select Save: Inactive agents reject webhook calls with 403. Its card then shows Disabled.
-
To delete it, select Delete agent above the form. The popover warns: This permanently deletes the agent and its run history. This cannot be undone. Confirm with Delete agent.
A paused agent keeps its settings and its runs; callers that poll a run they started still get its status. Deleting removes the agent and its run list; the chat sessions and jobs its runs created stay where they are. Callers of a deleted agent get “Agent not found”.
Every control, explained
Section titled “Every control, explained”New and refresh
Section titled “New and refresh”At the right of the Agents header: a refresh icon and New.
Refresh reloads the cards and their run counts. New opens an empty agent form.
Run counts change with every webhook call; refresh to see them.
The first field of the form, Name.
Required, up to 255 characters. Shown on the card, in the run’s chat session name and in usage reports.
A name that says what triggers the agent, such as e.g. Order shipped notifier, makes jobs and spend easy to read.
Widget
Section titled “Widget”Widget, a drop-down of your widgets. Required.
The agent uses this widget’s main toolkit, skills, instructions, guardrails and budgets. A widget without a toolkit shows a warning, and runs on it fail.
You configure an agent’s abilities once, on a widget, and reuse them.
Response mode
Section titled “Response mode”Response mode, below the widget. Saved with the form.
Async (202) (default): the call returns at once with a run ID; the caller collects the result or receives it at a callback address. Synchronous (200): the call waits up to 6 minutes and returns the answer. A caller can also ask an asynchronous agent to wait for one call.
Short tasks are simplest synchronously; long tasks and tasks that may wait for an approval should be asynchronous.
Active
Section titled “Active”Active, shown when editing a saved agent. Saved with the form.
Inactive agents reject webhook calls with 403. The webhook’s error reads “Agent is disabled”.
Stop an agent without losing it, for example while you change the system that calls it.
Prompt and sample payload
Section titled “Prompt and sample payload”Prompt, with Sample payload JSON, the field buttons and the path box below it.
The prompt is required. {{payload.path}} variables are filled from the call’s body; the sample only helps you insert them and is not used in runs.
Inserting fields from a real example avoids typing paths wrong.
Save, Create agent, Delete agent and Back to agents
Section titled “Save, Create agent, Delete agent and Back to agents”Below the form: Create agent for a new agent, Save for a saved one. Above the form: Back to agents and, for a saved agent, Delete agent.
Saving shows Agent created or Agent updated. Deleting asks first and shows Agent deleted.
Changes apply to the next webhook call; runs already started keep the prompt they started with.
Recent runs and View output
Section titled “Recent runs and View output”Recent runs at the bottom of the editor, with View output on each row.
The last 20 runs with Status, Started, Completed, Triggered for, Error and Output. Without runs: No runs yet.
Check what an agent did without opening the system that called it.
What you need to know
Section titled “What you need to know”| Topic | Fact |
|---|---|
| Trigger | A webhook call only; there is no schedule for autonomous agents. |
| Tokens | Every call needs a per-user token. One token works for every agent in the workspace. |
| Body | JSON, up to 64 KB; each inserted value up to 4,000 characters. |
| Variables | {{payload.path}} with double braces; a missing field becomes empty. |
| Synchronous waiting | Up to 6 minutes. |
| Rate limit | 5 runs per end-user per minute; more are refused until the minute has passed. One calling address can also make at most 300 calls per minute to your workspace, run starts and status checks together. |
| Runs listed | The last 20 per agent; all runs are also jobs under Agent jobs. |
| Cost | Every run’s calls to AI models are attributed to the agent and the end-user, and count towards the widget’s and the workspace’s budgets. |
| Memory | Runs do not read or write the end-user’s chat memory. |
| Deleting | Removes the agent and its run list, not the chat sessions or jobs. |
Frequently asked questions
Section titled “Frequently asked questions”Setting up
Section titled “Setting up”Where do I find the agent’s webhook address?
Section titled “Where do I find the agent’s webhook address?”Open the agent on ConfigureAutonomous Agents. The Webhook panel below the form shows it under Endpoint URL; copy the URL shown in the panel. It appears once the agent has been saved.
Should I choose async or synchronous?
Section titled “Should I choose async or synchronous?”Choose Synchronous (200) for short tasks where the caller can wait for the answer, up to 6 minutes. Choose Async (202) for longer tasks or tasks that may stop for an approval: the call returns a run ID at once, and the caller collects the result or receives it at a callback address.
How do I put data from the webhook into the prompt?
Section titled “How do I put data from the webhook into the prompt?”Use variables with double braces, such as {{payload.invoiceNumber}}, in the Prompt. Paste an example body into Sample payload JSON and select its fields to insert them. Single braces are not replaced.
What happens if a field in the prompt is missing from the body?
Section titled “What happens if a field in the prompt is missing from the body?”The variable is replaced with nothing, and the rest of the prompt runs as written. If the body is not valid JSON, the prompt is used with every variable left as typed. Write prompts that still make sense, or tell the agent to stop, when a value is empty.
Why does every run fail with Server ID is required?
Section titled “Why does every run fail with Server ID is required?”The agent’s widget has no toolkit connected. Autonomous runs need the widget’s toolkit; connect one to the widget under ConfigureToolkits, or choose another widget for the agent, and save.
Running
Section titled “Running”How do I pause an agent?
Section titled “How do I pause an agent?”Open it, switch Active off and save. Webhook calls are then refused with HTTP 403 and “Agent is disabled”. Its settings and runs are kept, and switching it on again restores it at once.
Can one end-user start many runs at once?
Section titled “Can one end-user start many runs at once?”Up to 5 runs per end-user per minute. Further calls in the same minute are refused with HTTP 429 and a Retry-After header, so the calling system can wait and try again. Separately, one calling address can make at most 300 calls per minute to your workspace, run starts and status checks together; over that, calls get HTTP 429 “Too many requests. Please wait a minute and try again.” before the token is even checked.
What happens to a run that needs an approval?
Section titled “What happens to a run that needs an approval?”It stops with Waiting for approval when it reaches a tool that requires approval, and continues once the approval is decided. Its job under AnalyticsAgent jobs shows which tool is waiting.
Where do I see what the agent did?
Section titled “Where do I see what the agent did?”View output in Recent runs shows the answer and how long it took. The run’s job under AnalyticsAgent jobs shows its steps, approvals and events.
How many runs are listed?
Section titled “How many runs are listed?”Recent runs lists the last 20 runs of the agent. The card shows the total number of runs, and every run, including older ones, is a job under AnalyticsAgent jobs.
Data and cost
Section titled “Data and cost”Does deleting an agent delete its runs?
Section titled “Does deleting an agent delete its runs?”Deleting removes the agent and its run list, after the confirmation This permanently deletes the agent and its run history. This cannot be undone. The chat sessions and jobs its runs created are separate records and stay. Callers of the deleted agent get “Agent not found”.
Do runs count towards budgets and AI spend?
Section titled “Do runs count towards budgets and AI spend?”Yes. Each run’s calls to AI models are attributed to the agent and to the end-user of the token, appear on DashboardAI Spend by autonomous agent and by customer, and count towards the budgets covering the widget, the customer company and the workspace.
Who can create autonomous agents?
Section titled “Who can create autonomous agents?”Users with the Admin role. Every other signed-in user of your workspace can view agents and their runs, but their changes fail with “This action requires the Admin role.” The page has no feature switch, and agents are shared by the whole workspace.
Troubleshooting
Section titled “Troubleshooting”| Symptom | What to check |
|---|---|
| Runs fail with “Server ID is required” | The widget has no toolkit. Connect one or choose another widget. |
| That isn't valid JSON — check for a missing quote, comma, or bracket. | The sample body is not valid JSON. Check quotes, commas and brackets. |
| A variable stays in the output as typed | It uses single braces, or a path that does not exist. Use {{payload.path}}. |
| Callers get HTTP 403 “Agent is disabled” | Switch Active on and save. |
| Callers get HTTP 401 “Missing access token” or “Invalid access token” | The call has no token, or the token was revoked or mistyped. See the Access tokens tab. |
| Callers get HTTP 429 “Too many runs for this customer in the last minute.” | More than 5 runs for one end-user in a minute. Wait for the Retry-After time. |
| Callers get HTTP 429 “Too many requests. Please wait a minute and try again.” | More than 300 calls in a minute from one calling address to your workspace; run starts and status checks count together. Wait for the Retry-After time and poll less often. |
| A run stays Waiting for approval | A tool needs approval. Check the job’s approvals under Agent jobs. |
| A run failed with “The assistant is temporarily unavailable” | Every AI model failed. Check the connectors’ health and try again. |
| Could not save the agent. Please try again. | Check the message above the buttons, fill in every required field and save again. |
| A change fails with Request failed and “This action requires the Admin role.” | Changes on this page need the Admin role. Ask an Admin to make the change, or to give you the Admin role under Settings › Users. |