Home
Nuon
Nuon Org Webhooks
Nuon · AsyncAPI Specification
Nuon Org Webhooks
Version v1
Org-scoped webhooks deliver workflow and workflow-step lifecycle events for a Nuon Org as CloudEvents v1.0 JSON envelopes over HTTP POST. Best-effort delivery (no retries or replay); handlers must be idempotent. Bodies are optionally signed HMAC-SHA256 with the shared secret, hex digest in the X-Nuon-Signature header. Content-Type: application/cloudevents+json.
View Spec
View on GitHub
Company BYOC Deployment Continuous Delivery DevOps Infrastructure Cloud Multi-Cloud Kubernetes Terraform Platform Engineering AsyncAPI Webhooks Events
Channels
workflowLifecycle
Fires for a workflow as a whole (provision, reprovision, manual_deploy, action_workflow_run).
workflowStepLifecycle
Fires for each step within a workflow (install_deploys, install_sandbox_runs, install_action_workflow_runs).
Messages
✉
WorkflowLifecycle
Workflow lifecycle event
✉
WorkflowStepLifecycle
Workflow step lifecycle event
Servers
https
subscriber
Consumer HTTPS endpoint registered via `nuon orgs webhooks create --url`.
AsyncAPI Specification
generated: '2026-07-20'
method: searched
source: https://docs.nuon.co/guides/webhooks
spec_type: AsyncAPI
asyncapi: 3.0.0
info:
title: Nuon Org Webhooks
version: v1
description: >-
Org-scoped webhooks deliver workflow and workflow-step lifecycle events for a Nuon Org as
CloudEvents v1.0 JSON envelopes over HTTP POST. Best-effort delivery (no retries or replay);
handlers must be idempotent. Bodies are optionally signed HMAC-SHA256 with the shared secret,
hex digest in the X-Nuon-Signature header. Content-Type: application/cloudevents+json.
contact:
name: Nuon Support
email: support@nuon.co
defaultContentType: application/cloudevents+json
servers:
subscriber:
host: your-endpoint.example.com
protocol: https
description: Consumer HTTPS endpoint registered via `nuon orgs webhooks create --url`.
channels:
workflowLifecycle:
address: com.nuon.workflow.lifecycle.v1
description: Fires for a workflow as a whole (provision, reprovision, manual_deploy, action_workflow_run).
messages:
workflowLifecycleEvent:
$ref: '#/components/messages/WorkflowLifecycle'
workflowStepLifecycle:
address: com.nuon.workflow_step.lifecycle.v1
description: Fires for each step within a workflow (install_deploys, install_sandbox_runs, install_action_workflow_runs).
messages:
workflowStepLifecycleEvent:
$ref: '#/components/messages/WorkflowStepLifecycle'
operations:
receiveWorkflowLifecycle:
action: receive
channel:
$ref: '#/channels/workflowLifecycle'
receiveWorkflowStepLifecycle:
action: receive
channel:
$ref: '#/channels/workflowStepLifecycle'
components:
messages:
WorkflowLifecycle:
name: WorkflowLifecycle
title: Workflow lifecycle event
contentType: application/cloudevents+json
payload:
type: object
properties:
specversion: {type: string, const: '1.0'}
id: {type: string}
type: {type: string, const: com.nuon.workflow.lifecycle.v1}
source: {type: string, example: '//nuon.co/ctl-api'}
time: {type: string, format: date-time}
subject: {type: string}
nuonorgid: {type: string}
nuonkind: {type: string, const: workflow}
nuontransition: {type: string, enum: [started, succeeded, failed, cancelled]}
data:
type: object
properties:
kind: {type: string}
transition: {type: string, enum: [started, succeeded, failed, cancelled]}
org_id: {type: string}
workflow:
type: object
properties:
id: {type: string}
type: {type: string}
owner_id: {type: string}
owner_type: {type: string, enum: [installs, apps, app_branches]}
WorkflowStepLifecycle:
name: WorkflowStepLifecycle
title: Workflow step lifecycle event
contentType: application/cloudevents+json
payload:
type: object
properties:
specversion: {type: string, const: '1.0'}
id: {type: string}
type: {type: string, const: com.nuon.workflow_step.lifecycle.v1}
nuonkind: {type: string, const: workflow_step}
nuontransition: {type: string, enum: [started, succeeded, failed, cancelled]}
data:
type: object
properties:
step:
type: object
properties:
id: {type: string}
name: {type: string}
idx: {type: integer}
target_type: {type: string, example: install_deploys}
component_id: {type: string}
sandbox_id: {type: string}
execution_type: {type: string, enum: [system, user, approval, skipped, hidden]}
outcome:
type: object
properties:
status: {type: string}
error: {type: string}
duration_ms: {type: integer}
securitySchemes:
hmacSignature:
type: httpApiKey
name: X-Nuon-Signature
in: header
description: Lowercase hex HMAC-SHA256 digest of the raw request body, keyed with the webhook shared secret.
x-webhook-management:
transport: HTTP POST
content_type: application/cloudevents+json; charset=utf-8
signature: HMAC-SHA256 hex in X-Nuon-Signature (present only when a secret is configured)
delivery: best-effort; 5s ack timeout; no retries, no replay; duplicates possible
subscribe: nuon orgs webhooks create --url <https-url> --secret <shared-secret>
filtering: interests (per-resource ops/outcome/approvals/drift) + match predicate (ids/label selector)
resources: [installs, stacks, components, sandboxes, install_configurations, runners, actions]
transitions: [started, succeeded, failed, cancelled]