OpenAPI Specification
swagger: '2.0'
info:
contact:
email: support@nuon.co
name: Nuon Support
description: API for managing nuon apps, components, installs, and actions.
title: Nuon accounts notebooks API
version: 0.19.1074
host: api.nuon.co
basePath: /
schemes:
- https
tags:
- description: notebooks
name: notebooks
paths:
/v1/installs/{install_id}/notebooks:
get:
consumes:
- application/json
operationId: GetNotebooks
parameters:
- description: install ID
in: path
name: install_id
required: true
type: string
- default: 0
description: offset
in: query
name: offset
type: integer
- default: 10
description: limit
in: query
name: limit
type: integer
- description: search by name or ID
in: query
name: q
type: string
produces:
- application/json
responses:
'200':
description: OK
schema:
items:
$ref: '#/definitions/app.Notebook'
type: array
security:
- APIKey: []
- OrgID: []
summary: list notebooks for an install
tags:
- notebooks
post:
consumes:
- application/json
operationId: CreateNotebook
parameters:
- description: install ID
in: path
name: install_id
required: true
type: string
- description: Input
in: body
name: req
required: true
schema:
$ref: '#/definitions/service.CreateNotebookRequest'
produces:
- application/json
responses:
'201':
description: Created
schema:
$ref: '#/definitions/app.Notebook'
security:
- APIKey: []
- OrgID: []
summary: create a notebook for an install
tags:
- notebooks
/v1/installs/{install_id}/notebooks/{notebook_id}:
delete:
consumes:
- application/json
operationId: DeleteNotebook
parameters:
- description: install ID
in: path
name: install_id
required: true
type: string
- description: notebook ID
in: path
name: notebook_id
required: true
type: string
produces:
- application/json
responses:
'204':
description: No Content
security:
- APIKey: []
- OrgID: []
summary: delete a notebook
tags:
- notebooks
get:
consumes:
- application/json
operationId: GetNotebook
parameters:
- description: install ID
in: path
name: install_id
required: true
type: string
- description: notebook ID
in: path
name: notebook_id
required: true
type: string
produces:
- application/json
responses:
'200':
description: OK
schema:
$ref: '#/definitions/app.Notebook'
security:
- APIKey: []
- OrgID: []
summary: get a notebook with its ordered cells and each cell's latest run
tags:
- notebooks
patch:
consumes:
- application/json
operationId: UpdateNotebook
parameters:
- description: install ID
in: path
name: install_id
required: true
type: string
- description: notebook ID
in: path
name: notebook_id
required: true
type: string
- description: Input
in: body
name: req
required: true
schema:
$ref: '#/definitions/service.UpdateNotebookRequest'
produces:
- application/json
responses:
'200':
description: OK
schema:
$ref: '#/definitions/app.Notebook'
security:
- APIKey: []
- OrgID: []
summary: update a notebook
tags:
- notebooks
/v1/installs/{install_id}/notebooks/{notebook_id}/cells:
post:
consumes:
- application/json
operationId: CreateNotebookCell
parameters:
- description: install ID
in: path
name: install_id
required: true
type: string
- description: notebook ID
in: path
name: notebook_id
required: true
type: string
- description: Input
in: body
name: req
required: true
schema:
$ref: '#/definitions/service.CreateCellRequest'
produces:
- application/json
responses:
'201':
description: Created
schema:
$ref: '#/definitions/app.NotebookCell'
security:
- APIKey: []
- OrgID: []
summary: add a cell to a notebook
tags:
- notebooks
/v1/installs/{install_id}/notebooks/{notebook_id}/cells/reorder:
put:
consumes:
- application/json
description: accepts the full ordered list of cell IDs and assigns positions
operationId: ReorderNotebookCells
parameters:
- description: install ID
in: path
name: install_id
required: true
type: string
- description: notebook ID
in: path
name: notebook_id
required: true
type: string
- description: Input
in: body
name: req
required: true
schema:
$ref: '#/definitions/service.ReorderCellsRequest'
produces:
- application/json
responses:
'200':
description: OK
schema:
$ref: '#/definitions/app.Notebook'
security:
- APIKey: []
- OrgID: []
summary: reorder a notebook's cells
tags:
- notebooks
/v1/installs/{install_id}/notebooks/{notebook_id}/cells/{cell_id}:
delete:
consumes:
- application/json
operationId: DeleteNotebookCell
parameters:
- description: install ID
in: path
name: install_id
required: true
type: string
- description: notebook ID
in: path
name: notebook_id
required: true
type: string
- description: cell ID
in: path
name: cell_id
required: true
type: string
produces:
- application/json
responses:
'204':
description: No Content
security:
- APIKey: []
- OrgID: []
summary: delete a cell
tags:
- notebooks
patch:
consumes:
- application/json
operationId: UpdateNotebookCell
parameters:
- description: install ID
in: path
name: install_id
required: true
type: string
- description: notebook ID
in: path
name: notebook_id
required: true
type: string
- description: cell ID
in: path
name: cell_id
required: true
type: string
- description: Input
in: body
name: req
required: true
schema:
$ref: '#/definitions/service.UpdateCellRequest'
produces:
- application/json
responses:
'200':
description: OK
schema:
$ref: '#/definitions/app.NotebookCell'
security:
- APIKey: []
- OrgID: []
summary: edit a cell (bumps its revision)
tags:
- notebooks
/v1/installs/{install_id}/notebooks/{notebook_id}/cells/{cell_id}/runs:
get:
consumes:
- application/json
operationId: GetNotebookCellRuns
parameters:
- description: install ID
in: path
name: install_id
required: true
type: string
- description: notebook ID
in: path
name: notebook_id
required: true
type: string
- description: cell ID
in: path
name: cell_id
required: true
type: string
- default: 0
description: offset
in: query
name: offset
type: integer
- default: 20
description: limit
in: query
name: limit
type: integer
produces:
- application/json
responses:
'200':
description: OK
schema:
items:
$ref: '#/definitions/app.NotebookCellRun'
type: array
security:
- APIKey: []
- OrgID: []
summary: list a cell's run history (newest first)
tags:
- notebooks
post:
consumes:
- application/json
description: dispatches the cell to the notebook's warm Temporal workflow and records a NotebookCellRun linking to the underlying execution + log stream. Returns once the run is queued, not when it finishes.
operationId: RunNotebookCell
parameters:
- description: install ID
in: path
name: install_id
required: true
type: string
- description: notebook ID
in: path
name: notebook_id
required: true
type: string
- description: cell ID
in: path
name: cell_id
required: true
type: string
- description: Input
in: body
name: req
schema:
$ref: '#/definitions/service.RunCellRequest'
produces:
- application/json
responses:
'202':
description: Accepted
schema:
$ref: '#/definitions/app.NotebookCellRun'
security:
- APIKey: []
- OrgID: []
summary: run a notebook cell on the install's runner
tags:
- notebooks
/v1/installs/{install_id}/notebooks/{notebook_id}/runs/{run_id}:
get:
consumes:
- application/json
operationId: GetNotebookCellRun
parameters:
- description: install ID
in: path
name: install_id
required: true
type: string
- description: notebook ID
in: path
name: notebook_id
required: true
type: string
- description: run ID
in: path
name: run_id
required: true
type: string
produces:
- application/json
responses:
'200':
description: OK
schema:
$ref: '#/definitions/app.NotebookCellRun'
security:
- APIKey: []
- OrgID: []
summary: get a single cell run (includes log_stream_id for tailing)
tags:
- notebooks
definitions:
service.CreateNotebookRequest:
properties:
description:
maxLength: 2000
type: string
name:
maxLength: 255
type: string
type: object
app.QueueEmitter:
properties:
created_at:
type: string
created_by_id:
type: string
cron_schedule:
description: 'Schedule configuration
For cron mode: cron expression (e.g., "0 * * * *")'
type: string
description:
type: string
emit_count:
type: integer
fired:
description: 'For scheduled mode: whether the signal has been fired'
type: boolean
id:
type: string
jitter_window:
description: 'For cron mode: spread emitter ticks deterministically across this window
to avoid thundering-herd when many emitters share a schedule. A hash of the
emitter ID determines each emitter''s static offset within the window. Zero
disables jitter (default).'
type: integer
last_emitted_at:
type: string
mode:
allOf:
- $ref: '#/definitions/app.QueueEmitterMode'
description: 'Emitter mode: "cron" for recurring, "scheduled" for one-shot'
name:
description: Emitter identity
type: string
next_emit_at:
type: string
org_id:
type: string
queue_id:
description: 'Many-to-one: each emitter belongs to exactly one queue'
type: string
scheduled_at:
description: 'For scheduled mode: the time to fire the signal'
type: string
signal_expires_in:
description: 'Optional TTL for emitted signals. When set, each emitted signal''s ExpiresAt
is computed as time.Now().Add(SignalExpiresIn) at emission time.'
type: integer
signal_template:
$ref: '#/definitions/signaldb.SignalData'
signal_type:
description: Signal template - the signal to emit on each tick
type: string
status:
allOf:
- $ref: '#/definitions/app.CompositeStatus'
description: Runtime state using shared CompositeStatus
updated_at:
type: string
workflow:
allOf:
- $ref: '#/definitions/signaldb.WorkflowRef'
description: Workflow reference for the emitter's cron workflow
type: object
app.Notebook:
properties:
cell_count:
type: integer
cells:
items:
$ref: '#/definitions/app.NotebookCell'
type: array
created_at:
type: string
created_by:
$ref: '#/definitions/app.Account'
created_by_id:
type: string
description:
type: string
id:
type: string
install_id:
type: string
latest_run_at:
type: string
name:
type: string
queue:
allOf:
- $ref: '#/definitions/app.Queue'
description: 'Queue owns the lifecycle of the notebook''s warm Temporal workflow: a
notebook-start signal enqueued at create time starts NotebookWorkflow,
and the queue can re-dispatch it for recovery. Cell runs still dispatch
to the workflow directly via update-with-start.'
status:
type: string
updated_at:
type: string
type: object
signaldb.SignalData:
properties:
signal: {}
type: object
app.CompositeStatus:
properties:
created_at_ts:
type: integer
created_by_id:
type: string
history:
items:
$ref: '#/definitions/app.CompositeStatus'
type: array
metadata:
additionalProperties: {}
type: object
status:
$ref: '#/definitions/app.Status'
status_human_description:
type: string
type: object
app.RoleType:
enum:
- org_admin
- org_support
- installer
- runner
- hosted-installer
type: string
x-enum-varnames:
- RoleTypeOrgAdmin
- RoleTypeOrgSupport
- RoleTypeInstaller
- RoleTypeRunner
- RoleTypeHostedInstaller
app.Role:
properties:
createdBy:
$ref: '#/definitions/app.Account'
created_at:
type: string
created_by_id:
type: string
id:
type: string
policies:
items:
$ref: '#/definitions/app.Policy'
type: array
role_type:
$ref: '#/definitions/app.RoleType'
updated_at:
type: string
type: object
service.CreateCellRequest:
properties:
command:
type: string
enable_kube_config:
type: boolean
x-nullable: true
env_vars:
additionalProperties:
type: string
type: object
inline_contents:
type: string
name:
maxLength: 255
type: string
role:
type: string
timeout:
maximum: 3600
minimum: 1
type: integer
type: object
permissions.Permission:
enum:
- unknown
- all
- create
- read
- update
- delete
type: string
x-enum-varnames:
- PermissionUnknown
- PermissionAll
- PermissionCreate
- PermissionRead
- PermissionUpdate
- PermissionDelete
app.Queue:
properties:
created_at:
type: string
created_by_id:
type: string
emitters:
items:
$ref: '#/definitions/app.QueueEmitter'
type: array
id:
type: string
idle_timeout:
type: integer
max_depth:
type: integer
max_in_flight:
type: integer
metadata:
additionalProperties:
type: string
type: object
name:
type: string
org_id:
type: string
owner_id:
type: string
owner_type:
type: string
queue_signal:
items:
$ref: '#/definitions/app.QueueSignal'
type: array
status_v2:
$ref: '#/definitions/app.CompositeStatus'
updated_at:
type: string
workflow:
$ref: '#/definitions/signaldb.WorkflowRef'
type: object
app.QueueSignal:
properties:
callback:
$ref: '#/definitions/callback.Ref'
callbacks:
items:
$ref: '#/definitions/callback.Ref'
type: array
created_at:
type: string
created_by_id:
type: string
emitter_id:
description: 'Optional: if this signal was emitted by an emitter'
type: string
enqueued:
type: boolean
execution_count:
type: integer
expires_at:
type: string
id:
type: string
org_id:
type: string
owner_id:
type: string
owner_type:
type: string
queue:
$ref: '#/definitions/app.Queue'
queue_id:
type: string
signal:
$ref: '#/definitions/signaldb.SignalData'
signal_context:
$ref: '#/definitions/cctx.SignalContext'
status:
$ref: '#/definitions/app.CompositeStatus'
type:
type: string
updated_at:
type: string
workflow:
$ref: '#/definitions/signaldb.WorkflowRef'
type: object
service.UpdateNotebookRequest:
properties:
description:
maxLength: 2000
type: string
name:
maxLength: 255
type: string
status:
enum:
- active
- archived
type: string
type: object
permissions.Set:
additionalProperties:
$ref: '#/definitions/permissions.Permission'
type: object
app.Account:
properties:
account_type:
$ref: '#/definitions/app.AccountType'
created_at:
type: string
email:
type: string
id:
type: string
org_ids:
description: ReadOnly Fields
items:
type: string
type: array
permissions:
$ref: '#/definitions/permissions.Set'
roles:
items:
$ref: '#/definitions/app.Role'
type: array
subject:
type: string
updated_at:
type: string
user_journeys:
items:
$ref: '#/definitions/app.UserJourney'
type: array
type: object
app.QueueEmitterMode:
enum:
- cron
- scheduled
- fire_once
type: string
x-enum-varnames:
- QueueEmitterModeCron
- QueueEmitterModeScheduled
- QueueEmitterModeFireOnce
app.Status:
enum:
- error
- pending
- in-progress
- checking-plan
- success
- not-attempted
- cancelled
- retrying
- discarded
- user-skipped
- auto-skipped
- planning
- applying
- queued
- warning
- failed-pending-retry
- generating
- awaiting-user-run
- provisioning
- active
- outdated
- expired
- approved
- drifted
- no-drift
- approval-expired
- approval-denied
- approval-retry
- building
- deleting
- noop
- approval-awaiting
type: string
x-enum-varnames:
- StatusError
- StatusPending
- StatusInProgress
- StatusCheckPlan
- StatusSuccess
- StatusNotAttempted
- StatusCancelled
- StatusRetrying
- StatusDiscarded
- StatusUserSkipped
- StatusAutoSkipped
- StatusPlanning
- StatusApplying
- StatusQueued
- StatusWarning
- StatusFailedPendingRetry
- InstallStackVersionStatusGenerating
- InstallStackVersionStatusPendingUser
- InstallStackVersionStatusProvisioning
- InstallStackVersionStatusActive
- InstallStackVersionStatusOutdated
- InstallStackVersionStatusExpired
- WorkflowStepApprovalStatusApproved
- WorkflowStepDrifted
- WorkflowStepNoDrift
- WorkflowStepApprovalStatusApprovalExpired
- WorkflowStepApprovalStatusApprovalDenied
- WorkflowStepApprovalStatusApprovalRetryPlan
- StatusBuilding
- StatusDeleting
- InstallDeployStatusV2Noop
- AwaitingApproval
app.Policy:
properties:
created_at:
type: string
created_by_id:
type: string
id:
type: string
name:
$ref: '#/definitions/app.PolicyName'
permissions:
additionalProperties:
type: string
description: Permissions are used to track granular permissions for each domain
type: object
role_id:
type: string
updated_at:
type: string
type: object
app.AccountType:
enum:
- auth
- auth0
- service
- canary
- integration
type: string
x-enum-varnames:
- AccountTypeAuth
- AccountTypeAuth0
- AccountTypeService
- AccountTypeCanary
- AccountTypeIntegration
app.NotebookCellRun:
properties:
cell_id:
type: string
cell_revision:
description: CellRevision records which revision of the cell this run executed.
type: integer
command:
type: string
created_at:
type: string
created_by:
$ref: '#/definitions/app.Account'
created_by_id:
type: string
env_vars:
additionalProperties:
type: string
type: object
id:
type: string
idempotency_key:
description: 'IdempotencyKey deduplicates run requests (HTTP retries / update retries).
A server-side key is always generated, so the composite unique index on
(notebook_id, idempotency_key) in Indexes() never sees an empty key.'
type: string
inline_contents:
type: string
install_action_workflow_run_id:
description: Link to the existing execution/audit artifacts.
type: string
install_id:
type: string
log_stream_id:
type: string
name:
description: Cell config snapshot at run time.
type: string
notebook_id:
type: string
runner_job_id:
type: string
status:
type: string
status_description:
type: string
status_v2:
$ref: '#/definitions/app.CompositeStatus'
triggered_by_id:
type: string
triggered_by_type:
type: string
updated_at:
type: string
type: object
app.PolicyName:
enum:
- org_admin
- org_support
- installer
- runner
- hosted_installer
type: string
x-enum-varnames:
- PolicyNameOrgAdmin
- PolicyNameOrgSupport
- PolicyNameInstaller
- PolicyNameRunner
- PolicyNameHostedInstaller
cctx.SignalContext:
properties:
account_id:
type: string
log_stream_id:
type: string
org_id:
type: string
trace_id:
type: string
type: object
service.UpdateCellRequest:
properties:
command:
type: string
enable_kube_config:
type: boolean
x-nullable: true
env_vars:
additionalProperties:
type: string
type: object
inline_contents:
type: string
name:
maxLength: 255
type: string
role:
type: string
timeout:
maximum: 3600
minimum: 1
type: integer
type: object
callback.Ref:
properties:
namespace:
type: string
signal_name:
type: string
workflow_id:
type: string
type: object
service.ReorderCellsRequest:
properties:
cell_ids:
items:
type: string
minItems: 1
type: array
required:
- cell_ids
type: object
sql.NullBool:
properties:
bool:
type: boolean
valid:
description: Valid is true if Bool is not NULL
type: boolean
type: object
app.UserJourney:
properties:
name:
type: string
steps:
items:
$ref: '#/definitions/app.UserJourneyStep'
type: array
title:
type: string
type: object
service.RunCellRequest:
properties:
idempotency_key:
description: 'IdempotencyKey deduplicates retried run requests. Optional; a server-side
key is generated when empty.'
maxLength: 255
type: string
type: object
app.NotebookCell:
properties:
command:
type: string
created_at:
type: string
created_by_id:
type: string
enable_kube_config:
$ref: '#/definitions/sql.NullBool'
env_vars:
additionalProperties:
type: string
type: object
id:
type: string
inline_contents:
type: string
latest_run:
allOf:
- $ref: '#/definitions/app.NotebookCellRun'
description: 'LatestRun is populated on read so the UI can show the most recent run''s
status and log stream directly below the cell. Not persisted.'
name:
type: string
notebook_id:
type: string
position:
description: Position is the 0-based ordering of this cell within the notebook.
type: integer
revision:
description: Revision increments on every edit; runs snapshot the revision they ran.
type: integer
role:
type: string
timeout:
type: integer
updated_at:
type: string
type: object
signaldb.WorkflowRef:
properties:
id:
type: string
namespace:
type: string
run_id:
type: string
type: object
app.UserJourneyStep:
properties:
complete:
type: boolean
completed_at:
description: Top-level completion tracking fields
type: string
completion_method:
type: string
completion_source:
type: string
metadata:
additionalProperties: true
description: Flexible metadata for business data
type: object
name:
type: string
title:
type: string
type: object
securityDefinitions:
APIKey:
description: Type "Bearer" followed by a space and token.
in: header
name: Authorization
type: apiKey
OrgID:
description: Nuon org ID
in: header
name: X-Nuon-Org-ID
type: apiKey