Connect an executor over HTTPS
Publish your executor from a VPS, private server, or managed host and review every network and security requirement.
Set up an executor
- Open your agent and select Customer actions.
- Enter the HTTPS URL that will receive action requests.
- Leave the endpoint off and select Save endpoint.
- Copy the signing secret. Suppio only shows it once.
- Add signature verification to your executor.
- Select Test connection.
- Turn on the endpoint when the test succeeds. The endpoint switch saves immediately.
action.name.
Receive ticket closing notifications
Turn on Ticket closing notifications below Actions to receive a signedticket.resolved event whenever Suppio resolves a Discord ticket through the support agent, /close, or inactivity handling.
This setting reuses the executor URL and signing secret. When it is active, Suppio marks the ticket resolved but leaves the Discord channel in place so your integration can delete, archive, rename, move, or otherwise process it.
If Auto-close tickets is still enabled in Actions, the setting remains Pending. Suppio reminds you every minute until you turn auto-close off. The setting activates automatically afterward. A disabled or deleted executor pauses delivery without clearing your requested setting.
Suppio sends:
source is agent, manual, or inactivity. reason and actor.user_id can be null.
The request uses the same X-Suppio-Timestamp and X-Suppio-Signature headers as customer actions. It also includes X-Suppio-Event-Id, which matches event_id. Return any 2xx response to acknowledge delivery; Suppio ignores the response body.
Store event_id before changing the ticket. Suppio retries retryable failures after 1 minute, 5 minutes, 30 minutes, and 2 hours. Network failures, timeouts, HTTP 408, HTTP 429, and 5xx responses are retryable. Other 4xx responses end delivery.
Define an action
Select Add action and provide:- Tool name: A stable lowercase identifier such as
change_customer_plan. - Display name: The action name shown in Discord confirmations and status messages.
- Description: When the agent should choose the action.
- Additional instructions: Optional rules for choosing the action or filling its arguments.
- Require confirmation: Whether the requesting Discord user must select Confirm before execution. This is on by default.
- Enabled: Whether the action is available to the agent. Keep a new action off until its handler is ready and tested.
- Arguments: The typed values sent to your executor.
format, pattern, numeric limits, $defs, $ref, and anyOf. Switching that action to the form editor requires confirmation because the form removes unsupported keywords.
Import actions
Use Import actions to create several action definitions from one JSON document. This is useful when you want an AI coding agent to inspect your application and generate action definitions that match functions your backend already exposes.- Open your agent and select Customer actions.
- Select Import actions, to the right of Add action.
- Paste the JSON document or select Choose JSON file.
- Review every generated action and argument before importing.
- Select Import actions.
Import document format
The import document must be JSON with exactly two top-level fields:version and actions.
Each action supports only these fields:
The complete import document must be 64 KB or smaller. An agent can have at most 10 actions in total, including actions that already exist. Names must be unique within the document and must not conflict with an existing action.
Imports are create-only and atomic. If one action is invalid, a name conflicts, or the batch would exceed the agent limit, Suppio rejects the complete import and creates no actions. Remove or edit existing actions separately before importing replacements.
Do not include
type: "function", strict, an executor URL, a signing secret, or handler source code in an action object. Unknown fields are rejected.
The following names are reserved by Suppio and cannot be imported:
check_live_statusescalate_to_humanfile_searchflag_knowledge_issueforum_resolutionmark_resolvedrename_ticketresolve_chatresolve_ticketsuggest_title
Strict parameter schemas
Everyparameters value must use a strict object JSON Schema:
- The root must have
"type": "object"and cannot useanyOfat the root. - Every object must define
properties, list every property exactly once inrequired, and setadditionalPropertiestofalse. - Use
type: ["string", "null"]or the corresponding two-value type array when a value is optional. The property still stays inrequired; the model sendsnullwhen no value applies. - Every array must define one
itemsschema. - Supported value types are
object,array,string,number,integer,boolean, andnullthrough a nullable two-value type array. enummust be a non-empty array. If an enum is nullable, includenullin the enum as well as in itstype.- Descriptions should state meaning, format, units, and how the value maps to your application. Do not put secrets or customer data in descriptions.
- Structure:
type,properties,required,additionalProperties, anditems. - Documentation and choices:
title,description, andenum. - Strings:
format,pattern,minLength, andmaxLength. - Numbers:
minimum,maximum,exclusiveMinimum,exclusiveMaximum, andmultipleOf. - Arrays:
minItemsandmaxItems. - Advanced local composition:
$defs, local$refvalues beginning with#, and nestedanyOf.
date-time, time, date, duration, email, hostname, ipv4, ipv6, and uuid. Other JSON Schema keywords are rejected. Prefer direct types and nullable type arrays over advanced composition unless your action contract requires it.
Ask an AI coding agent to generate the import
Give the AI agent access to the application code that will receive the webhook. It should inspect real service methods, authorization rules, identifier types, enums, validation, and failure cases instead of inventing operations. You can copy this prompt and replace the bracketed values:- Confirm that each
namemaps to one explicit allowlisted handler in your executor. - Confirm that your executor authorizes
actor.user_idfor the targeted customer or account. A signed request proves that Suppio sent it; it does not grant the actor permission in your system. - Confirm that identifiers and enum values match your application exactly.
- Keep
requiresConfirmationon for actions with side effects. - Remove any argument that could turn a narrow action into a generic remote-control interface.
- Import the document, then test each action in a non-production account before enabling production mutations.
Execution request
Suppio sends an HTTPSPOST with Content-Type: application/json:
X-Suppio-Action-Id: The same UUID asaction_id.X-Suppio-Timestamp: The request time as Unix seconds.X-Suppio-Signature:v1=followed by the hexadecimal HMAC-SHA256 signature.
Verify signatures
Always verify the raw request body before parsing JSON. Reject timestamps more than five minutes away from your server time.Build the complete executor
Start with the runnable Node.js example, including raw-body handling, schema validation, actor authorization, durable SQLite idempotency, structured errors, and safe service configuration.
Return a result
For success, return an HTTP2xx response with:
2xx with:
2xx responses. For any 4xx or 5xx response, Suppio discards the response body and reports a generic executor_http_error. Use non-2xx responses for protocol or authentication failures. Use a 2xx response with status: "failed" for an action-level failure that the agent should explain to the user.
Suppio sends no more than 64 KB in an action request. Your response can also be up to 64 KB, and summary can be up to 2,000 characters.
Executor output is treated as untrusted result data. It is never used as an instruction for the agent to follow.
Timeouts and idempotency
Your executor has 15 seconds to respond. Suppio does not automatically retry customer actions because a retry could repeat a change. Store eachaction_id before applying a side effect. If you receive the same ID again, return the result of the original execution instead of repeating it.
If Suppio loses the connection or reaches the timeout after sending a request, it reports that completion could not be confirmed. The action may still have completed in your system.
Availability, limits, and history
- The endpoint must be enabled, and the individual action must be enabled, before the action is available to the agent.
- Suppio can request at most one customer action in one workflow run.
- A ticket or forum conversation can have only one action awaiting confirmation or executing at a time.
- One agent can execute up to five customer actions concurrently across conversations.
- An agent can have up to 15 action definitions.
- Recent activity shows action runs retained for 30 days.
