> ## Documentation Index
> Fetch the complete documentation index at: https://openworklabs.com/docs/llms.txt
> Use this file to discover all available pages before exploring further.

# Open an app or an exact draft preview

> Returns the app with the compiled HTML of one revision and the artifact payload it should render. Without revisionId the active saved revision is used; pass revisionId to preview an exact draft revision instead. The data comes from the Workflow's latest successful snapshot, or from the snapshot named by receiptId. When the revision has not finished building, no readable successful result exists, or the result's output schema no longer matches the revision, html and payload are null and previewNotice explains why.



## OpenAPI

````yaml /openapi.json get /v1/apps/{appId}
openapi: 3.1.0
info:
  title: Den API
  description: >-
    OpenAPI spec for the Den control plane API.


    Authentication:

    - Use `Authorization: Bearer <session-token>` for user-authenticated routes
    that require a Den session.

    - Use `x-api-key: <den-api-key>` for organization API-key calls. API keys
    resolve to the issuing user and the organization member they were scoped to
    when created, so they can call ordinary user and organization routes without
    a separate signed-in session.
      Example: `curl https://api.openworklabs.com/v1/me -H "x-api-key: den_..."`.
    - Session-only flows still require a signed-in user session, including
    organization creation, invitation acceptance, active-organization switching,
    and MCP token minting.

    - Public routes like health and documentation do not require authentication.


    Swagger tip: use the security schemes in the Authorize dialog to set either
    `bearerAuth` or `denApiKey` before trying protected endpoints.
  version: 0.18.46
  contact:
    name: OpenWork
    url: https://openworklabs.com
    email: team@openworklabs.com
  license:
    name: OpenWork Enterprise Edition License
    url: https://github.com/different-ai/openwork/blob/dev/ee/LICENSE
servers:
  - url: https://api.openworklabs.com
security:
  - bearerAuth: []
  - denApiKey: []
tags:
  - name: System
    description: >-
      Service health, readiness, API documentation, and desktop version
      metadata.
  - name: Authentication
    description: >-
      Sign-in discovery, administrator bootstrap, OAuth provider connections,
      and MCP token minting.
  - name: OAuth
    description: >-
      OAuth 2.0 / OpenID Connect authorization-server and protected-resource
      metadata and dynamic client registration (RFC 8414, RFC 9728, RFC 7591),
      used by MCP clients.
  - name: SCIM
    description: >-
      SCIM 2.0 provisioning endpoints for identity providers (RFC 7644) and the
      organization SCIM connector management routes.
  - name: SSO
    description: Organization single sign-on connector management routes.
  - name: Bootstrap
    description: Agent-first provisional workspace setup routes.
  - name: Users
    description: Current user and membership routes.
  - name: Organizations
    description: Organization creation, context, brand assets, and install links.
  - name: Invitations
    description: Invitation preview, acceptance, creation, and cancellation routes.
  - name: Members
    description: Organization member management routes.
  - name: Roles
    description: Organization custom role management routes.
  - name: Teams
    description: Organization team management routes.
  - name: API Keys
    description: Organization API key management routes.
  - name: Desktop Policies
    description: Desktop app policies applied to the organization, members, or teams.
  - name: LLM Providers
    description: Organization LLM provider catalog, configuration, and access routes.
  - name: Inference
    description: Organization inference settings.
  - name: Inference Providers
    description: >-
      Organization inference Gateway providers, model groups, credential sets,
      access grants, member connections, and usage.
  - name: Cloud
    description: Organization Cloud instance lifecycle and browser gateway resolution.
  - name: Workers
    description: Worker lifecycle, billing, and runtime routes.
  - name: Worker Runtime
    description: Worker runtime inspection and upgrade routes.
  - name: Worker Activity
    description: Worker heartbeat and activity reporting routes.
  - name: Automations
    description: Scheduled Automations, their runs, and desktop runner presence.
  - name: Workflows
    description: Saved Workflows (Code Mode scripts), their versions, snapshots, and views.
  - name: Workflow Runs
    description: Durable Workflow run history.
  - name: Codemode Runs
    description: Generated Artifact views produced by Code Mode runs.
  - name: Apps
    description: >-
      Saved reusable apps built from Workflows and Artifact views, and their
      sharing.
  - name: Config Objects
    description: >-
      Versioned configuration objects (skills, workflows, and other plugin
      content).
  - name: Plugins
    description: Plugin packages, access grants, and imports.
  - name: Marketplaces
    description: Marketplaces that distribute plugins to members and teams.
  - name: Resources
    description: >-
      Aggregated snapshot of the resources and marketplace capabilities
      available to the caller.
  - name: Dashboards
    description: Shared dashboards and their access grants.
  - name: Capability Sources
    description: >-
      Native provider capabilities (Google Workspace, Microsoft 365) and
      external MCP connections executed as the calling member.
  - name: Direct uploads
    description: Multipart uploads that stream workspace files straight to a provider.
  - name: Connectors
    description: >-
      Connector accounts and instances (GitHub and other sources) and their sync
      state.
  - name: GitHub
    description: >-
      GitHub App installation, repository discovery, and plugin import from
      GitHub.
  - name: Diagnostics
    description: Controlled egress diagnostics for self-hosted deployments.
  - name: Telemetry
    description: Telemetry event ingestion and adoption analytics.
  - name: Webhooks
    description: Signed inbound webhooks from third-party providers.
  - name: Admin
    description: Platform administration routes for allowlisted OpenWork administrators.
  - name: Deprecated
    description: Removed features that answer with 410 or an empty result for old clients.
paths:
  /v1/apps/{appId}:
    get:
      tags:
        - Apps
      summary: Open an app or an exact draft preview
      description: >-
        Returns the app with the compiled HTML of one revision and the artifact
        payload it should render. Without revisionId the active saved revision
        is used; pass revisionId to preview an exact draft revision instead. The
        data comes from the Workflow's latest successful snapshot, or from the
        snapshot named by receiptId. When the revision has not finished
        building, no readable successful result exists, or the result's output
        schema no longer matches the revision, html and payload are null and
        previewNotice explains why.
      operationId: getV1AppsByAppId
      parameters:
        - in: query
          name: revisionId
          schema:
            type: string
            minLength: 1
            maxLength: 160
        - in: query
          name: receiptId
          schema:
            type: string
            minLength: 1
            maxLength: 160
        - schema:
            type: string
          in: path
          name: appId
          required: true
      responses:
        '200':
          description: App preview returned.
          content:
            application/json:
              schema:
                type: object
                properties:
                  view:
                    type: object
                    properties:
                      id:
                        type: string
                        minLength: 1
                        maxLength: 160
                      configObjectId:
                        type: string
                        minLength: 1
                        maxLength: 160
                      title:
                        type: string
                        minLength: 1
                        maxLength: 255
                      description:
                        anyOf:
                          - type: string
                            maxLength: 2000
                          - type: 'null'
                      status:
                        type: string
                        enum:
                          - active
                          - retired
                      activeRevisionId:
                        anyOf:
                          - type: string
                            minLength: 1
                            maxLength: 160
                          - type: 'null'
                      useInWorkflow:
                        type: boolean
                      revisions:
                        type: array
                        items:
                          type: object
                          properties:
                            id:
                              type: string
                              minLength: 1
                              maxLength: 160
                            artifactViewId:
                              type: string
                              minLength: 1
                              maxLength: 160
                            resourceUri:
                              type: string
                              pattern: ^ui:\/\/openwork\/artifacts\/.*
                            buildStatus:
                              type: string
                              enum:
                                - ready
                                - failed
                            sourceDigest:
                              type: string
                              pattern: ^sha256:[a-f0-9]{64}$
                            resourceDigest:
                              anyOf:
                                - type: string
                                  pattern: ^sha256:[a-f0-9]{64}$
                                - type: 'null'
                            outputSchemaDigest:
                              type: string
                              pattern: ^sha256:[a-f0-9]{64}$
                            csp:
                              type: object
                              properties:
                                connectDomains:
                                  minItems: 0
                                  maxItems: 0
                                  type: array
                                  items:
                                    type: string
                                resourceDomains:
                                  minItems: 0
                                  maxItems: 0
                                  type: array
                                  items:
                                    type: string
                                frameDomains:
                                  minItems: 0
                                  maxItems: 0
                                  type: array
                                  items:
                                    type: string
                                baseUriDomains:
                                  minItems: 0
                                  maxItems: 0
                                  type: array
                                  items:
                                    type: string
                              required:
                                - connectDomains
                                - resourceDomains
                                - frameDomains
                                - baseUriDomains
                            diagnostics:
                              type: array
                              items:
                                type: object
                                properties:
                                  level:
                                    type: string
                                    enum:
                                      - error
                                      - warning
                                  message:
                                    type: string
                                    minLength: 1
                                    maxLength: 4000
                                  line:
                                    anyOf:
                                      - type: integer
                                        exclusiveMinimum: 0
                                        maximum: 9007199254740991
                                      - type: 'null'
                                  column:
                                    anyOf:
                                      - type: integer
                                        minimum: 0
                                        maximum: 9007199254740991
                                      - type: 'null'
                                required:
                                  - level
                                  - message
                                  - line
                                  - column
                            compilerName:
                              type: string
                              minLength: 1
                            compilerVersion:
                              type: string
                              minLength: 1
                            reactVersion:
                              type: string
                              minLength: 1
                            compiledHtmlBytes:
                              anyOf:
                                - type: integer
                                  minimum: 0
                                  maximum: 9007199254740991
                                - type: 'null'
                            retiredAt:
                              anyOf:
                                - type: string
                                  format: date-time
                                  pattern: >-
                                    ^(?:(?:\d\d[2468][048]|\d\d[13579][26]|\d\d0[48]|[02468][048]00|[13579][26]00)-02-29|\d{4}-(?:(?:0[13578]|1[02])-(?:0[1-9]|[12]\d|3[01])|(?:0[469]|11)-(?:0[1-9]|[12]\d|30)|(?:02)-(?:0[1-9]|1\d|2[0-8])))T(?:(?:[01]\d|2[0-3]):[0-5]\d(?::[0-5]\d(?:\.\d+)?)?(?:Z))$
                                - type: 'null'
                            createdAt:
                              type: string
                              format: date-time
                              pattern: >-
                                ^(?:(?:\d\d[2468][048]|\d\d[13579][26]|\d\d0[48]|[02468][048]00|[13579][26]00)-02-29|\d{4}-(?:(?:0[13578]|1[02])-(?:0[1-9]|[12]\d|3[01])|(?:0[469]|11)-(?:0[1-9]|[12]\d|30)|(?:02)-(?:0[1-9]|1\d|2[0-8])))T(?:(?:[01]\d|2[0-3]):[0-5]\d(?::[0-5]\d(?:\.\d+)?)?(?:Z))$
                          required:
                            - id
                            - artifactViewId
                            - resourceUri
                            - buildStatus
                            - sourceDigest
                            - resourceDigest
                            - outputSchemaDigest
                            - csp
                            - diagnostics
                            - compilerName
                            - compilerVersion
                            - reactVersion
                            - compiledHtmlBytes
                            - retiredAt
                            - createdAt
                      createdAt:
                        type: string
                        format: date-time
                        pattern: >-
                          ^(?:(?:\d\d[2468][048]|\d\d[13579][26]|\d\d0[48]|[02468][048]00|[13579][26]00)-02-29|\d{4}-(?:(?:0[13578]|1[02])-(?:0[1-9]|[12]\d|3[01])|(?:0[469]|11)-(?:0[1-9]|[12]\d|30)|(?:02)-(?:0[1-9]|1\d|2[0-8])))T(?:(?:[01]\d|2[0-3]):[0-5]\d(?::[0-5]\d(?:\.\d+)?)?(?:Z))$
                      updatedAt:
                        type: string
                        format: date-time
                        pattern: >-
                          ^(?:(?:\d\d[2468][048]|\d\d[13579][26]|\d\d0[48]|[02468][048]00|[13579][26]00)-02-29|\d{4}-(?:(?:0[13578]|1[02])-(?:0[1-9]|[12]\d|3[01])|(?:0[469]|11)-(?:0[1-9]|[12]\d|30)|(?:02)-(?:0[1-9]|1\d|2[0-8])))T(?:(?:[01]\d|2[0-3]):[0-5]\d(?::[0-5]\d(?:\.\d+)?)?(?:Z))$
                    required:
                      - id
                      - configObjectId
                      - title
                      - description
                      - status
                      - activeRevisionId
                      - revisions
                      - createdAt
                      - updatedAt
                  workflowTitle:
                    type: string
                  canManage:
                    type: boolean
                  onDashboard:
                    type: boolean
                  revision:
                    anyOf:
                      - type: object
                        properties:
                          id:
                            type: string
                            minLength: 1
                            maxLength: 160
                          artifactViewId:
                            type: string
                            minLength: 1
                            maxLength: 160
                          resourceUri:
                            type: string
                            pattern: ^ui:\/\/openwork\/artifacts\/.*
                          buildStatus:
                            type: string
                            enum:
                              - ready
                              - failed
                          sourceDigest:
                            type: string
                            pattern: ^sha256:[a-f0-9]{64}$
                          resourceDigest:
                            anyOf:
                              - type: string
                                pattern: ^sha256:[a-f0-9]{64}$
                              - type: 'null'
                          outputSchemaDigest:
                            type: string
                            pattern: ^sha256:[a-f0-9]{64}$
                          csp:
                            type: object
                            properties:
                              connectDomains:
                                minItems: 0
                                maxItems: 0
                                type: array
                                items:
                                  type: string
                              resourceDomains:
                                minItems: 0
                                maxItems: 0
                                type: array
                                items:
                                  type: string
                              frameDomains:
                                minItems: 0
                                maxItems: 0
                                type: array
                                items:
                                  type: string
                              baseUriDomains:
                                minItems: 0
                                maxItems: 0
                                type: array
                                items:
                                  type: string
                            required:
                              - connectDomains
                              - resourceDomains
                              - frameDomains
                              - baseUriDomains
                          diagnostics:
                            type: array
                            items:
                              type: object
                              properties:
                                level:
                                  type: string
                                  enum:
                                    - error
                                    - warning
                                message:
                                  type: string
                                  minLength: 1
                                  maxLength: 4000
                                line:
                                  anyOf:
                                    - type: integer
                                      exclusiveMinimum: 0
                                      maximum: 9007199254740991
                                    - type: 'null'
                                column:
                                  anyOf:
                                    - type: integer
                                      minimum: 0
                                      maximum: 9007199254740991
                                    - type: 'null'
                              required:
                                - level
                                - message
                                - line
                                - column
                          compilerName:
                            type: string
                            minLength: 1
                          compilerVersion:
                            type: string
                            minLength: 1
                          reactVersion:
                            type: string
                            minLength: 1
                          compiledHtmlBytes:
                            anyOf:
                              - type: integer
                                minimum: 0
                                maximum: 9007199254740991
                              - type: 'null'
                          retiredAt:
                            anyOf:
                              - type: string
                                format: date-time
                                pattern: >-
                                  ^(?:(?:\d\d[2468][048]|\d\d[13579][26]|\d\d0[48]|[02468][048]00|[13579][26]00)-02-29|\d{4}-(?:(?:0[13578]|1[02])-(?:0[1-9]|[12]\d|3[01])|(?:0[469]|11)-(?:0[1-9]|[12]\d|30)|(?:02)-(?:0[1-9]|1\d|2[0-8])))T(?:(?:[01]\d|2[0-3]):[0-5]\d(?::[0-5]\d(?:\.\d+)?)?(?:Z))$
                              - type: 'null'
                          createdAt:
                            type: string
                            format: date-time
                            pattern: >-
                              ^(?:(?:\d\d[2468][048]|\d\d[13579][26]|\d\d0[48]|[02468][048]00|[13579][26]00)-02-29|\d{4}-(?:(?:0[13578]|1[02])-(?:0[1-9]|[12]\d|3[01])|(?:0[469]|11)-(?:0[1-9]|[12]\d|30)|(?:02)-(?:0[1-9]|1\d|2[0-8])))T(?:(?:[01]\d|2[0-3]):[0-5]\d(?::[0-5]\d(?:\.\d+)?)?(?:Z))$
                        required:
                          - id
                          - artifactViewId
                          - resourceUri
                          - buildStatus
                          - sourceDigest
                          - resourceDigest
                          - outputSchemaDigest
                          - csp
                          - diagnostics
                          - compilerName
                          - compilerVersion
                          - reactVersion
                          - compiledHtmlBytes
                          - retiredAt
                          - createdAt
                      - type: 'null'
                  html:
                    anyOf:
                      - type: string
                      - type: 'null'
                  payload:
                    anyOf:
                      - type: object
                        properties:
                          schemaVersion:
                            type: string
                            const: '1'
                          artifact:
                            type: object
                            properties:
                              title:
                                type: string
                                minLength: 1
                                maxLength: 255
                              description:
                                anyOf:
                                  - type: string
                                  - type: 'null'
                              pluginId:
                                type: string
                                minLength: 1
                                maxLength: 160
                              configObjectId:
                                type: string
                                minLength: 1
                                maxLength: 160
                              configObjectVersionId:
                                type: string
                                minLength: 1
                                maxLength: 160
                              receiptId:
                                type: string
                                minLength: 1
                                maxLength: 160
                              automationRunId:
                                anyOf:
                                  - type: string
                                    minLength: 1
                                    maxLength: 160
                                  - type: 'null'
                              source:
                                type: string
                                enum:
                                  - manual
                                  - scheduled
                              generatedAt:
                                type: string
                                format: date-time
                                pattern: >-
                                  ^(?:(?:\d\d[2468][048]|\d\d[13579][26]|\d\d0[48]|[02468][048]00|[13579][26]00)-02-29|\d{4}-(?:(?:0[13578]|1[02])-(?:0[1-9]|[12]\d|3[01])|(?:0[469]|11)-(?:0[1-9]|[12]\d|30)|(?:02)-(?:0[1-9]|1\d|2[0-8])))T(?:(?:[01]\d|2[0-3]):[0-5]\d(?::[0-5]\d(?:\.\d+)?)?(?:Z))$
                              resultDigest:
                                type: string
                                pattern: ^sha256:[a-f0-9]{64}$
                              rendererVersion:
                                type: string
                                const: codemode-markdown-v1
                              freshness:
                                oneOf:
                                  - type: object
                                    properties:
                                      state:
                                        type: string
                                        const: never_run
                                    required:
                                      - state
                                  - type: object
                                    properties:
                                      state:
                                        type: string
                                        const: fresh
                                      ageMs:
                                        type: integer
                                        minimum: 0
                                        maximum: 9007199254740991
                                    required:
                                      - state
                                      - ageMs
                                  - type: object
                                    properties:
                                      state:
                                        type: string
                                        const: stale
                                      ageMs:
                                        type: integer
                                        minimum: 0
                                        maximum: 9007199254740991
                                      maxAgeMs:
                                        type: integer
                                        exclusiveMinimum: 0
                                        maximum: 9007199254740991
                                    required:
                                      - state
                                      - ageMs
                                      - maxAgeMs
                                  - type: object
                                    properties:
                                      state:
                                        type: string
                                        const: needs_attention
                                      ageMs:
                                        anyOf:
                                          - type: integer
                                            minimum: 0
                                            maximum: 9007199254740991
                                          - type: 'null'
                                      lastSuccessfulReceiptId:
                                        anyOf:
                                          - type: string
                                            minLength: 1
                                            maxLength: 160
                                          - type: 'null'
                                      reason:
                                        type: string
                                        minLength: 1
                                        maxLength: 2000
                                    required:
                                      - state
                                      - ageMs
                                      - lastSuccessfulReceiptId
                                      - reason
                            required:
                              - title
                              - description
                              - pluginId
                              - configObjectId
                              - configObjectVersionId
                              - receiptId
                              - automationRunId
                              - source
                              - generatedAt
                              - resultDigest
                              - rendererVersion
                              - freshness
                          data: {}
                        required:
                          - schemaVersion
                          - artifact
                          - data
                      - type: 'null'
                  previewNotice:
                    anyOf:
                      - type: string
                      - type: 'null'
                required:
                  - view
                  - workflowTitle
                  - canManage
                  - onDashboard
                  - revision
                  - html
                  - payload
                  - previewNotice
      security:
        - bearerAuth: []
        - denApiKey: []
components:
  securitySchemes:
    bearerAuth:
      type: http
      scheme: bearer
      bearerFormat: session-token
      description: >-
        Session token passed as `Authorization: Bearer <session-token>` for
        user-authenticated Den routes.
    denApiKey:
      type: apiKey
      in: header
      name: x-api-key
      description: >-
        Organization API key passed as the `x-api-key` header. The raw key is
        the header value; do not prefix it with `Bearer`.

````