{
  "openapi": "3.0.1",
  "info": {
    "title": "NGT-Render Managed Web API",
    "description": "A Linux-hostable ASP.NET Core host for the native Ngt renderer, browser demo, and OpenAPI docs.",
    "version": "v1"
  },
  "paths": {
    "/api/session": {
      "get": {
        "tags": [
          "Accounts"
        ],
        "summary": "Get current session",
        "description": "Returns the currently signed-in user if a valid session cookie is present.",
        "operationId": "GetSession",
        "parameters": [
          {
            "name": "X-Api-Key",
            "in": "header",
            "description": "Optional for the free tier. Use it to unlock premium request limits.",
            "schema": {
              "type": "string"
            }
          }
        ],
        "responses": {
          "200": {
            "description": "OK",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/SessionInfoDto"
                }
              }
            }
          }
        }
      }
    },
    "/api/auth/login": {
      "post": {
        "tags": [
          "Accounts"
        ],
        "summary": "Sign in",
        "description": "Creates a signed session cookie for a valid email and password.",
        "operationId": "Login",
        "parameters": [
          {
            "name": "X-Api-Key",
            "in": "header",
            "description": "Optional for the free tier. Use it to unlock premium request limits.",
            "schema": {
              "type": "string"
            }
          }
        ],
        "requestBody": {
          "content": {
            "application/json": {
              "schema": {
                "$ref": "#/components/schemas/LoginRequest"
              }
            }
          },
          "required": true
        },
        "responses": {
          "200": {
            "description": "OK",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/AuthResponseDto"
                }
              }
            }
          },
          "400": {
            "description": "Bad Request",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ProblemDetails"
                }
              }
            }
          }
        }
      }
    },
    "/api/auth/register": {
      "post": {
        "tags": [
          "Accounts"
        ],
        "summary": "Create an account",
        "description": "Creates a new local account and signs the user in immediately.",
        "operationId": "Register",
        "parameters": [
          {
            "name": "X-Api-Key",
            "in": "header",
            "description": "Optional for the free tier. Use it to unlock premium request limits.",
            "schema": {
              "type": "string"
            }
          }
        ],
        "requestBody": {
          "content": {
            "application/json": {
              "schema": {
                "$ref": "#/components/schemas/RegisterRequest"
              }
            }
          },
          "required": true
        },
        "responses": {
          "200": {
            "description": "OK",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/AuthResponseDto"
                }
              }
            }
          },
          "400": {
            "description": "Bad Request",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ProblemDetails"
                }
              }
            }
          }
        }
      }
    },
    "/api/auth/logout": {
      "post": {
        "tags": [
          "Accounts"
        ],
        "summary": "Sign out",
        "description": "Clears the session cookie and invalidates the current session.",
        "operationId": "Logout",
        "parameters": [
          {
            "name": "X-Api-Key",
            "in": "header",
            "description": "Optional for the free tier. Use it to unlock premium request limits.",
            "schema": {
              "type": "string"
            }
          }
        ],
        "responses": {
          "200": {
            "description": "OK",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/AuthResponseDto"
                }
              }
            }
          }
        }
      }
    },
    "/api/account": {
      "get": {
        "tags": [
          "Accounts"
        ],
        "summary": "Get account profile",
        "description": "Returns the signed-in user's profile details.",
        "operationId": "GetAccount",
        "parameters": [
          {
            "name": "X-Api-Key",
            "in": "header",
            "description": "Optional for the free tier. Use it to unlock premium request limits.",
            "schema": {
              "type": "string"
            }
          }
        ],
        "responses": {
          "200": {
            "description": "OK",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/UserProfileDto"
                }
              }
            }
          },
          "401": {
            "description": "Unauthorized"
          }
        }
      },
      "put": {
        "tags": [
          "Accounts"
        ],
        "summary": "Update profile",
        "description": "Updates the current user's email address and display name.",
        "operationId": "UpdateAccount",
        "parameters": [
          {
            "name": "X-Api-Key",
            "in": "header",
            "description": "Optional for the free tier. Use it to unlock premium request limits.",
            "schema": {
              "type": "string"
            }
          }
        ],
        "requestBody": {
          "content": {
            "application/json": {
              "schema": {
                "$ref": "#/components/schemas/UpdateAccountRequest"
              }
            }
          },
          "required": true
        },
        "responses": {
          "200": {
            "description": "OK",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/AuthResponseDto"
                }
              }
            }
          },
          "400": {
            "description": "Bad Request",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ProblemDetails"
                }
              }
            }
          },
          "401": {
            "description": "Unauthorized"
          }
        }
      }
    },
    "/api/account/password": {
      "post": {
        "tags": [
          "Accounts"
        ],
        "summary": "Change password",
        "description": "Updates the current user's password after verifying the existing one.",
        "operationId": "ChangePassword",
        "parameters": [
          {
            "name": "X-Api-Key",
            "in": "header",
            "description": "Optional for the free tier. Use it to unlock premium request limits.",
            "schema": {
              "type": "string"
            }
          }
        ],
        "requestBody": {
          "content": {
            "application/json": {
              "schema": {
                "$ref": "#/components/schemas/ChangePasswordRequest"
              }
            }
          },
          "required": true
        },
        "responses": {
          "200": {
            "description": "OK",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/AuthResponseDto"
                }
              }
            }
          },
          "400": {
            "description": "Bad Request",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ProblemDetails"
                }
              }
            }
          },
          "401": {
            "description": "Unauthorized"
          }
        }
      }
    },
    "/api/feedback": {
      "post": {
        "tags": [
          "Accounts"
        ],
        "summary": "Send feedback",
        "description": "Stores feedback locally and optionally sends it through the configured SMTP server.",
        "operationId": "SaveFeedback",
        "parameters": [
          {
            "name": "X-Api-Key",
            "in": "header",
            "description": "Optional for the free tier. Use it to unlock premium request limits.",
            "schema": {
              "type": "string"
            }
          }
        ],
        "requestBody": {
          "content": {
            "application/json": {
              "schema": {
                "$ref": "#/components/schemas/FeedbackRequest"
              }
            }
          },
          "required": true
        },
        "responses": {
          "200": {
            "description": "OK"
          },
          "400": {
            "description": "Bad Request",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ProblemDetails"
                }
              }
            }
          }
        }
      }
    },
    "/api/project-settings": {
      "get": {
        "tags": [
          "Accounts"
        ],
        "summary": "Get project settings",
        "description": "Returns the shared project settings, including SMTP configuration, for signed-in users.",
        "operationId": "GetProjectSettings",
        "parameters": [
          {
            "name": "X-Api-Key",
            "in": "header",
            "description": "Optional for the free tier. Use it to unlock premium request limits.",
            "schema": {
              "type": "string"
            }
          }
        ],
        "responses": {
          "200": {
            "description": "OK",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ProjectSettingsDto"
                }
              }
            }
          },
          "401": {
            "description": "Unauthorized"
          }
        }
      },
      "put": {
        "tags": [
          "Accounts"
        ],
        "summary": "Update project settings",
        "description": "Updates the shared project settings, including support email and SMTP delivery details.",
        "operationId": "UpdateProjectSettings",
        "parameters": [
          {
            "name": "X-Api-Key",
            "in": "header",
            "description": "Optional for the free tier. Use it to unlock premium request limits.",
            "schema": {
              "type": "string"
            }
          }
        ],
        "requestBody": {
          "content": {
            "application/json": {
              "schema": {
                "$ref": "#/components/schemas/ProjectSettingsUpdateRequest"
              }
            }
          },
          "required": true
        },
        "responses": {
          "200": {
            "description": "OK",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ProjectSettingsDto"
                }
              }
            }
          },
          "401": {
            "description": "Unauthorized"
          }
        }
      }
    },
    "/api/keys": {
      "post": {
        "tags": [
          "NGT-Render-Managed-Web"
        ],
        "summary": "Issue an API key",
        "description": "Issues a Plus or Business API key for authorized operator tooling and returns the raw value once.",
        "operationId": "CreateApiKey",
        "parameters": [
          {
            "name": "X-Api-Key",
            "in": "header",
            "description": "Optional for the free tier. Use it to unlock premium request limits.",
            "schema": {
              "type": "string"
            }
          }
        ],
        "requestBody": {
          "content": {
            "application/json": {
              "schema": {
                "$ref": "#/components/schemas/ApiKeyCreateRequest"
              },
              "example": {
                "plan": "plus",
                "label": "ManagedWeb demo"
              }
            }
          }
        },
        "responses": {
          "200": {
            "description": "OK"
          }
        }
      }
    },
    "/health": {
      "get": {
        "tags": [
          "Operations"
        ],
        "summary": "Health check",
        "description": "Returns a tiny payload that confirms the web host is alive.",
        "operationId": "Health",
        "responses": {
          "200": {
            "description": "OK",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/HealthResponse"
                }
              }
            }
          }
        }
      }
    },
    "/api/instance": {
      "get": {
        "tags": [
          "Operations"
        ],
        "summary": "Get instance profile",
        "description": "Returns the current deployment profile, including subscription state, customer metadata, and HA node info.",
        "operationId": "GetInstance",
        "parameters": [
          {
            "name": "X-Api-Key",
            "in": "header",
            "description": "Optional for the free tier. Use it to unlock premium request limits.",
            "schema": {
              "type": "string"
            }
          }
        ],
        "responses": {
          "200": {
            "description": "OK",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/InstanceProfileDto"
                }
              }
            }
          }
        }
      }
    },
    "/api/instance/provisioning": {
      "get": {
        "tags": [
          "Operations"
        ],
        "summary": "Get provisioning manifest",
        "description": "Returns a ready-to-use provisioning manifest with environment variables, checklist items, and offboarding steps.",
        "operationId": "GetInstanceProvisioning",
        "parameters": [
          {
            "name": "X-Api-Key",
            "in": "header",
            "description": "Optional for the free tier. Use it to unlock premium request limits.",
            "schema": {
              "type": "string"
            }
          }
        ],
        "responses": {
          "200": {
            "description": "OK",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/InstanceProvisioningManifestDto"
                }
              }
            }
          }
        }
      }
    },
    "/api/instance/provision": {
      "post": {
        "tags": [
          "Operations"
        ],
        "summary": "Provision or update a customer instance",
        "description": "Seeds the local deployment profile for a new customer instance or updates the existing one on this server.",
        "operationId": "ProvisionInstance",
        "parameters": [
          {
            "name": "X-Api-Key",
            "in": "header",
            "description": "Optional for the free tier. Use it to unlock premium request limits.",
            "schema": {
              "type": "string"
            }
          }
        ],
        "requestBody": {
          "content": {
            "application/json": {
              "schema": {
                "$ref": "#/components/schemas/InstanceProvisionRequest"
              }
            }
          },
          "required": true
        },
        "responses": {
          "200": {
            "description": "OK",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/InstanceProfileDto"
                }
              }
            }
          },
          "401": {
            "description": "Unauthorized"
          }
        }
      }
    },
    "/api/instance/cancel": {
      "post": {
        "tags": [
          "Operations"
        ],
        "summary": "Cancel the active subscription",
        "description": "Marks the current instance as cancelled and blocks normal traffic until it is reactivated by an operator.",
        "operationId": "CancelInstance",
        "parameters": [
          {
            "name": "X-Api-Key",
            "in": "header",
            "description": "Optional for the free tier. Use it to unlock premium request limits.",
            "schema": {
              "type": "string"
            }
          }
        ],
        "requestBody": {
          "content": {
            "application/json": {
              "schema": {
                "$ref": "#/components/schemas/InstanceCancelRequest"
              }
            }
          },
          "required": true
        },
        "responses": {
          "200": {
            "description": "OK",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/InstanceProfileDto"
                }
              }
            }
          },
          "401": {
            "description": "Unauthorized"
          }
        }
      }
    },
    "/api/instance/reactivate": {
      "post": {
        "tags": [
          "Operations"
        ],
        "summary": "Reactivate the subscription",
        "description": "Restores normal access for a previously cancelled customer instance.",
        "operationId": "ReactivateInstance",
        "parameters": [
          {
            "name": "X-Api-Key",
            "in": "header",
            "description": "Optional for the free tier. Use it to unlock premium request limits.",
            "schema": {
              "type": "string"
            }
          }
        ],
        "requestBody": {
          "content": {
            "application/json": {
              "schema": {
                "$ref": "#/components/schemas/InstanceCancelRequest"
              }
            }
          },
          "required": true
        },
        "responses": {
          "200": {
            "description": "OK",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/InstanceProfileDto"
                }
              }
            }
          },
          "401": {
            "description": "Unauthorized"
          }
        }
      }
    },
    "/api/render": {
      "post": {
        "tags": [
          "Rendering"
        ],
        "summary": "Render Ngt",
        "description": "Renders Ngt through the native engine and returns normalized Ngt, a tree view, element metadata, and optional BGRA bytes.",
        "operationId": "RenderNgt",
        "parameters": [
          {
            "name": "X-Api-Key",
            "in": "header",
            "description": "Optional for the free tier. Use it to unlock premium request limits.",
            "schema": {
              "type": "string"
            }
          }
        ],
        "requestBody": {
          "content": {
            "application/json": {
              "schema": {
                "$ref": "#/components/schemas/RenderRequest"
              },
              "example": {
                "Ngt": "~1000123\\u001bFDoc002    \\u001b#T05000900018700Fdddddddddddddddddddddddddd\\u000b36L000\\u001b#T05000900038100Fddddddddddddddddddddddddddd\\u000b36L000\\u00ff\\u001bQ00000",
                "options": {
                  "sourceDpi": 203,
                  "targetDpi": 203,
                  "canvasWidth": 960,
                  "canvasHeight": 1200,
                  "preserveComments": true,
                  "includeUnknownCommands": true,
                  "prettyPrint": true,
                  "wrapInFormat": true,
                  "renderBackground": true,
                  "backgroundArgb": 4294967295,
                  "foregroundArgb": 4278190080
                },
                "includeImage": true
              }
            }
          },
          "required": true
        },
        "responses": {
          "200": {
            "description": "OK",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/RenderResponse"
                },
                "example": {
                  "error": "",
                  "tree": "[000] Header ~1000123\n[001] Label Doc002\n[002] Printable Text Doc002",
                  "normalizedNgt": "~1000123\\u001bFDoc002    \\u001b#T05000900018700Fdddddddddddddddddddddddddd\\u000b36L000\\u001b#T05000900038100Fddddddddddddddddddddddddddd\\u000b36L000\\u00ff\\u001bQ00000",
                  "imageWidth": 960,
                  "imageHeight": 1200,
                  "imageStride": 3840,
                  "pixelFormat": "Bgra32",
                  "imageBytes": [ ],
                  "elements": [
                    {
                      "type": "Printable",
                      "id": "#T@002",
                      "summary": "Text Doc002"
                    }
                  ]
                }
              }
            }
          },
          "400": {
            "description": "Bad Request",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ProblemDetails"
                }
              }
            }
          }
        }
      }
    },
    "/api/render/batch": {
      "post": {
        "tags": [
          "Rendering"
        ],
        "summary": "Render a batch of labels",
        "description": "Processes many labels in one request and parallelizes the workload across the native renderer pool.",
        "operationId": "RenderBatch",
        "parameters": [
          {
            "name": "X-Api-Key",
            "in": "header",
            "description": "Optional for the free tier. Use it to unlock premium request limits.",
            "schema": {
              "type": "string"
            }
          }
        ],
        "requestBody": {
          "content": {
            "application/json": {
              "schema": {
                "$ref": "#/components/schemas/RenderBatchRequest"
              },
              "example": {
                "items": [
                  {
                    "Ngt": "~1000123\\u001bFDoc002    \\u001b#T05000900018700Fdddddddddddddddddddddddddd\\u000b36L000\\u001b#T05000900038100Fddddddddddddddddddddddddddd\\u000b36L000\\u00ff\\u001bQ00000",
                    "includeImage": true
                  },
                  {
                    "Ngt": "~1000123\\u001bFDoc002    \\u001b#T05000900018700Fdddddddddddddddddddddddddd\\u000b36L000\\u001b#T05000900038100Fddddddddddddddddddddddddddd\\u000b36L000\\u00ff\\u001bQ00000",
                    "includeImage": true
                  }
                ]
              }
            }
          },
          "required": true
        },
        "responses": {
          "200": {
            "description": "OK",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/RenderBatchResponse"
                },
                "example": {
                  "items": [
                    {
                      "error": "",
                      "tree": "[000] Header ~1000123\n[001] Label Doc002",
                      "normalizedNgt": "~1000123\\u001bFDoc002    \\u001b#T05000900018700Fdddddddddddddddddddddddddd\\u000b36L000\\u001b#T05000900038100Fddddddddddddddddddddddddddd\\u000b36L000\\u00ff\\u001bQ00000",
                      "imageWidth": 0,
                      "imageHeight": 0,
                      "imageStride": 0,
                      "pixelFormat": "Bgra32",
                      "imageBytes": null,
                      "elements": [ ]
                    },
                    {
                      "error": "",
                      "tree": "[000] Header ~1000123\n[001] Label Doc002",
                      "normalizedNgt": "~1000123\\u001bFDoc002    \\u001b#T05000900018700Fdddddddddddddddddddddddddd\\u000b36L000\\u001b#T05000900038100Fddddddddddddddddddddddddddd\\u000b36L000\\u00ff\\u001bQ00000",
                      "imageWidth": 0,
                      "imageHeight": 0,
                      "imageStride": 0,
                      "pixelFormat": "Bgra32",
                      "imageBytes": null,
                      "elements": [ ]
                    }
                  ]
                }
              }
            }
          },
          "400": {
            "description": "Bad Request",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ProblemDetails"
                }
              }
            }
          }
        }
      }
    }
  },
  "components": {
    "schemas": {
      "ApiKeyCreateRequest": {
        "type": "object",
        "properties": {
          "plan": {
            "type": "string",
            "description": "Requested plan. Supported values are `plus` and `business`.",
            "nullable": true
          },
          "label": {
            "type": "string",
            "description": "Optional label to help identify the key later.",
            "nullable": true
          }
        },
        "additionalProperties": false,
        "description": "Input model for API key generation."
      },
      "AuthResponseDto": {
        "type": "object",
        "properties": {
          "success": {
            "type": "boolean"
          },
          "message": {
            "type": "string",
            "nullable": true
          },
          "user": {
            "$ref": "#/components/schemas/UserProfileDto"
          }
        },
        "additionalProperties": false
      },
      "ChangePasswordRequest": {
        "type": "object",
        "properties": {
          "currentPassword": {
            "type": "string",
            "nullable": true
          },
          "newPassword": {
            "type": "string",
            "nullable": true
          }
        },
        "additionalProperties": false
      },
      "FeedbackRequest": {
        "type": "object",
        "properties": {
          "kind": {
            "type": "string",
            "nullable": true
          },
          "subject": {
            "type": "string",
            "nullable": true
          },
          "message": {
            "type": "string",
            "nullable": true
          },
          "email": {
            "type": "string",
            "nullable": true
          }
        },
        "additionalProperties": false
      },
      "HealthResponse": {
        "type": "object",
        "properties": {
          "service": {
            "type": "string",
            "description": "Service name.",
            "nullable": true
          },
          "status": {
            "type": "string",
            "description": "Current health state.",
            "nullable": true
          },
          "timestampUtc": {
            "type": "string",
            "description": "UTC timestamp at the time of the check.",
            "format": "date-time"
          }
        },
        "additionalProperties": false,
        "description": "Lightweight health payload for infrastructure checks and smoke tests."
      },
      "InstanceCancelRequest": {
        "type": "object",
        "properties": {
          "cancelReason": {
            "type": "string",
            "nullable": true
          }
        },
        "additionalProperties": false
      },
      "InstanceNodeDto": {
        "type": "object",
        "properties": {
          "name": {
            "type": "string",
            "nullable": true
          },
          "role": {
            "type": "string",
            "nullable": true
          },
          "baseUrl": {
            "type": "string",
            "nullable": true
          },
          "healthUrl": {
            "type": "string",
            "nullable": true
          },
          "status": {
            "type": "string",
            "nullable": true
          }
        },
        "additionalProperties": false
      },
      "InstanceProfileDto": {
        "type": "object",
        "properties": {
          "instanceId": {
            "type": "string",
            "nullable": true
          },
          "customerName": {
            "type": "string",
            "nullable": true
          },
          "customerEmail": {
            "type": "string",
            "nullable": true
          },
          "planCode": {
            "type": "string",
            "nullable": true
          },
          "instanceMode": {
            "type": "string",
            "nullable": true
          },
          "status": {
            "type": "string",
            "nullable": true
          },
          "primaryUrl": {
            "type": "string",
            "nullable": true
          },
          "healthUrl": {
            "type": "string",
            "nullable": true
          },
          "supportEmail": {
            "type": "string",
            "nullable": true
          },
          "highAvailabilityEnabled": {
            "type": "boolean"
          },
          "replicaCount": {
            "type": "integer",
            "format": "int32"
          },
          "region": {
            "type": "string",
            "nullable": true
          },
          "notes": {
            "type": "string",
            "nullable": true
          },
          "createdUtc": {
            "type": "string",
            "nullable": true
          },
          "updatedUtc": {
            "type": "string",
            "nullable": true
          },
          "cancelledUtc": {
            "type": "string",
            "nullable": true
          },
          "cancelReason": {
            "type": "string",
            "nullable": true
          },
          "nodes": {
            "type": "array",
            "items": {
              "$ref": "#/components/schemas/InstanceNodeDto"
            },
            "nullable": true
          }
        },
        "additionalProperties": false
      },
      "InstanceProvisionRequest": {
        "type": "object",
        "properties": {
          "customerName": {
            "type": "string",
            "nullable": true
          },
          "customerEmail": {
            "type": "string",
            "nullable": true
          },
          "planCode": {
            "type": "string",
            "nullable": true
          },
          "instanceMode": {
            "type": "string",
            "nullable": true
          },
          "status": {
            "type": "string",
            "nullable": true
          },
          "primaryUrl": {
            "type": "string",
            "nullable": true
          },
          "healthUrl": {
            "type": "string",
            "nullable": true
          },
          "supportEmail": {
            "type": "string",
            "nullable": true
          },
          "highAvailabilityEnabled": {
            "type": "boolean",
            "nullable": true
          },
          "replicaCount": {
            "type": "integer",
            "format": "int32",
            "nullable": true
          },
          "region": {
            "type": "string",
            "nullable": true
          },
          "notes": {
            "type": "string",
            "nullable": true
          },
          "nodes": {
            "type": "array",
            "items": {
              "$ref": "#/components/schemas/InstanceNodeDto"
            },
            "nullable": true
          }
        },
        "additionalProperties": false
      },
      "InstanceProvisioningManifestDto": {
        "type": "object",
        "properties": {
          "instance": {
            "$ref": "#/components/schemas/InstanceProfileDto"
          },
          "environment": {
            "type": "object",
            "additionalProperties": {
              "type": "string"
            },
            "nullable": true
          },
          "checklist": {
            "type": "array",
            "items": {
              "type": "string"
            },
            "nullable": true
          },
          "offboardingSteps": {
            "type": "array",
            "items": {
              "type": "string"
            },
            "nullable": true
          },
          "generatedUtc": {
            "type": "string",
            "format": "date-time"
          }
        },
        "additionalProperties": false
      },
      "LoginRequest": {
        "type": "object",
        "properties": {
          "email": {
            "type": "string",
            "nullable": true
          },
          "password": {
            "type": "string",
            "nullable": true
          }
        },
        "additionalProperties": false
      },
      "ProblemDetails": {
        "type": "object",
        "properties": {
          "type": {
            "type": "string",
            "nullable": true
          },
          "title": {
            "type": "string",
            "nullable": true
          },
          "status": {
            "type": "integer",
            "format": "int32",
            "nullable": true
          },
          "detail": {
            "type": "string",
            "nullable": true
          },
          "instance": {
            "type": "string",
            "nullable": true
          }
        },
        "additionalProperties": { }
      },
      "ProjectSettingsDto": {
        "type": "object",
        "properties": {
          "supportEmail": {
            "type": "string",
            "nullable": true
          },
          "downloadAppUrl": {
            "type": "string",
            "nullable": true
          },
          "upgradeAccountUrl": {
            "type": "string",
            "nullable": true
          },
          "smtpHost": {
            "type": "string",
            "nullable": true
          },
          "smtpPort": {
            "type": "integer",
            "format": "int32"
          },
          "smtpUseSsl": {
            "type": "boolean"
          },
          "smtpUsername": {
            "type": "string",
            "nullable": true
          },
          "hasSmtpPassword": {
            "type": "boolean"
          },
          "smtpFromEmail": {
            "type": "string",
            "nullable": true
          },
          "smtpFromName": {
            "type": "string",
            "nullable": true
          },
          "sendRegistrationEmails": {
            "type": "boolean"
          },
          "sendFeedbackEmails": {
            "type": "boolean"
          }
        },
        "additionalProperties": false
      },
      "ProjectSettingsUpdateRequest": {
        "type": "object",
        "properties": {
          "supportEmail": {
            "type": "string",
            "nullable": true
          },
          "downloadAppUrl": {
            "type": "string",
            "nullable": true
          },
          "upgradeAccountUrl": {
            "type": "string",
            "nullable": true
          },
          "smtpHost": {
            "type": "string",
            "nullable": true
          },
          "smtpPort": {
            "type": "integer",
            "format": "int32",
            "nullable": true
          },
          "smtpUseSsl": {
            "type": "boolean",
            "nullable": true
          },
          "smtpUsername": {
            "type": "string",
            "nullable": true
          },
          "smtpPassword": {
            "type": "string",
            "nullable": true
          },
          "smtpFromEmail": {
            "type": "string",
            "nullable": true
          },
          "smtpFromName": {
            "type": "string",
            "nullable": true
          },
          "sendRegistrationEmails": {
            "type": "boolean",
            "nullable": true
          },
          "sendFeedbackEmails": {
            "type": "boolean",
            "nullable": true
          }
        },
        "additionalProperties": false
      },
      "RegisterRequest": {
        "type": "object",
        "properties": {
          "email": {
            "type": "string",
            "nullable": true
          },
          "displayName": {
            "type": "string",
            "nullable": true
          },
          "password": {
            "type": "string",
            "nullable": true
          }
        },
        "additionalProperties": false
      },
      "RenderBatchRequest": {
        "type": "object",
        "properties": {
          "items": {
            "type": "array",
            "items": {
              "$ref": "#/components/schemas/RenderRequest"
            },
            "description": "The render jobs to execute.",
            "nullable": true
          }
        },
        "additionalProperties": false,
        "description": "Represents a high-throughput batch render request."
      },
      "RenderBatchResponse": {
        "type": "object",
        "properties": {
          "items": {
            "type": "array",
            "items": {
              "$ref": "#/components/schemas/RenderResponse"
            },
            "description": "The render results in the same order as the input items.",
            "nullable": true
          }
        },
        "additionalProperties": false,
        "description": "Represents the response returned by the batch render endpoint."
      },
      "RenderElementResponse": {
        "type": "object",
        "properties": {
          "type": {
            "type": "string",
            "description": "The high-level command type.",
            "nullable": true
          },
          "id": {
            "type": "string",
            "description": "A stable identifier derived from the command tag and offset.",
            "nullable": true
          },
          "summary": {
            "type": "string",
            "description": "A compact human-readable summary.",
            "nullable": true
          }
        },
        "additionalProperties": false,
        "description": "Describes one rendered element in the output tree."
      },
      "RenderOptionsRequest": {
        "type": "object",
        "properties": {
          "sourceDpi": {
            "type": "integer",
            "description": "Optional source density used by the browser preview layout.",
            "format": "int32",
            "nullable": true
          },
          "targetDpi": {
            "type": "integer",
            "description": "Optional target density used by the browser preview layout.",
            "format": "int32",
            "nullable": true
          },
          "canvasWidth": {
            "type": "integer",
            "description": "Optional output width in pixels.",
            "format": "int32",
            "nullable": true
          },
          "canvasHeight": {
            "type": "integer",
            "description": "Optional output height in pixels.",
            "format": "int32",
            "nullable": true
          },
          "preserveComments": {
            "type": "boolean",
            "description": "Controls whether comments are preserved while normalizing the label text.",
            "nullable": true
          },
          "includeUnknownCommands": {
            "type": "boolean",
            "description": "Controls whether unknown commands are preserved while normalizing the label text.",
            "nullable": true
          },
          "prettyPrint": {
            "type": "boolean",
            "description": "Controls whether the normalized label text is formatted with line breaks.",
            "nullable": true
          },
          "wrapInFormat": {
            "type": "boolean",
            "description": "Controls whether the renderer wraps the label in its formatting markers.",
            "nullable": true
          },
          "renderBackground": {
            "type": "boolean",
            "description": "Controls whether the preview canvas is initialized with a solid background.",
            "nullable": true
          },
          "backgroundArgb": {
            "type": "integer",
            "description": "Optional ARGB background color in `0xAARRGGBB` form.",
            "format": "int32",
            "nullable": true
          },
          "foregroundArgb": {
            "type": "integer",
            "description": "Optional ARGB foreground color in `0xAARRGGBB` form.",
            "format": "int32",
            "nullable": true
          },
          "fontPath": {
            "type": "string",
            "description": "Optional font path passed to the renderer.",
            "nullable": true
          },
          "printer": {
            "type": "string",
            "description": "Optional printer model such as `NG8CM`.",
            "nullable": true
          },
          "trim": {
            "type": "boolean",
            "description": "Controls whether the renderer trims whitespace around the output.",
            "nullable": true
          },
          "showVariablesPath": {
            "type": "string",
            "description": "Optional path to a variable definition file.",
            "nullable": true
          },
          "rendererExecutablePath": {
            "type": "string",
            "description": "Optional renderer executable path override.",
            "nullable": true
          },
          "timeoutSeconds": {
            "type": "integer",
            "description": "Optional timeout in seconds for the external renderer process.",
            "format": "int32",
            "nullable": true
          }
        },
        "additionalProperties": false,
        "description": "Captures the per-request render settings mapped to the external NGT renderer."
      },
      "RenderRequest": {
        "type": "object",
        "properties": {
          "ngt": {
            "type": "string",
            "description": "The NGT payload to render.",
            "nullable": true
          },
          "ngtBytes": {
            "type": "string",
            "description": "Optional binary-safe NGT payload encoded as Base64. When present, this takes precedence over NgtRender.Managed.Web.RenderRequest.Ngt.",
            "format": "byte",
            "nullable": true
          },
          "options": {
            "$ref": "#/components/schemas/RenderOptionsRequest"
          },
          "includeImage": {
            "type": "boolean",
            "description": "When `true`, the response includes the rendered BGRA image bytes."
          }
        },
        "additionalProperties": false,
        "description": "Represents the request body accepted by the render endpoint."
      },
      "RenderResponse": {
        "type": "object",
        "properties": {
          "error": {
            "type": "string",
            "description": "Any render error emitted by the renderer.",
            "nullable": true
          },
          "tree": {
            "type": "string",
            "description": "The command tree produced by the parser.",
            "nullable": true
          },
          "normalizedNgt": {
            "type": "string",
            "description": "The normalized NGT output generated for the caller.",
            "nullable": true
          },
          "imageWidth": {
            "type": "integer",
            "description": "The rendered image width in pixels.",
            "format": "int32"
          },
          "imageHeight": {
            "type": "integer",
            "description": "The rendered image height in pixels.",
            "format": "int32"
          },
          "imageStride": {
            "type": "integer",
            "description": "The number of bytes per image row.",
            "format": "int32"
          },
          "pixelFormat": {
            "type": "string",
            "description": "The pixel format used by NgtRender.Managed.Web.RenderResponse.ImageBytes.",
            "nullable": true
          },
          "imageBytes": {
            "type": "string",
            "description": "The BGRA image bytes. This property is omitted when the request disables image output.",
            "format": "byte",
            "nullable": true
          },
          "elements": {
            "type": "array",
            "items": {
              "$ref": "#/components/schemas/RenderElementResponse"
            },
            "description": "Metadata for each recognized command in the input label.",
            "nullable": true
          }
        },
        "additionalProperties": false,
        "description": "Represents the JSON response returned by the render endpoint."
      },
      "SessionInfoDto": {
        "type": "object",
        "properties": {
          "authenticated": {
            "type": "boolean"
          },
          "user": {
            "$ref": "#/components/schemas/UserProfileDto"
          }
        },
        "additionalProperties": false
      },
      "UpdateAccountRequest": {
        "type": "object",
        "properties": {
          "email": {
            "type": "string",
            "nullable": true
          },
          "displayName": {
            "type": "string",
            "nullable": true
          }
        },
        "additionalProperties": false
      },
      "UserProfileDto": {
        "type": "object",
        "properties": {
          "id": {
            "type": "string",
            "nullable": true
          },
          "email": {
            "type": "string",
            "nullable": true
          },
          "displayName": {
            "type": "string",
            "nullable": true
          },
          "createdUtc": {
            "type": "string",
            "nullable": true
          },
          "updatedUtc": {
            "type": "string",
            "nullable": true
          }
        },
        "additionalProperties": false
      }
    }
  }
}