Skip to main content
Webhooks

Webhook

Receive Forward resource and asynchronous task status changes through HTTP callbacks.

Webhook is currently in Beta. APIs, fields, and behavior may change in future versions.
Webhook Endpoints store a receiver URL and subscribed events. When an event occurs, Qoder Cloud Agents sends a POST request to the Endpoint. Webhooks are suitable for asynchronous results such as Schedule Runs that cannot rely on a long-lived connection. These APIs manage only Endpoints created through Forward Mode in the current personal space or enterprise Workspace. Endpoints created in another space or mode are not listed and cannot be managed with these APIs.

APIs

MethodPathDescription
POST/api/v1/forward/webhook/endpointsCreate an Endpoint
GET/api/v1/forward/webhook/endpointsList Endpoints
GET/api/v1/forward/webhook/endpoints/{endpoint_id}Get an Endpoint
PUT/api/v1/forward/webhook/endpoints/{endpoint_id}Update an Endpoint
DELETE/api/v1/forward/webhook/endpoints/{endpoint_id}Delete an Endpoint
POST/api/v1/forward/webhook/endpoints/{endpoint_id}/enableEnable an Endpoint
POST/api/v1/forward/webhook/endpoints/{endpoint_id}/disableDisable an Endpoint
POST/api/v1/forward/webhook/endpoints/{endpoint_id}/testSend a test event

Authentication

Webhook Endpoints are management resources. These APIs accept a Qoder PAT or an administrator Service Account Token:
Authorization: Bearer <PAT or administrator SAT>
Identity-level Service Account Tokens cannot manage Webhook Endpoints.

Public events

Forward currently supports the following 30 public events, matching the subscription catalog in the Forward console. The same Endpoint can subscribe to both Schedule business events and Managed Agents resource events. When you create or update an Endpoint, put the full event names from these tables into the events array.

Schedule and Schedule Run

Event typeTrigger
forward.schedule.createdA Schedule is created successfully.
forward.schedule.archivedA Schedule is archived successfully for the first time, including manual, batch, automatic, and cascaded archiving.
forward.schedule_run.succeededA Schedule Run completes successfully, with data.status set to completed.
forward.schedule_run.failedA Schedule Run fails, with data.status set to failed.
The execution result of a Schedule Run differs from the channel push result. The channel push status is reported in data.push_status. The data of these four events includes the Schedule creation source. See Receive Webhook events for field descriptions and examples.

Session

Event typeTrigger
session.status_run_startedThe Session starts a run.
session.status_idledThe Session becomes idle after the current run finishes or is canceled.
session.status_terminatedThe Session is terminated.
session.updatedSession properties such as the title or metadata are updated.
session.deletedThe Session is deleted.
session.status_idled means the Session became idle. It does not mean the business run succeeded. Query the Session output and status to confirm the result.

Session Thread

Event typeTrigger
session.thread_createdA new thread is created in the Session.
session.thread_idledThe thread finishes its current run, is interrupted, or pauses to wait for an external action such as a tool result.
session.thread_terminatedThe thread is terminated.
For thread events, data.id is the ID of the parent Session and data.session_thread_id identifies the specific thread. session.thread_idled does not necessarily mean the thread task is complete. While the thread waits for an external action, its status is blocked.

Agent

Event typeTrigger
agent.createdA Managed Agent is created successfully.
agent.updatedManaged Agent configuration is updated.
agent.archivedA Managed Agent is archived.
agent.deletedA Managed Agent is deleted.
Agent here refers to the Managed Agents resource, not a Forward Template. These events do not indicate Template lifecycle changes.

Environment

Event typeTrigger
environment.createdAn Environment is created successfully.
environment.updatedEnvironment configuration is updated.
environment.archivedAn Environment is archived.
environment.deletedAn Environment is deleted.

Memory Store

Event typeTrigger
memory_store.createdA Memory Store is created successfully.
memory_store.archivedA Memory Store is archived.
memory_store.deletedA Memory Store is deleted.

Vault and Vault Credential

Event typeTrigger
vault.createdA Vault is created successfully.
vault.archivedA Vault is archived.
vault.deletedA Vault is deleted.
vault_credential.createdA Vault Credential is created successfully.
vault_credential.archivedA credential is archived, including cascaded archiving when its Vault is archived.
vault_credential.deletedA credential is deleted, including cascaded deletion when its Vault is deleted.
vault_credential.refresh_failedRefreshing an OAuth credential fails.
For credential events, data.id is the credential ID and data.vault_id is the ID of the parent Vault. These events do not contain credential secrets.

Subscription rules and test events

  • events must contain at least one item. It accepts full event names or the global wildcard *. Prefix wildcards such as forward.* or session.* are not supported.
  • * subscribes to all currently and subsequently deliverable events. In production, explicitly subscribe to the public events you need, and stay compatible with event types you do not yet recognize.
  • The API accepts any event name in namespace.name form, which does not mean the event is actually produced. Only the events in the public catalog above have a Forward delivery contract.
  • Forward does not publish Deployment or Deployment Run events. Do not treat every Managed Agents event as an event that Forward supports.
  • webhook.test is a targeted test event generated by the Send a test event API. It does not need to be in the subscription list and is not counted among the 30 business and resource events above.
For example, to receive both Session idle notifications and the final result of Schedule Runs:
{
  "events": [
    "session.status_idled",
    "forward.schedule_run.succeeded",
    "forward.schedule_run.failed"
  ]
}
See Receive Webhook events for event payloads, signature verification, and idempotency.

Workflow

  1. Prepare a public HTTPS URL that accepts POST requests.
  2. Create an Endpoint and securely store the signing_secret from the creation response.
  3. Call the test API to verify connectivity and signature handling.
  4. Subscribe to the required events and deduplicate deliveries by Webhook-ID.
Webhook delivery is at least once, so the same event may be delivered more than once. Return 2xx promptly, then process long-running work asynchronously.