{
  "components": {
    "schemas": {
      "Checkout": {
        "allOf": [
          {
            "$ref": "#/components/schemas/Order"
          },
          {
            "properties": {
              "checkout_url": {
                "format": "uri",
                "type": "string"
              },
              "fulfillment": {
                "type": "string"
              }
            },
            "required": [
              "fulfillment"
            ],
            "type": "object"
          }
        ]
      },
      "Credential": {
        "properties": {
          "license_key": {
            "description": "Solo per l'SDK ufficiale; non autorizzare mai l'accesso esaminando questo valore.",
            "type": "string",
            "x-sensitive": true
          },
          "product_id": {
            "format": "uuid",
            "type": "string"
          },
          "valid_until": {
            "format": "date-time",
            "type": [
              "string",
              "null"
            ]
          },
          "version": {
            "minimum": 1,
            "type": "integer"
          }
        },
        "required": [
          "product_id",
          "license_key",
          "valid_until",
          "version"
        ],
        "type": "object"
      },
      "EntitlementStatus": {
        "properties": {
          "account_url": {
            "format": "uri",
            "type": "string"
          },
          "code": {
            "type": "string"
          },
          "environment": {
            "enum": [
              "sandbox",
              "live"
            ],
            "type": "string"
          },
          "max_retry_attempts": {
            "minimum": 0,
            "type": "integer"
          },
          "message": {
            "type": "string"
          },
          "next_action": {
            "type": "string"
          },
          "product_id": {
            "format": "uuid",
            "type": "string"
          },
          "retry_after_seconds": {
            "minimum": 0,
            "type": "integer"
          },
          "status": {
            "enum": [
              "ready",
              "pending",
              "expired",
              "suspended",
              "not_purchased"
            ],
            "type": "string"
          },
          "synchronized": {
            "type": "boolean"
          },
          "valid_from": {
            "format": "date-time",
            "type": [
              "string",
              "null"
            ]
          },
          "valid_until": {
            "format": "date-time",
            "type": [
              "string",
              "null"
            ]
          }
        },
        "required": [
          "product_id",
          "environment",
          "status",
          "code",
          "message",
          "next_action",
          "account_url",
          "synchronized",
          "retry_after_seconds",
          "max_retry_attempts"
        ],
        "type": "object"
      },
      "Error": {
        "properties": {
          "error": {
            "properties": {
              "code": {
                "type": "string"
              },
              "message": {
                "type": "string"
              }
            },
            "required": [
              "code",
              "message"
            ],
            "type": "object"
          },
          "request_id": {
            "$ref": "#/components/schemas/RequestID"
          }
        },
        "required": [
          "error",
          "request_id"
        ],
        "type": "object"
      },
      "ExternalCapabilities": {
        "additionalProperties": false,
        "properties": {
          "connection_ref": {
            "pattern": "^[A-Za-z0-9_.-]{1,128}$",
            "type": "string"
          },
          "delivery_types": {
            "items": {
              "enum": [
                "license_key",
                "activation_url",
                "instructions"
              ],
              "type": "string"
            },
            "minItems": 1,
            "type": "array"
          },
          "devices": {
            "const": false,
            "type": "boolean"
          },
          "environment": {
            "enum": [
              "sandbox",
              "live"
            ],
            "type": "string"
          },
          "identity_exchange": {
            "const": false,
            "type": "boolean"
          },
          "protocol": {
            "const": "launch-external-licensing-v1",
            "type": "string"
          },
          "purchase_types": {
            "items": {
              "enum": [
                "perpetual",
                "fixed_term"
              ],
              "type": "string"
            },
            "minItems": 1,
            "type": "array"
          }
        },
        "required": [
          "protocol",
          "connection_ref",
          "environment",
          "purchase_types",
          "delivery_types"
        ],
        "type": "object"
      },
      "ExternalCapabilitiesResponse": {
        "additionalProperties": false,
        "properties": {
          "data": {
            "$ref": "#/components/schemas/ExternalCapabilities"
          },
          "request_id": {
            "type": "string"
          }
        },
        "required": [
          "data"
        ],
        "type": "object"
      },
      "ExternalConnection": {
        "additionalProperties": false,
        "properties": {
          "activation_origins": {
            "items": {
              "format": "uri",
              "type": "string"
            },
            "type": "array"
          },
          "allow_local_http": {
            "type": "boolean"
          },
          "allow_private_network": {
            "type": "boolean"
          },
          "base_url": {
            "format": "uri",
            "type": "string"
          },
          "capabilities": {
            "$ref": "#/components/schemas/ExternalCapabilities"
          },
          "connection_ref": {
            "pattern": "^[A-Za-z0-9_.-]{1,128}$",
            "type": "string"
          },
          "credential_stored": {
            "type": "boolean"
          },
          "environment": {
            "enum": [
              "sandbox",
              "live"
            ],
            "type": "string"
          },
          "id": {
            "format": "uuid",
            "type": "string"
          },
          "key_id": {
            "type": "string"
          },
          "last_check_error": {
            "anyOf": [
              {
                "type": "string"
              },
              {
                "type": "null"
              }
            ]
          },
          "last_checked_at": {
            "anyOf": [
              {
                "format": "date-time",
                "type": "string"
              },
              {
                "type": "null"
              }
            ]
          },
          "name": {
            "type": "string"
          },
          "provider": {
            "const": "custom_http",
            "type": "string"
          }
        },
        "required": [
          "id",
          "provider",
          "name",
          "base_url",
          "environment",
          "connection_ref",
          "key_id",
          "credential_stored",
          "allow_private_network",
          "allow_local_http",
          "activation_origins",
          "capabilities",
          "last_checked_at",
          "last_check_error"
        ],
        "type": "object"
      },
      "ExternalConnectionInput": {
        "additionalProperties": false,
        "properties": {
          "activation_origins": {
            "items": {
              "format": "uri",
              "type": "string"
            },
            "type": "array"
          },
          "allow_local_http": {
            "default": false,
            "description": "È consentito soltanto HTTP su loopback in sandbox.",
            "type": "boolean"
          },
          "allow_private_network": {
            "default": false,
            "type": "boolean"
          },
          "base_url": {
            "format": "uri",
            "maxLength": 512,
            "type": "string"
          },
          "connection_ref": {
            "pattern": "^[A-Za-z0-9_.-]{1,128}$",
            "type": "string"
          },
          "environment": {
            "enum": [
              "sandbox",
              "live"
            ],
            "type": "string"
          },
          "key_id": {
            "maxLength": 64,
            "minLength": 1,
            "type": "string"
          },
          "name": {
            "maxLength": 160,
            "minLength": 2,
            "type": "string"
          },
          "provider": {
            "const": "custom_http",
            "type": "string"
          },
          "signing_key": {
            "description": "Base64 standard di 32-128 byte casuali; obbligatoria alla creazione, un valore vuoto conserva la chiave esistente durante la modifica.",
            "maxLength": 180,
            "type": "string",
            "writeOnly": true
          }
        },
        "required": [
          "provider",
          "name",
          "base_url",
          "environment",
          "connection_ref",
          "key_id"
        ],
        "type": "object"
      },
      "ExternalConnectionResponse": {
        "additionalProperties": false,
        "properties": {
          "data": {
            "$ref": "#/components/schemas/ExternalConnection"
          },
          "request_id": {
            "type": "string"
          }
        },
        "required": [
          "data"
        ],
        "type": "object"
      },
      "ExternalDelivery": {
        "additionalProperties": false,
        "properties": {
          "connection_ref": {
            "pattern": "^[A-Za-z0-9_.-]{1,128}$",
            "type": "string"
          },
          "delivery": {
            "anyOf": [
              {
                "$ref": "#/components/schemas/ExternalDeliveryValue"
              },
              {
                "type": "null"
              }
            ]
          },
          "entitlement_ref": {
            "pattern": "^[A-Za-z0-9_-]{1,128}$",
            "type": "string"
          },
          "environment": {
            "enum": [
              "sandbox",
              "live"
            ],
            "type": "string"
          },
          "status": {
            "enum": [
              "pending",
              "ready",
              "unavailable"
            ],
            "type": "string"
          },
          "version": {
            "minimum": 1,
            "type": "integer"
          }
        },
        "required": [
          "connection_ref",
          "environment",
          "entitlement_ref",
          "version",
          "status",
          "delivery"
        ],
        "type": "object"
      },
      "ExternalDeliveryResponse": {
        "additionalProperties": false,
        "properties": {
          "data": {
            "$ref": "#/components/schemas/ExternalDelivery"
          },
          "request_id": {
            "type": "string"
          }
        },
        "required": [
          "data"
        ],
        "type": "object"
      },
      "ExternalDeliveryValue": {
        "additionalProperties": false,
        "properties": {
          "expires_at": {
            "anyOf": [
              {
                "format": "date-time",
                "type": "string"
              },
              {
                "type": "null"
              }
            ]
          },
          "type": {
            "enum": [
              "license_key",
              "activation_url",
              "instructions"
            ],
            "type": "string"
          },
          "value": {
            "description": "Contenuto sensibile; massimo 4096 byte UTF-8. Non registrarlo mai nei log. Gli URL di attivazione devono usare un’origine HTTPS configurata.",
            "maxLength": 4096,
            "type": "string"
          }
        },
        "required": [
          "type",
          "value",
          "expires_at"
        ],
        "type": "object"
      },
      "ExternalError": {
        "additionalProperties": false,
        "properties": {
          "error": {
            "additionalProperties": false,
            "properties": {
              "code": {
                "type": "string"
              },
              "message": {
                "type": "string"
              }
            },
            "required": [
              "code",
              "message"
            ],
            "type": "object"
          },
          "request_id": {
            "type": "string"
          }
        },
        "required": [
          "error",
          "request_id"
        ],
        "type": "object"
      },
      "ExternalMapping": {
        "additionalProperties": false,
        "properties": {
          "connection_id": {
            "format": "uuid",
            "type": "string"
          },
          "environment": {
            "enum": [
              "sandbox",
              "live"
            ],
            "type": "string"
          },
          "plan_ref": {
            "pattern": "^[A-Za-z0-9_.-]{1,128}$",
            "type": "string"
          },
          "product_ref": {
            "pattern": "^[A-Za-z0-9_.-]{1,128}$",
            "type": "string"
          },
          "version_id": {
            "format": "uuid",
            "type": "string"
          }
        },
        "required": [
          "version_id",
          "environment",
          "connection_id",
          "product_ref",
          "plan_ref"
        ],
        "type": "object"
      },
      "ExternalMappingInput": {
        "additionalProperties": false,
        "properties": {
          "plan_ref": {
            "pattern": "^[A-Za-z0-9_.-]{1,128}$",
            "type": "string"
          },
          "product_ref": {
            "pattern": "^[A-Za-z0-9_.-]{1,128}$",
            "type": "string"
          },
          "version_id": {
            "format": "uuid",
            "type": "string"
          }
        },
        "required": [
          "version_id",
          "product_ref",
          "plan_ref"
        ],
        "type": "object"
      },
      "ExternalReceipt": {
        "additionalProperties": false,
        "properties": {
          "connection_ref": {
            "pattern": "^[A-Za-z0-9_.-]{1,128}$",
            "type": "string"
          },
          "entitlement_ref": {
            "pattern": "^[A-Za-z0-9_-]{1,128}$",
            "type": "string"
          },
          "environment": {
            "enum": [
              "sandbox",
              "live"
            ],
            "type": "string"
          },
          "error_code": {
            "anyOf": [
              {
                "maxLength": 96,
                "type": "string"
              },
              {
                "type": "null"
              }
            ]
          },
          "event_id": {
            "format": "uuid",
            "type": "string"
          },
          "payload_sha256": {
            "pattern": "^[0-9a-f]{64}$",
            "type": "string"
          },
          "status": {
            "enum": [
              "pending",
              "applied",
              "rejected",
              "manual_review"
            ],
            "type": "string"
          },
          "version": {
            "minimum": 1,
            "type": "integer"
          }
        },
        "required": [
          "event_id",
          "connection_ref",
          "environment",
          "entitlement_ref",
          "version",
          "payload_sha256",
          "status",
          "error_code"
        ],
        "type": "object"
      },
      "ExternalReceiptResponse": {
        "additionalProperties": false,
        "properties": {
          "data": {
            "$ref": "#/components/schemas/ExternalReceipt"
          },
          "request_id": {
            "type": "string"
          }
        },
        "required": [
          "data"
        ],
        "type": "object"
      },
      "ExternalSnapshot": {
        "additionalProperties": false,
        "properties": {
          "account_ref": {
            "pattern": "^[A-Za-z0-9_-]{1,128}$",
            "type": "string"
          },
          "change_reason": {
            "enum": [
              "purchase",
              "renewal",
              "upgrade",
              "refund",
              "reversal",
              "suspension",
              "resumption",
              "expiry",
              "reconciliation"
            ],
            "type": "string"
          },
          "connection_ref": {
            "pattern": "^[A-Za-z0-9_.-]{1,128}$",
            "type": "string"
          },
          "desired_state": {
            "enum": [
              "active",
              "suspended",
              "expired",
              "revoked"
            ],
            "type": "string"
          },
          "entitlement_ref": {
            "pattern": "^[A-Za-z0-9_-]{1,128}$",
            "type": "string"
          },
          "environment": {
            "enum": [
              "sandbox",
              "live"
            ],
            "type": "string"
          },
          "event_id": {
            "format": "uuid",
            "type": "string"
          },
          "launch_plan_version_id": {
            "format": "uuid",
            "type": "string"
          },
          "launch_product_id": {
            "format": "uuid",
            "type": "string"
          },
          "plan_ref": {
            "pattern": "^[A-Za-z0-9_.-]{1,128}$",
            "type": "string"
          },
          "product_ref": {
            "pattern": "^[A-Za-z0-9_.-]{1,128}$",
            "type": "string"
          },
          "schema": {
            "const": "launch-external-licensing-v1",
            "type": "string"
          },
          "type": {
            "const": "entitlement.snapshot",
            "type": "string"
          },
          "valid_from": {
            "format": "date-time",
            "type": "string"
          },
          "valid_until": {
            "anyOf": [
              {
                "format": "date-time",
                "type": "string"
              },
              {
                "type": "null"
              }
            ]
          },
          "version": {
            "minimum": 1,
            "type": "integer"
          }
        },
        "required": [
          "schema",
          "event_id",
          "connection_ref",
          "environment",
          "type",
          "change_reason",
          "account_ref",
          "entitlement_ref",
          "launch_product_id",
          "launch_plan_version_id",
          "product_ref",
          "plan_ref",
          "version",
          "desired_state",
          "valid_from",
          "valid_until"
        ],
        "type": "object"
      },
      "HealthResponse": {
        "properties": {
          "data": {
            "properties": {
              "status": {
                "const": "ok"
              }
            },
            "required": [
              "status"
            ],
            "type": "object"
          },
          "request_id": {
            "$ref": "#/components/schemas/RequestID"
          }
        },
        "required": [
          "data",
          "request_id"
        ],
        "type": "object"
      },
      "IntegrationBundle": {
        "properties": {
          "checked_at": {
            "format": "date-time",
            "type": "string"
          },
          "checks": {
            "items": {
              "properties": {
                "code": {
                  "type": "string"
                },
                "message": {
                  "type": "string"
                },
                "status": {
                  "type": "string"
                }
              },
              "required": [
                "code",
                "status",
                "message"
              ],
              "type": "object"
            },
            "type": "array"
          },
          "config": {
            "additionalProperties": false,
            "properties": {
              "environment": {
                "enum": [
                  "sandbox",
                  "live"
                ],
                "type": "string"
              },
              "launch_product_id": {
                "format": "uuid",
                "type": "string"
              },
              "licentivo_product_id": {
                "anyOf": [
                  {
                    "format": "uuid",
                    "type": "string"
                  },
                  {
                    "const": ""
                  }
                ],
                "description": "Vuoto soltanto quando una verifica fallita non ha potuto risolvere una mappatura."
              },
              "merchant_origin": {
                "format": "uri",
                "type": "string"
              },
              "schema_version": {
                "const": 1,
                "type": "integer"
              }
            },
            "required": [
              "schema_version",
              "merchant_origin",
              "launch_product_id",
              "licentivo_product_id",
              "environment"
            ],
            "type": "object"
          },
          "example_path": {
            "type": "string"
          },
          "language": {
            "enum": [
              "go",
              "python",
              "csharp",
              "java",
              "javascript",
              "rust",
              "ruby",
              "c",
              "cpp",
              "web"
            ],
            "type": "string"
          },
          "product_config": {
            "$ref": "#/components/schemas/PublicProductConfig"
          },
          "ready": {
            "type": "boolean"
          }
        },
        "required": [
          "ready",
          "config",
          "checks",
          "language",
          "example_path",
          "checked_at"
        ],
        "type": "object"
      },
      "LaunchIdentity": {
        "additionalProperties": false,
        "properties": {
          "audience": {
            "type": "string"
          },
          "environment": {
            "enum": [
              "sandbox",
              "live"
            ],
            "type": "string"
          },
          "expires_at": {
            "format": "date-time",
            "type": "string"
          },
          "identity_token": {
            "description": "Attestazione di identità di breve durata, al massimo 120 secondi; mai un'autorizzazione all'esecuzione.",
            "type": "string"
          },
          "launch_connection_id": {
            "format": "uuid",
            "type": "string"
          },
          "licentivo_product_id": {
            "format": "uuid",
            "type": "string"
          },
          "product_id": {
            "format": "uuid",
            "type": "string"
          },
          "token_type": {
            "type": "string"
          }
        },
        "required": [
          "identity_token",
          "token_type",
          "product_id",
          "licentivo_product_id",
          "launch_connection_id",
          "environment",
          "audience",
          "expires_at"
        ],
        "type": "object"
      },
      "LicensingConnections": {
        "additionalProperties": false,
        "properties": {
          "bindings": {
            "items": {
              "$ref": "#/components/schemas/ProductLicensingBinding"
            },
            "type": "array"
          },
          "connections": {
            "items": {
              "$ref": "#/components/schemas/ExternalConnection"
            },
            "type": "array"
          },
          "default_provider": {
            "description": "Unico fornitore di licenze attivo per tutti i prodotti e per entrambi gli ambienti.",
            "enum": [
              "licentivo",
              "custom_http"
            ],
            "type": "string"
          },
          "mappings": {
            "items": {
              "$ref": "#/components/schemas/ExternalMapping"
            },
            "type": "array"
          }
        },
        "required": [
          "connections",
          "bindings",
          "mappings",
          "default_provider"
        ],
        "type": "object"
      },
      "LicensingConnectionsResponse": {
        "additionalProperties": false,
        "properties": {
          "data": {
            "$ref": "#/components/schemas/LicensingConnections"
          },
          "request_id": {
            "type": "string"
          }
        },
        "required": [
          "data"
        ],
        "type": "object"
      },
      "LicensingProviderInput": {
        "additionalProperties": false,
        "properties": {
          "provider": {
            "enum": [
              "licentivo",
              "custom_http"
            ],
            "type": "string"
          }
        },
        "required": [
          "provider"
        ],
        "type": "object"
      },
      "LicensingSaved": {
        "additionalProperties": false,
        "properties": {
          "saved": {
            "const": true,
            "type": "boolean"
          }
        },
        "required": [
          "saved"
        ],
        "type": "object"
      },
      "LicensingSavedResponse": {
        "additionalProperties": false,
        "properties": {
          "data": {
            "$ref": "#/components/schemas/LicensingSaved"
          },
          "request_id": {
            "type": "string"
          }
        },
        "required": [
          "data"
        ],
        "type": "object"
      },
      "LicentivoConnectionInput": {
        "additionalProperties": false,
        "properties": {
          "api_key": {
            "description": "Obbligatorio per la prima connessione. Omettere o lasciare vuoto per conservare la chiave salvata sul server.",
            "type": "string",
            "writeOnly": true
          },
          "webhook_secret": {
            "description": "Segreto facoltativo di 32–256 byte. Omettere o lasciare vuoto per conservare il segreto salvato.",
            "type": "string",
            "writeOnly": true
          }
        },
        "type": "object"
      },
      "Order": {
        "properties": {
          "action": {
            "type": "string"
          },
          "amount_minor": {
            "type": "integer"
          },
          "created_at": {
            "format": "date-time",
            "type": "string"
          },
          "currency": {
            "type": "string"
          },
          "environment": {
            "enum": [
              "sandbox",
              "live"
            ],
            "type": "string"
          },
          "id": {
            "format": "uuid",
            "type": "string"
          },
          "paid_at": {
            "format": "date-time",
            "type": [
              "string",
              "null"
            ]
          },
          "plan_name": {
            "type": "string"
          },
          "plan_version": {
            "type": "integer"
          },
          "plan_version_id": {
            "format": "uuid",
            "type": "string"
          },
          "product_id": {
            "format": "uuid",
            "type": "string"
          },
          "product_name": {
            "type": "string"
          },
          "product_slug": {
            "type": "string"
          },
          "purchase_periods": {
            "type": "integer"
          },
          "status": {
            "type": "string"
          }
        },
        "required": [
          "id",
          "product_id",
          "product_name",
          "product_slug",
          "plan_version_id",
          "plan_name",
          "plan_version",
          "action",
          "status",
          "currency",
          "amount_minor",
          "purchase_periods",
          "created_at",
          "paid_at",
          "environment"
        ],
        "type": "object"
      },
      "ProductLicensingBinding": {
        "additionalProperties": false,
        "properties": {
          "connection_id": {
            "anyOf": [
              {
                "format": "uuid",
                "type": "string"
              },
              {
                "type": "null"
              }
            ]
          },
          "environment": {
            "enum": [
              "sandbox",
              "live"
            ],
            "type": "string"
          },
          "product_id": {
            "format": "uuid",
            "type": "string"
          },
          "provider": {
            "enum": [
              "licentivo",
              "custom_http"
            ],
            "type": "string"
          }
        },
        "required": [
          "product_id",
          "environment",
          "provider",
          "connection_id"
        ],
        "type": "object"
      },
      "ProductLicensingInput": {
        "additionalProperties": false,
        "properties": {
          "connection_id": {
            "description": "UUID della connessione esterna; obbligatorio per custom_http.",
            "type": "string"
          },
          "environment": {
            "enum": [
              "sandbox",
              "live"
            ],
            "type": "string"
          },
          "mappings": {
            "items": {
              "$ref": "#/components/schemas/ExternalMappingInput"
            },
            "type": "array"
          },
          "provider": {
            "description": "Deve corrispondere al fornitore di licenze attivo per l'intera istanza. Configurarlo prima con PUT /api/v1/admin/licensing/provider.",
            "enum": [
              "licentivo",
              "custom_http"
            ],
            "type": "string"
          }
        },
        "required": [
          "provider",
          "environment"
        ],
        "type": "object"
      },
      "PublicLaunchConfig": {
        "additionalProperties": false,
        "properties": {
          "environment": {
            "enum": [
              "sandbox",
              "live"
            ],
            "type": "string"
          },
          "launch_product_id": {
            "format": "uuid",
            "type": "string"
          },
          "licentivo_product_id": {
            "format": "uuid",
            "type": "string"
          },
          "merchant_origin": {
            "format": "uri",
            "type": "string"
          },
          "schema_version": {
            "const": 1,
            "type": "integer"
          }
        },
        "required": [
          "schema_version",
          "merchant_origin",
          "launch_product_id",
          "licentivo_product_id",
          "environment"
        ],
        "type": "object"
      },
      "PublicProductConfig": {
        "additionalProperties": false,
        "description": "Configurazione pubblica con dati sensibili rimossi. La provenienza della chiave di firma deve essere verificata dal commerciante.",
        "properties": {
          "app_version": {
            "type": "string"
          },
          "base_url": {
            "format": "uri",
            "type": "string"
          },
          "product_id": {
            "format": "uuid",
            "type": "string"
          },
          "trusted_keys": {
            "additionalProperties": {
              "pattern": "^[A-Za-z0-9_-]{43}$",
              "type": "string"
            },
            "maxProperties": 32,
            "minProperties": 1,
            "propertyNames": {
              "description": "Gli identificativi delle chiavi sono di 1–128 byte UTF-8.",
              "minLength": 1,
              "type": "string",
              "x-maxBytes": 128
            },
            "type": "object"
          }
        },
        "required": [
          "product_id",
          "trusted_keys",
          "base_url"
        ],
        "type": "object"
      },
      "PublicProductImport": {
        "additionalProperties": false,
        "description": "Configurazione pubblica del prodotto Launch, compilata dall'ID ufficiale del prodotto e dalle chiavi pubbliche di firma. Il JSON legacy con license_key/cache_path vuoti e allow_http false viene accettato e tali campi vengono rimossi. I segreti valorizzati e i campi sconosciuti vengono rifiutati.",
        "properties": {
          "allow_http": {
            "const": false
          },
          "app_version": {
            "description": "Al massimo 80 byte UTF-8.",
            "type": "string",
            "x-maxBytes": 80
          },
          "base_url": {
            "format": "uri",
            "type": "string"
          },
          "cache_path": {
            "const": ""
          },
          "device_name": {
            "maxLength": 128,
            "type": "string"
          },
          "license_key": {
            "const": ""
          },
          "product_id": {
            "format": "uuid",
            "type": "string"
          },
          "trusted_keys": {
            "additionalProperties": {
              "pattern": "^[A-Za-z0-9_-]{43}$",
              "type": "string"
            },
            "maxProperties": 32,
            "minProperties": 1,
            "propertyNames": {
              "description": "Gli identificativi delle chiavi sono di 1–128 byte UTF-8.",
              "minLength": 1,
              "type": "string",
              "x-maxBytes": 128
            },
            "type": "object"
          }
        },
        "required": [
          "product_id",
          "trusted_keys"
        ],
        "type": "object"
      },
      "ReadinessResponse": {
        "properties": {
          "data": {
            "properties": {
              "code": {
                "enum": [
                  "DATABASE_NOT_CONFIGURED",
                  "DATABASE_UNAVAILABLE",
                  "DATABASE_SCHEMA_NOT_READY"
                ]
              },
              "status": {
                "enum": [
                  "ready",
                  "not_ready"
                ]
              }
            },
            "required": [
              "status"
            ],
            "type": "object"
          },
          "request_id": {
            "$ref": "#/components/schemas/RequestID"
          }
        },
        "required": [
          "data",
          "request_id"
        ],
        "type": "object"
      },
      "RequestID": {
        "description": "Restituito anche nell'header di risposta X-Request-ID",
        "pattern": "^[a-f0-9]{32}$",
        "type": "string"
      },
      "SessionGrant": {
        "properties": {
          "access_token": {
            "description": "Restituito soltanto per l'accesso desktop. Trattarlo come segreto; non inserirlo mai negli URL o nei log.",
            "type": "string",
            "x-sensitive": true
          },
          "expires_at": {
            "format": "date-time",
            "type": "string"
          },
          "kind": {
            "enum": [
              "website",
              "desktop"
            ],
            "type": "string"
          },
          "user": {
            "$ref": "#/components/schemas/User"
          }
        },
        "required": [
          "user",
          "kind",
          "expires_at"
        ],
        "type": "object"
      },
      "SessionView": {
        "properties": {
          "created_at": {
            "format": "date-time",
            "type": "string"
          },
          "current": {
            "type": "boolean"
          },
          "expires_at": {
            "format": "date-time",
            "type": "string"
          },
          "id": {
            "format": "uuid",
            "type": "string"
          },
          "kind": {
            "enum": [
              "website",
              "desktop"
            ],
            "type": "string"
          }
        },
        "required": [
          "id",
          "kind",
          "created_at",
          "expires_at",
          "current"
        ],
        "type": "object"
      },
      "User": {
        "properties": {
          "email": {
            "format": "email",
            "type": "string"
          },
          "full_access": {
            "type": "boolean"
          },
          "id": {
            "format": "uuid",
            "type": "string"
          },
          "password_change_required": {
            "type": "boolean"
          },
          "role": {
            "enum": [
              "customer",
              "admin",
              "operations",
              "support"
            ],
            "type": "string"
          },
          "verified": {
            "type": "boolean"
          }
        },
        "required": [
          "id",
          "email",
          "verified",
          "role",
          "full_access",
          "password_change_required"
        ],
        "type": "object"
      }
    },
    "securitySchemes": {
      "desktopBearer": {
        "description": "Sessione desktop opaca ottenuta da auth/login con kind=desktop.",
        "scheme": "bearer",
        "type": "http"
      },
      "websiteCookie": {
        "description": "Sessione browser. Le modifiche richiedono anche Origin corrispondente e X-CSRF-Token da launch_csrf.",
        "in": "cookie",
        "name": "launch_session",
        "type": "apiKey"
      }
    }
  },
  "info": {
    "description": "API di sistema, account, licenze desktop, procedura guidata di integrazione e acquisti di base. Non è l'API completa per l'amministrazione del personale e i webhook di pagamento. L'accesso in fase di esecuzione deve comunque superare i controlli dell'SDK ufficiale Licentivo. La verifica dell'email è obbligatoria soltanto quando abilitata dal commerciante. Sono documentate anche le connessioni di licenza personalizzate e la consegna ai clienti. Gli endpoint dei ricevitori esterni sono specificati separatamente in external-licensing-openapi.json.",
    "license": {
      "identifier": "MIT",
      "name": "MIT"
    },
    "title": "API di integrazione Licentivo Launch",
    "version": "0.3.4-beta",
    "x-document-language": "it"
  },
  "openapi": "3.1.0",
  "paths": {
    "/api/v1/admin/connections/licentivo": {
      "post": {
        "operationId": "configureLicentivoConnection",
        "parameters": [
          {
            "in": "header",
            "name": "X-CSRF-Token",
            "required": true,
            "schema": {
              "type": "string"
            }
          }
        ],
        "requestBody": {
          "content": {
            "application/json": {
              "schema": {
                "$ref": "#/components/schemas/LicentivoConnectionInput"
              }
            }
          },
          "required": true
        },
        "responses": {
          "200": {
            "content": {
              "application/json": {
                "schema": {
                  "properties": {
                    "data": {
                      "additionalProperties": true,
                      "description": "Identità della connessione, funzionalità verificate e catalogo. I segreti salvati non vengono mai restituiti.",
                      "type": "object"
                    },
                    "request_id": {
                      "type": "string"
                    }
                  },
                  "required": [
                    "data"
                  ],
                  "type": "object"
                }
              }
            },
            "description": "Risposta riuscita"
          },
          "400": {
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/Error"
                }
              }
            },
            "description": "Configurazione/input non validi"
          },
          "401": {
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/Error"
                }
              }
            },
            "description": "Autenticazione richiesta"
          },
          "403": {
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/Error"
                }
              }
            },
            "description": "Amministratore richiesto, CSRF non valido o ambito vietato"
          },
          "404": {
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/Error"
                }
              }
            },
            "description": "Nessuna risorsa di cui si è titolari"
          },
          "409": {
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/Error"
                }
              }
            },
            "description": "Mappatura immutabile, migrazione necessaria o acquisto non pronto"
          },
          "429": {
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/Error"
                }
              }
            },
            "description": "Limite di frequenza raggiunto"
          },
          "503": {
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/Error"
                }
              }
            },
            "description": "Archivio/servizio esterno non disponibile"
          }
        },
        "security": [
          {
            "websiteCookie": []
          }
        ],
        "summary": "Convalida e salva la connessione amministrativa Licentivo sul server",
        "tags": [
          "Licentivo connection"
        ]
      }
    },
    "/api/v1/admin/identity-notifications/{id}/retry": {
      "post": {
        "operationId": "retryIdentityNotification",
        "parameters": [
          {
            "in": "path",
            "name": "id",
            "required": true,
            "schema": {
              "format": "uuid",
              "type": "string"
            }
          }
        ],
        "requestBody": {
          "content": {
            "application/json": {
              "schema": {
                "additionalProperties": false,
                "properties": {
                  "reason": {
                    "maxLength": 500,
                    "minLength": 2,
                    "type": "string"
                  }
                },
                "required": [
                  "reason"
                ],
                "type": "object"
              }
            }
          },
          "required": true
        },
        "responses": {
          "200": {
            "description": "La notifica originale è stata programmata per un nuovo tentativo"
          },
          "403": {
            "description": "Sono richiesti i permessi di amministratore"
          },
          "409": {
            "description": "La notifica è completata o in elaborazione"
          }
        },
        "security": [
          {
            "websiteCookie": []
          }
        ],
        "summary": "Riprova la notifica di revoca di sicurezza dell'account (amministratore)"
      }
    },
    "/api/v1/admin/integration/check": {
      "post": {
        "description": "Richiede il ruolo admin. I chiamanti dal sito devono fornire Origin e X-CSRF-Token. ready=false segnala una configurazione incompleta; non vengono restituiti campi segreti. licentivo_product_id può essere vuoto in un report incompleto.",
        "operationId": "checkApplicationIntegration",
        "requestBody": {
          "content": {
            "application/json": {
              "schema": {
                "additionalProperties": false,
                "properties": {
                  "environment": {
                    "enum": [
                      "sandbox",
                      "live"
                    ],
                    "type": "string"
                  },
                  "language": {
                    "enum": [
                      "go",
                      "python",
                      "csharp",
                      "java",
                      "javascript",
                      "rust",
                      "ruby",
                      "c",
                      "cpp",
                      "web"
                    ],
                    "type": "string"
                  },
                  "product_id": {
                    "format": "uuid",
                    "type": "string"
                  }
                },
                "required": [
                  "product_id",
                  "environment",
                  "language"
                ],
                "type": "object"
              }
            }
          },
          "required": true
        },
        "responses": {
          "200": {
            "content": {
              "application/json": {
                "schema": {
                  "properties": {
                    "data": {
                      "$ref": "#/components/schemas/IntegrationBundle"
                    },
                    "request_id": {
                      "$ref": "#/components/schemas/RequestID"
                    }
                  },
                  "required": [
                    "data",
                    "request_id"
                  ],
                  "type": "object"
                }
              }
            },
            "description": "Risposta riuscita"
          },
          "400": {
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/Error"
                }
              }
            },
            "description": "Campi, ID del prodotto o ambiente non validi."
          },
          "401": {
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/Error"
                }
              }
            },
            "description": "LOGIN_FAILED (accesso) o AUTH_REQUIRED (sessione scaduta/revocata). Eliminare le sessioni rifiutate; non ricorrere mai a un ripiego dopo un rifiuto esplicito."
          },
          "403": {
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/Error"
                }
              }
            },
            "description": "Operazione vietata, verifica dell'email richiesta, modifica iniziale della password richiesta o rifiuto esplicito del diritto."
          },
          "429": {
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/Error"
                }
              }
            },
            "description": "RATE_LIMITED; non riprovare in un ciclo senza attese adeguate.",
            "headers": {
              "Retry-After": {
                "description": "Secondi da attendere prima di un altro tentativo. Rispettare questo valore e limitare il numero totale di tentativi.",
                "schema": {
                  "minimum": 0,
                  "type": "integer"
                }
              }
            }
          },
          "503": {
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/Error"
                }
              }
            },
            "description": "Errore temporaneo del servizio o del database. L'accesso offline è consentito soltanto da un'autorizzazione firmata valida dell'SDK ufficiale."
          }
        },
        "security": [
          {
            "desktopBearer": []
          },
          {
            "websiteCookie": []
          }
        ],
        "summary": "Legge automaticamente la mappatura del software selezionato e le chiavi pubbliche di firma per l'inizializzazione diretta dell'SDK",
        "tags": [
          "Application integration"
        ]
      }
    },
    "/api/v1/admin/integration/context": {
      "get": {
        "description": "Richiede il ruolo admin. I chiamanti dal sito devono fornire Origin e X-CSRF-Token. ready=false segnala una configurazione incompleta; non vengono restituiti campi segreti. licentivo_product_id può essere vuoto in un report incompleto.",
        "operationId": "getIntegrationContext",
        "responses": {
          "200": {
            "content": {
              "application/json": {
                "schema": {
                  "properties": {
                    "data": {
                      "additionalProperties": false,
                      "properties": {
                        "licensing_origin": {
                          "type": "string"
                        },
                        "merchant_origin": {
                          "type": "string"
                        }
                      },
                      "required": [
                        "merchant_origin",
                        "licensing_origin"
                      ],
                      "type": "object"
                    },
                    "request_id": {
                      "type": "string"
                    }
                  },
                  "required": [
                    "data"
                  ],
                  "type": "object"
                }
              }
            },
            "description": "Contesto pubblico della distribuzione; nessuna impostazione privata di avvio"
          },
          "400": {
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/Error"
                }
              }
            },
            "description": "Campi, ID del prodotto o ambiente non validi."
          },
          "401": {
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/Error"
                }
              }
            },
            "description": "LOGIN_FAILED (accesso) o AUTH_REQUIRED (sessione scaduta/revocata). Eliminare le sessioni rifiutate; non ricorrere mai a un ripiego dopo un rifiuto esplicito."
          },
          "403": {
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/Error"
                }
              }
            },
            "description": "Operazione vietata, verifica dell'email richiesta, modifica iniziale della password richiesta o rifiuto esplicito del diritto."
          },
          "429": {
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/Error"
                }
              }
            },
            "description": "RATE_LIMITED; non riprovare in un ciclo senza attese adeguate.",
            "headers": {
              "Retry-After": {
                "description": "Secondi da attendere prima di un altro tentativo. Rispettare questo valore e limitare il numero totale di tentativi.",
                "schema": {
                  "minimum": 0,
                  "type": "integer"
                }
              }
            }
          },
          "503": {
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/Error"
                }
              }
            },
            "description": "Errore temporaneo del servizio o del database. L'accesso offline è consentito soltanto da un'autorizzazione firmata valida dell'SDK ufficiale."
          }
        },
        "security": [
          {
            "desktopBearer": []
          },
          {
            "websiteCookie": []
          }
        ],
        "summary": "Legge l'origine configurata del commerciante e l'origine fissa delle licenze",
        "tags": [
          "Application integration"
        ]
      }
    },
    "/api/v1/admin/licensing/connections": {
      "get": {
        "operationId": "listLicensingChoices",
        "responses": {
          "200": {
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/LicensingConnectionsResponse"
                }
              }
            },
            "description": "Risposta riuscita"
          },
          "400": {
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/Error"
                }
              }
            },
            "description": "Configurazione/input non validi"
          },
          "401": {
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/Error"
                }
              }
            },
            "description": "Autenticazione richiesta"
          },
          "403": {
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/Error"
                }
              }
            },
            "description": "Amministratore richiesto, CSRF non valido o ambito vietato"
          },
          "404": {
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/Error"
                }
              }
            },
            "description": "Nessuna risorsa di cui si è titolari"
          },
          "409": {
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/Error"
                }
              }
            },
            "description": "Mappatura immutabile, migrazione necessaria o acquisto non pronto"
          },
          "429": {
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/Error"
                }
              }
            },
            "description": "Limite di frequenza raggiunto"
          },
          "503": {
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/Error"
                }
              }
            },
            "description": "Archivio/servizio esterno non disponibile"
          }
        },
        "security": [
          {
            "desktopBearer": []
          },
          {
            "websiteCookie": []
          }
        ],
        "summary": "Elenca le connessioni esterne, le associazioni dei prodotti e le mappature; le impostazioni Licentivo mantengono l'API esistente",
        "tags": [
          "Custom licensing"
        ]
      },
      "post": {
        "operationId": "createExternalLicensingConnection",
        "requestBody": {
          "content": {
            "application/json": {
              "schema": {
                "$ref": "#/components/schemas/ExternalConnectionInput"
              }
            }
          },
          "required": true
        },
        "responses": {
          "200": {
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ExternalConnectionResponse"
                }
              }
            },
            "description": "Risposta riuscita"
          },
          "400": {
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/Error"
                }
              }
            },
            "description": "Configurazione/input non validi"
          },
          "401": {
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/Error"
                }
              }
            },
            "description": "Autenticazione richiesta"
          },
          "403": {
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/Error"
                }
              }
            },
            "description": "Amministratore richiesto, CSRF non valido o ambito vietato"
          },
          "404": {
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/Error"
                }
              }
            },
            "description": "Nessuna risorsa di cui si è titolari"
          },
          "409": {
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/Error"
                }
              }
            },
            "description": "Mappatura immutabile, migrazione necessaria o acquisto non pronto"
          },
          "429": {
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/Error"
                }
              }
            },
            "description": "Limite di frequenza raggiunto"
          },
          "503": {
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/Error"
                }
              }
            },
            "description": "Archivio/servizio esterno non disponibile"
          }
        },
        "security": [
          {
            "desktopBearer": []
          },
          {
            "websiteCookie": []
          }
        ],
        "summary": "Verifica e salva una connessione HTTP personalizzata per le licenze",
        "tags": [
          "Custom licensing"
        ]
      }
    },
    "/api/v1/admin/licensing/connections/{id}": {
      "put": {
        "operationId": "updateExternalLicensingConnection",
        "parameters": [
          {
            "in": "path",
            "name": "id",
            "required": true,
            "schema": {
              "format": "uuid",
              "type": "string"
            }
          }
        ],
        "requestBody": {
          "content": {
            "application/json": {
              "schema": {
                "$ref": "#/components/schemas/ExternalConnectionInput"
              }
            }
          },
          "required": true
        },
        "responses": {
          "200": {
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ExternalConnectionResponse"
                }
              }
            },
            "description": "Risposta riuscita"
          },
          "400": {
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/Error"
                }
              }
            },
            "description": "Configurazione/input non validi"
          },
          "401": {
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/Error"
                }
              }
            },
            "description": "Autenticazione richiesta"
          },
          "403": {
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/Error"
                }
              }
            },
            "description": "Amministratore richiesto, CSRF non valido o ambito vietato"
          },
          "404": {
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/Error"
                }
              }
            },
            "description": "Nessuna risorsa di cui si è titolari"
          },
          "409": {
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/Error"
                }
              }
            },
            "description": "Mappatura immutabile, migrazione necessaria o acquisto non pronto"
          },
          "429": {
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/Error"
                }
              }
            },
            "description": "Limite di frequenza raggiunto"
          },
          "503": {
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/Error"
                }
              }
            },
            "description": "Archivio/servizio esterno non disponibile"
          }
        },
        "security": [
          {
            "desktopBearer": []
          },
          {
            "websiteCookie": []
          }
        ],
        "summary": "Modifica i metadati/le chiavi di firma; destinazione, ambiente e politica di rete sono immutabili",
        "tags": [
          "Custom licensing"
        ]
      }
    },
    "/api/v1/admin/licensing/connections/{id}/check": {
      "post": {
        "operationId": "checkExternalLicensingConnection",
        "parameters": [
          {
            "in": "path",
            "name": "id",
            "required": true,
            "schema": {
              "format": "uuid",
              "type": "string"
            }
          }
        ],
        "responses": {
          "200": {
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ExternalConnectionResponse"
                }
              }
            },
            "description": "Risposta riuscita"
          },
          "400": {
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/Error"
                }
              }
            },
            "description": "Configurazione/input non validi"
          },
          "401": {
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/Error"
                }
              }
            },
            "description": "Autenticazione richiesta"
          },
          "403": {
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/Error"
                }
              }
            },
            "description": "Amministratore richiesto, CSRF non valido o ambito vietato"
          },
          "404": {
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/Error"
                }
              }
            },
            "description": "Nessuna risorsa di cui si è titolari"
          },
          "409": {
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/Error"
                }
              }
            },
            "description": "Mappatura immutabile, migrazione necessaria o acquisto non pronto"
          },
          "429": {
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/Error"
                }
              }
            },
            "description": "Limite di frequenza raggiunto"
          },
          "503": {
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/Error"
                }
              }
            },
            "description": "Archivio/servizio esterno non disponibile"
          }
        },
        "security": [
          {
            "desktopBearer": []
          },
          {
            "websiteCookie": []
          }
        ],
        "summary": "Aggiorna le funzionalità; last_check_error distingue una verifica fallita nella risposta 200",
        "tags": [
          "Custom licensing"
        ]
      }
    },
    "/api/v1/admin/licensing/provider": {
      "put": {
        "operationId": "selectLicensingProvider",
        "requestBody": {
          "content": {
            "application/json": {
              "schema": {
                "$ref": "#/components/schemas/LicensingProviderInput"
              }
            }
          },
          "required": true
        },
        "responses": {
          "200": {
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/LicensingSavedResponse"
                }
              }
            },
            "description": "Risposta riuscita"
          },
          "400": {
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/Error"
                }
              }
            },
            "description": "Configurazione/input non validi"
          },
          "401": {
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/Error"
                }
              }
            },
            "description": "Autenticazione richiesta"
          },
          "403": {
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/Error"
                }
              }
            },
            "description": "Amministratore richiesto, CSRF non valido o ambito vietato"
          },
          "404": {
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/Error"
                }
              }
            },
            "description": "Nessuna risorsa di cui si è titolari"
          },
          "409": {
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/Error"
                }
              }
            },
            "description": "Mappatura immutabile, migrazione necessaria o acquisto non pronto"
          },
          "429": {
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/Error"
                }
              }
            },
            "description": "Limite di frequenza raggiunto"
          },
          "503": {
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/Error"
                }
              }
            },
            "description": "Archivio/servizio esterno non disponibile"
          }
        },
        "security": [
          {
            "desktopBearer": []
          },
          {
            "websiteCookie": []
          }
        ],
        "summary": "Abilita un fornitore di licenze per l'intera istanza; il cambio richiede una migrazione quando esistono ordini di altri fornitori",
        "tags": [
          "Custom licensing"
        ]
      }
    },
    "/api/v1/admin/products/{id}/licensing": {
      "put": {
        "operationId": "configureProductLicensing",
        "parameters": [
          {
            "in": "path",
            "name": "id",
            "required": true,
            "schema": {
              "format": "uuid",
              "type": "string"
            }
          }
        ],
        "requestBody": {
          "content": {
            "application/json": {
              "schema": {
                "$ref": "#/components/schemas/ProductLicensingInput"
              }
            }
          },
          "required": true
        },
        "responses": {
          "200": {
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/LicensingSavedResponse"
                }
              }
            },
            "description": "Risposta riuscita"
          },
          "400": {
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/Error"
                }
              }
            },
            "description": "Configurazione/input non validi"
          },
          "401": {
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/Error"
                }
              }
            },
            "description": "Autenticazione richiesta"
          },
          "403": {
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/Error"
                }
              }
            },
            "description": "Amministratore richiesto, CSRF non valido o ambito vietato"
          },
          "404": {
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/Error"
                }
              }
            },
            "description": "Nessuna risorsa di cui si è titolari"
          },
          "409": {
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/Error"
                }
              }
            },
            "description": "Mappatura immutabile, migrazione necessaria o acquisto non pronto"
          },
          "429": {
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/Error"
                }
              }
            },
            "description": "Limite di frequenza raggiunto"
          },
          "503": {
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/Error"
                }
              }
            },
            "description": "Archivio/servizio esterno non disponibile"
          }
        },
        "security": [
          {
            "desktopBearer": []
          },
          {
            "websiteCookie": []
          }
        ],
        "summary": "Configura la connessione del prodotto e le mappature dei piani per un ambiente usando il fornitore di licenze attivo",
        "tags": [
          "Custom licensing"
        ]
      }
    },
    "/api/v1/admin/refunds/{id}/reconcile": {
      "post": {
        "description": "L'amministratore verifica il rimborso originale e ripristina la stessa operazione dopo aver verificato nella ricevuta del canale la transazione originale, l'importo e la valuta. In assenza di una ricevuta, è possibile riprovare la richiesta idempotente originale soltanto entro 23 ore dall'orario di approvazione originale Stripe/PayPal; oltre tale termine occorre fornire l'identificativo del rimborso del canale originale. L'operazione viene registrata nei log di controllo e non viene creato un nuovo identificativo dell'operazione di rimborso.",
        "operationId": "reconcileRefund",
        "parameters": [
          {
            "in": "path",
            "name": "id",
            "required": true,
            "schema": {
              "format": "uuid",
              "type": "string"
            }
          }
        ],
        "requestBody": {
          "content": {
            "application/json": {
              "schema": {
                "properties": {
                  "external_refund_id": {
                    "maxLength": 128,
                    "type": "string"
                  },
                  "reason": {
                    "maxLength": 500,
                    "minLength": 2,
                    "type": "string"
                  }
                },
                "required": [
                  "reason"
                ],
                "type": "object"
              }
            }
          },
          "required": true
        },
        "responses": {
          "200": {
            "description": "L'attività originale è stata rimessa in coda"
          },
          "403": {
            "description": "Sono richiesti i permessi di amministratore e credenziali CSRF valide"
          },
          "409": {
            "description": "Conflitto di stato, ricevuta non corrispondente o identificativo del rimborso del canale originale necessario"
          },
          "503": {
            "description": "La consultazione del canale originale è temporaneamente non disponibile"
          }
        },
        "security": [
          {
            "websiteCookie": []
          }
        ],
        "summary": "Verifica e ripristina l'attività di rimborso originale"
      }
    },
    "/api/v1/auth/complete-email": {
      "post": {
        "operationId": "completeAccountEmail",
        "requestBody": {
          "content": {
            "application/json": {
              "schema": {
                "additionalProperties": false,
                "properties": {
                  "password": {
                    "type": "string",
                    "writeOnly": true
                  },
                  "token": {
                    "type": "string",
                    "writeOnly": true
                  }
                },
                "required": [
                  "token"
                ],
                "type": "object"
              }
            }
          },
          "required": true
        },
        "responses": {
          "200": {
            "content": {
              "application/json": {
                "schema": {
                  "properties": {
                    "data": {
                      "properties": {
                        "completed": {
                          "type": "boolean"
                        }
                      },
                      "required": [
                        "completed"
                      ],
                      "type": "object"
                    },
                    "request_id": {
                      "$ref": "#/components/schemas/RequestID"
                    }
                  },
                  "required": [
                    "data",
                    "request_id"
                  ],
                  "type": "object"
                }
              }
            },
            "description": "Risposta riuscita"
          },
          "400": {
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/Error"
                }
              }
            },
            "description": "Campi, ID del prodotto o ambiente non validi."
          },
          "401": {
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/Error"
                }
              }
            },
            "description": "LOGIN_FAILED (accesso) o AUTH_REQUIRED (sessione scaduta/revocata). Eliminare le sessioni rifiutate; non ricorrere mai a un ripiego dopo un rifiuto esplicito."
          },
          "403": {
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/Error"
                }
              }
            },
            "description": "Operazione vietata, verifica dell'email richiesta, modifica iniziale della password richiesta o rifiuto esplicito del diritto."
          },
          "429": {
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/Error"
                }
              }
            },
            "description": "RATE_LIMITED; non riprovare in un ciclo senza attese adeguate.",
            "headers": {
              "Retry-After": {
                "description": "Secondi da attendere prima di un altro tentativo. Rispettare questo valore e limitare il numero totale di tentativi.",
                "schema": {
                  "minimum": 0,
                  "type": "integer"
                }
              }
            }
          },
          "503": {
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/Error"
                }
              }
            },
            "description": "Errore temporaneo del servizio o del database. L'accesso offline è consentito soltanto da un'autorizzazione firmata valida dell'SDK ufficiale."
          }
        },
        "security": [],
        "summary": "Completa una credenziale email monouso",
        "tags": [
          "Application integration"
        ]
      }
    },
    "/api/v1/auth/email": {
      "post": {
        "operationId": "requestAccountEmail",
        "requestBody": {
          "content": {
            "application/json": {
              "schema": {
                "additionalProperties": false,
                "properties": {
                  "email": {
                    "format": "email",
                    "type": "string"
                  },
                  "kind": {
                    "enum": [
                      "verify",
                      "reset"
                    ],
                    "type": "string"
                  }
                },
                "required": [
                  "email",
                  "kind"
                ],
                "type": "object"
              }
            }
          },
          "required": true
        },
        "responses": {
          "200": {
            "content": {
              "application/json": {
                "schema": {
                  "properties": {
                    "data": {
                      "properties": {
                        "accepted": {
                          "type": "boolean"
                        }
                      },
                      "required": [
                        "accepted"
                      ],
                      "type": "object"
                    },
                    "request_id": {
                      "$ref": "#/components/schemas/RequestID"
                    }
                  },
                  "required": [
                    "data",
                    "request_id"
                  ],
                  "type": "object"
                }
              }
            },
            "description": "Risposta riuscita"
          },
          "400": {
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/Error"
                }
              }
            },
            "description": "Campi, ID del prodotto o ambiente non validi."
          },
          "401": {
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/Error"
                }
              }
            },
            "description": "LOGIN_FAILED (accesso) o AUTH_REQUIRED (sessione scaduta/revocata). Eliminare le sessioni rifiutate; non ricorrere mai a un ripiego dopo un rifiuto esplicito."
          },
          "403": {
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/Error"
                }
              }
            },
            "description": "Operazione vietata, verifica dell'email richiesta, modifica iniziale della password richiesta o rifiuto esplicito del diritto."
          },
          "429": {
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/Error"
                }
              }
            },
            "description": "RATE_LIMITED; non riprovare in un ciclo senza attese adeguate.",
            "headers": {
              "Retry-After": {
                "description": "Secondi da attendere prima di un altro tentativo. Rispettare questo valore e limitare il numero totale di tentativi.",
                "schema": {
                  "minimum": 0,
                  "type": "integer"
                }
              }
            }
          },
          "503": {
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/Error"
                }
              }
            },
            "description": "Errore temporaneo del servizio o del database. L'accesso offline è consentito soltanto da un'autorizzazione firmata valida dell'SDK ufficiale."
          }
        },
        "security": [],
        "summary": "Richiede un'email di verifica o recupero della password",
        "tags": [
          "Application integration"
        ]
      }
    },
    "/api/v1/auth/identity-keys": {
      "get": {
        "operationId": "launchIdentityPublicKeys",
        "responses": {
          "200": {
            "description": "Chiavi pubbliche Ed25519; mai materiale di firma privato"
          }
        },
        "summary": "Chiavi pubbliche di firma fissate per l'identità dell'account Launch"
      }
    },
    "/api/v1/auth/login": {
      "post": {
        "description": "Impostare kind=desktop per le applicazioni e omettere l'header Origin del browser. L'accesso al sito imposta i cookie e omette access_token.",
        "operationId": "login",
        "requestBody": {
          "content": {
            "application/json": {
              "schema": {
                "additionalProperties": false,
                "properties": {
                  "email": {
                    "format": "email",
                    "type": "string"
                  },
                  "kind": {
                    "default": "website",
                    "enum": [
                      "desktop",
                      "website"
                    ],
                    "type": "string"
                  },
                  "password": {
                    "type": "string",
                    "writeOnly": true
                  }
                },
                "required": [
                  "email",
                  "password"
                ],
                "type": "object"
              }
            }
          },
          "required": true
        },
        "responses": {
          "200": {
            "content": {
              "application/json": {
                "schema": {
                  "properties": {
                    "data": {
                      "$ref": "#/components/schemas/SessionGrant"
                    },
                    "request_id": {
                      "$ref": "#/components/schemas/RequestID"
                    }
                  },
                  "required": [
                    "data",
                    "request_id"
                  ],
                  "type": "object"
                }
              }
            },
            "description": "Risposta riuscita"
          },
          "400": {
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/Error"
                }
              }
            },
            "description": "Campi, ID del prodotto o ambiente non validi."
          },
          "401": {
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/Error"
                }
              }
            },
            "description": "LOGIN_FAILED (accesso) o AUTH_REQUIRED (sessione scaduta/revocata). Eliminare le sessioni rifiutate; non ricorrere mai a un ripiego dopo un rifiuto esplicito."
          },
          "403": {
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/Error"
                }
              }
            },
            "description": "Operazione vietata, verifica dell'email richiesta, modifica iniziale della password richiesta o rifiuto esplicito del diritto."
          },
          "429": {
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/Error"
                }
              }
            },
            "description": "RATE_LIMITED; non riprovare in un ciclo senza attese adeguate.",
            "headers": {
              "Retry-After": {
                "description": "Secondi da attendere prima di un altro tentativo. Rispettare questo valore e limitare il numero totale di tentativi.",
                "schema": {
                  "minimum": 0,
                  "type": "integer"
                }
              }
            }
          },
          "503": {
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/Error"
                }
              }
            },
            "description": "Errore temporaneo del servizio o del database. L'accesso offline è consentito soltanto da un'autorizzazione firmata valida dell'SDK ufficiale."
          }
        },
        "security": [],
        "summary": "Accede al sito o all'applicazione desktop",
        "tags": [
          "Application integration"
        ]
      }
    },
    "/api/v1/auth/logout": {
      "post": {
        "operationId": "logout",
        "requestBody": {
          "content": {
            "application/json": {
              "schema": {
                "additionalProperties": false,
                "properties": {},
                "required": [],
                "type": "object"
              }
            }
          },
          "required": true
        },
        "responses": {
          "200": {
            "content": {
              "application/json": {
                "schema": {
                  "properties": {
                    "data": {
                      "properties": {
                        "completed": {
                          "type": "boolean"
                        }
                      },
                      "required": [
                        "completed"
                      ],
                      "type": "object"
                    },
                    "request_id": {
                      "$ref": "#/components/schemas/RequestID"
                    }
                  },
                  "required": [
                    "data",
                    "request_id"
                  ],
                  "type": "object"
                }
              }
            },
            "description": "Risposta riuscita"
          },
          "400": {
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/Error"
                }
              }
            },
            "description": "Campi, ID del prodotto o ambiente non validi."
          },
          "401": {
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/Error"
                }
              }
            },
            "description": "LOGIN_FAILED (accesso) o AUTH_REQUIRED (sessione scaduta/revocata). Eliminare le sessioni rifiutate; non ricorrere mai a un ripiego dopo un rifiuto esplicito."
          },
          "403": {
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/Error"
                }
              }
            },
            "description": "Operazione vietata, verifica dell'email richiesta, modifica iniziale della password richiesta o rifiuto esplicito del diritto."
          },
          "429": {
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/Error"
                }
              }
            },
            "description": "RATE_LIMITED; non riprovare in un ciclo senza attese adeguate.",
            "headers": {
              "Retry-After": {
                "description": "Secondi da attendere prima di un altro tentativo. Rispettare questo valore e limitare il numero totale di tentativi.",
                "schema": {
                  "minimum": 0,
                  "type": "integer"
                }
              }
            }
          },
          "503": {
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/Error"
                }
              }
            },
            "description": "Errore temporaneo del servizio o del database. L'accesso offline è consentito soltanto da un'autorizzazione firmata valida dell'SDK ufficiale."
          }
        },
        "security": [
          {
            "desktopBearer": []
          },
          {
            "websiteCookie": []
          }
        ],
        "summary": "Revoca la sessione corrente; la chiusura dell'SDK, la pulizia locale e il rilascio del dispositivo rimangono azioni distinte",
        "tags": [
          "Application integration"
        ]
      }
    },
    "/api/v1/auth/register": {
      "post": {
        "operationId": "registerCustomer",
        "requestBody": {
          "content": {
            "application/json": {
              "schema": {
                "additionalProperties": false,
                "properties": {
                  "email": {
                    "format": "email",
                    "type": "string"
                  },
                  "password": {
                    "description": "12–128 byte UTF-8 (il server conta i byte, non i caratteri Unicode).",
                    "type": "string",
                    "writeOnly": true,
                    "x-maxBytes": 128,
                    "x-minBytes": 12
                  }
                },
                "required": [
                  "email",
                  "password"
                ],
                "type": "object"
              }
            }
          },
          "required": true
        },
        "responses": {
          "200": {
            "content": {
              "application/json": {
                "schema": {
                  "properties": {
                    "data": {
                      "properties": {
                        "accepted": {
                          "type": "boolean"
                        }
                      },
                      "required": [
                        "accepted"
                      ],
                      "type": "object"
                    },
                    "request_id": {
                      "$ref": "#/components/schemas/RequestID"
                    }
                  },
                  "required": [
                    "data",
                    "request_id"
                  ],
                  "type": "object"
                }
              }
            },
            "description": "Risposta riuscita"
          },
          "400": {
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/Error"
                }
              }
            },
            "description": "Campi, ID del prodotto o ambiente non validi."
          },
          "401": {
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/Error"
                }
              }
            },
            "description": "LOGIN_FAILED (accesso) o AUTH_REQUIRED (sessione scaduta/revocata). Eliminare le sessioni rifiutate; non ricorrere mai a un ripiego dopo un rifiuto esplicito."
          },
          "403": {
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/Error"
                }
              }
            },
            "description": "Operazione vietata, verifica dell'email richiesta, modifica iniziale della password richiesta o rifiuto esplicito del diritto."
          },
          "429": {
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/Error"
                }
              }
            },
            "description": "RATE_LIMITED; non riprovare in un ciclo senza attese adeguate.",
            "headers": {
              "Retry-After": {
                "description": "Secondi da attendere prima di un altro tentativo. Rispettare questo valore e limitare il numero totale di tentativi.",
                "schema": {
                  "minimum": 0,
                  "type": "integer"
                }
              }
            }
          },
          "503": {
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/Error"
                }
              }
            },
            "description": "Errore temporaneo del servizio o del database. L'accesso offline è consentito soltanto da un'autorizzazione firmata valida dell'SDK ufficiale."
          }
        },
        "security": [],
        "summary": "Registra un cliente; la verifica segue le impostazioni email del commerciante",
        "tags": [
          "Application integration"
        ]
      }
    },
    "/api/v1/licensing/documentation": {
      "get": {
        "operationId": "readExternalLicensingGuide",
        "responses": {
          "200": {
            "content": {
              "text/plain": {
                "schema": {
                  "type": "string"
                }
              }
            },
            "description": "Documento pubblico"
          }
        },
        "security": [],
        "summary": "Documentazione pubblica sulle licenze esterne"
      }
    },
    "/api/v1/licensing/protocol": {
      "get": {
        "operationId": "readExternalLicensingProtocol",
        "responses": {
          "200": {
            "content": {
              "application/json": {
                "schema": {
                  "type": "object"
                }
              }
            },
            "description": "Documento pubblico"
          }
        },
        "security": [],
        "summary": "Documentazione pubblica sulle licenze esterne"
      }
    },
    "/api/v1/me": {
      "get": {
        "operationId": "currentUser",
        "responses": {
          "200": {
            "content": {
              "application/json": {
                "schema": {
                  "properties": {
                    "data": {
                      "properties": {
                        "session_id": {
                          "format": "uuid",
                          "type": "string"
                        },
                        "user": {
                          "$ref": "#/components/schemas/User"
                        }
                      },
                      "required": [
                        "user",
                        "session_id"
                      ],
                      "type": "object"
                    },
                    "request_id": {
                      "$ref": "#/components/schemas/RequestID"
                    }
                  },
                  "required": [
                    "data",
                    "request_id"
                  ],
                  "type": "object"
                }
              }
            },
            "description": "Risposta riuscita"
          },
          "400": {
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/Error"
                }
              }
            },
            "description": "Campi, ID del prodotto o ambiente non validi."
          },
          "401": {
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/Error"
                }
              }
            },
            "description": "LOGIN_FAILED (accesso) o AUTH_REQUIRED (sessione scaduta/revocata). Eliminare le sessioni rifiutate; non ricorrere mai a un ripiego dopo un rifiuto esplicito."
          },
          "403": {
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/Error"
                }
              }
            },
            "description": "Operazione vietata, verifica dell'email richiesta, modifica iniziale della password richiesta o rifiuto esplicito del diritto."
          },
          "429": {
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/Error"
                }
              }
            },
            "description": "RATE_LIMITED; non riprovare in un ciclo senza attese adeguate.",
            "headers": {
              "Retry-After": {
                "description": "Secondi da attendere prima di un altro tentativo. Rispettare questo valore e limitare il numero totale di tentativi.",
                "schema": {
                  "minimum": 0,
                  "type": "integer"
                }
              }
            }
          },
          "503": {
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/Error"
                }
              }
            },
            "description": "Errore temporaneo del servizio o del database. L'accesso offline è consentito soltanto da un'autorizzazione firmata valida dell'SDK ufficiale."
          }
        },
        "security": [
          {
            "desktopBearer": []
          },
          {
            "websiteCookie": []
          }
        ],
        "summary": "Legge l'account autenticato",
        "tags": [
          "Application integration"
        ]
      }
    },
    "/api/v1/me/orders": {
      "get": {
        "operationId": "listOrders",
        "responses": {
          "200": {
            "content": {
              "application/json": {
                "schema": {
                  "properties": {
                    "data": {
                      "items": {
                        "$ref": "#/components/schemas/Order"
                      },
                      "type": "array"
                    },
                    "request_id": {
                      "$ref": "#/components/schemas/RequestID"
                    }
                  },
                  "required": [
                    "data",
                    "request_id"
                  ],
                  "type": "object"
                }
              }
            },
            "description": "Risposta riuscita"
          },
          "400": {
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/Error"
                }
              }
            },
            "description": "Campi, ID del prodotto o ambiente non validi."
          },
          "401": {
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/Error"
                }
              }
            },
            "description": "LOGIN_FAILED (accesso) o AUTH_REQUIRED (sessione scaduta/revocata). Eliminare le sessioni rifiutate; non ricorrere mai a un ripiego dopo un rifiuto esplicito."
          },
          "403": {
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/Error"
                }
              }
            },
            "description": "Operazione vietata, verifica dell'email richiesta, modifica iniziale della password richiesta o rifiuto esplicito del diritto."
          },
          "429": {
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/Error"
                }
              }
            },
            "description": "RATE_LIMITED; non riprovare in un ciclo senza attese adeguate.",
            "headers": {
              "Retry-After": {
                "description": "Secondi da attendere prima di un altro tentativo. Rispettare questo valore e limitare il numero totale di tentativi.",
                "schema": {
                  "minimum": 0,
                  "type": "integer"
                }
              }
            }
          },
          "503": {
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/Error"
                }
              }
            },
            "description": "Errore temporaneo del servizio o del database. L'accesso offline è consentito soltanto da un'autorizzazione firmata valida dell'SDK ufficiale."
          }
        },
        "security": [
          {
            "desktopBearer": []
          },
          {
            "websiteCookie": []
          }
        ],
        "summary": "Elenca gli ordini del cliente corrente",
        "tags": [
          "Application integration"
        ]
      }
    },
    "/api/v1/me/products/{id}/delivery": {
      "get": {
        "operationId": "readOwnedExternalDelivery",
        "parameters": [
          {
            "in": "path",
            "name": "id",
            "required": true,
            "schema": {
              "format": "uuid",
              "type": "string"
            }
          },
          {
            "in": "query",
            "name": "environment",
            "required": true,
            "schema": {
              "enum": [
                "sandbox",
                "live"
              ],
              "type": "string"
            }
          }
        ],
        "responses": {
          "200": {
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ExternalDeliveryResponse"
                }
              }
            },
            "description": "Risposta riuscita"
          },
          "400": {
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/Error"
                }
              }
            },
            "description": "Configurazione/input non validi"
          },
          "401": {
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/Error"
                }
              }
            },
            "description": "Autenticazione richiesta"
          },
          "403": {
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/Error"
                }
              }
            },
            "description": "Amministratore richiesto, CSRF non valido o ambito vietato"
          },
          "404": {
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/Error"
                }
              }
            },
            "description": "Nessuna risorsa di cui si è titolari"
          },
          "409": {
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/Error"
                }
              }
            },
            "description": "Mappatura immutabile, migrazione necessaria o acquisto non pronto"
          },
          "429": {
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/Error"
                }
              }
            },
            "description": "Limite di frequenza raggiunto"
          },
          "503": {
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/Error"
                }
              }
            },
            "description": "Archivio/servizio esterno non disponibile"
          }
        },
        "security": [
          {
            "desktopBearer": []
          },
          {
            "websiteCookie": []
          }
        ],
        "summary": "Legge la consegna esterna corrente di cui si è titolari; non costituisce mai una decisione di autorizzazione all'esecuzione",
        "tags": [
          "Custom licensing"
        ]
      }
    },
    "/api/v1/me/sessions": {
      "get": {
        "operationId": "listSessions",
        "responses": {
          "200": {
            "content": {
              "application/json": {
                "schema": {
                  "properties": {
                    "data": {
                      "items": {
                        "$ref": "#/components/schemas/SessionView"
                      },
                      "type": "array"
                    },
                    "request_id": {
                      "$ref": "#/components/schemas/RequestID"
                    }
                  },
                  "required": [
                    "data",
                    "request_id"
                  ],
                  "type": "object"
                }
              }
            },
            "description": "Risposta riuscita"
          },
          "400": {
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/Error"
                }
              }
            },
            "description": "Campi, ID del prodotto o ambiente non validi."
          },
          "401": {
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/Error"
                }
              }
            },
            "description": "LOGIN_FAILED (accesso) o AUTH_REQUIRED (sessione scaduta/revocata). Eliminare le sessioni rifiutate; non ricorrere mai a un ripiego dopo un rifiuto esplicito."
          },
          "403": {
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/Error"
                }
              }
            },
            "description": "Operazione vietata, verifica dell'email richiesta, modifica iniziale della password richiesta o rifiuto esplicito del diritto."
          },
          "429": {
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/Error"
                }
              }
            },
            "description": "RATE_LIMITED; non riprovare in un ciclo senza attese adeguate.",
            "headers": {
              "Retry-After": {
                "description": "Secondi da attendere prima di un altro tentativo. Rispettare questo valore e limitare il numero totale di tentativi.",
                "schema": {
                  "minimum": 0,
                  "type": "integer"
                }
              }
            }
          },
          "503": {
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/Error"
                }
              }
            },
            "description": "Errore temporaneo del servizio o del database. L'accesso offline è consentito soltanto da un'autorizzazione firmata valida dell'SDK ufficiale."
          }
        },
        "security": [
          {
            "desktopBearer": []
          },
          {
            "websiteCookie": []
          }
        ],
        "summary": "Elenca le sessioni attive dell'account",
        "tags": [
          "Application integration"
        ]
      }
    },
    "/api/v1/me/sessions/{id}": {
      "delete": {
        "operationId": "revokeSession",
        "parameters": [
          {
            "in": "path",
            "name": "id",
            "required": true,
            "schema": {
              "format": "uuid",
              "type": "string"
            }
          }
        ],
        "responses": {
          "200": {
            "content": {
              "application/json": {
                "schema": {
                  "properties": {
                    "data": {
                      "properties": {
                        "completed": {
                          "type": "boolean"
                        }
                      },
                      "required": [
                        "completed"
                      ],
                      "type": "object"
                    },
                    "request_id": {
                      "$ref": "#/components/schemas/RequestID"
                    }
                  },
                  "required": [
                    "data",
                    "request_id"
                  ],
                  "type": "object"
                }
              }
            },
            "description": "Risposta riuscita"
          },
          "400": {
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/Error"
                }
              }
            },
            "description": "Campi, ID del prodotto o ambiente non validi."
          },
          "401": {
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/Error"
                }
              }
            },
            "description": "LOGIN_FAILED (accesso) o AUTH_REQUIRED (sessione scaduta/revocata). Eliminare le sessioni rifiutate; non ricorrere mai a un ripiego dopo un rifiuto esplicito."
          },
          "403": {
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/Error"
                }
              }
            },
            "description": "Operazione vietata, verifica dell'email richiesta, modifica iniziale della password richiesta o rifiuto esplicito del diritto."
          },
          "429": {
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/Error"
                }
              }
            },
            "description": "RATE_LIMITED; non riprovare in un ciclo senza attese adeguate.",
            "headers": {
              "Retry-After": {
                "description": "Secondi da attendere prima di un altro tentativo. Rispettare questo valore e limitare il numero totale di tentativi.",
                "schema": {
                  "minimum": 0,
                  "type": "integer"
                }
              }
            }
          },
          "503": {
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/Error"
                }
              }
            },
            "description": "Errore temporaneo del servizio o del database. L'accesso offline è consentito soltanto da un'autorizzazione firmata valida dell'SDK ufficiale."
          }
        },
        "security": [
          {
            "desktopBearer": []
          },
          {
            "websiteCookie": []
          }
        ],
        "summary": "Revoca una sessione di cui si è titolari",
        "tags": [
          "Application integration"
        ]
      }
    },
    "/api/v1/orders": {
      "post": {
        "description": "I prezzi vengono calcolati sul server. Il rinnovo e l'upgrade richiedono un preventivo emesso dal server. Seguire il checkout ospitato; il ritorno tramite reindirizzamento non è una prova del pagamento.",
        "operationId": "createCheckout",
        "requestBody": {
          "content": {
            "application/json": {
              "schema": {
                "additionalProperties": false,
                "properties": {
                  "action": {
                    "enum": [
                      "purchase",
                      "renew",
                      "upgrade"
                    ],
                    "type": "string"
                  },
                  "environment": {
                    "enum": [
                      "sandbox",
                      "live"
                    ],
                    "type": "string"
                  },
                  "idempotency_key": {
                    "description": "Identificativo stabile dell'operazione, 16–80 byte UTF-8. Riutilizzare la stessa chiave nei tentativi successivi della stessa operazione.",
                    "type": "string",
                    "x-maxBytes": 80,
                    "x-minBytes": 16
                  },
                  "plan_version_id": {
                    "format": "uuid",
                    "type": "string"
                  },
                  "product_id": {
                    "format": "uuid",
                    "type": "string"
                  },
                  "provider": {
                    "enum": [
                      "stripe",
                      "paypal",
                      "waffo",
                      "paddle"
                    ],
                    "type": "string"
                  },
                  "purchase_periods": {
                    "minimum": 1,
                    "type": "integer"
                  },
                  "quote_token": {
                    "type": "string",
                    "writeOnly": true
                  }
                },
                "required": [
                  "product_id",
                  "plan_version_id",
                  "environment",
                  "provider",
                  "idempotency_key"
                ],
                "type": "object"
              }
            }
          },
          "required": true
        },
        "responses": {
          "200": {
            "content": {
              "application/json": {
                "schema": {
                  "properties": {
                    "data": {
                      "$ref": "#/components/schemas/Checkout"
                    },
                    "request_id": {
                      "$ref": "#/components/schemas/RequestID"
                    }
                  },
                  "required": [
                    "data",
                    "request_id"
                  ],
                  "type": "object"
                }
              }
            },
            "description": "Risposta riuscita"
          },
          "400": {
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/Error"
                }
              }
            },
            "description": "Campi, ID del prodotto o ambiente non validi."
          },
          "401": {
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/Error"
                }
              }
            },
            "description": "LOGIN_FAILED (accesso) o AUTH_REQUIRED (sessione scaduta/revocata). Eliminare le sessioni rifiutate; non ricorrere mai a un ripiego dopo un rifiuto esplicito."
          },
          "403": {
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/Error"
                }
              }
            },
            "description": "Operazione vietata, verifica dell'email richiesta, modifica iniziale della password richiesta o rifiuto esplicito del diritto."
          },
          "429": {
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/Error"
                }
              }
            },
            "description": "RATE_LIMITED; non riprovare in un ciclo senza attese adeguate.",
            "headers": {
              "Retry-After": {
                "description": "Secondi da attendere prima di un altro tentativo. Rispettare questo valore e limitare il numero totale di tentativi.",
                "schema": {
                  "minimum": 0,
                  "type": "integer"
                }
              }
            }
          },
          "503": {
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/Error"
                }
              }
            },
            "description": "Errore temporaneo del servizio o del database. L'accesso offline è consentito soltanto da un'autorizzazione firmata valida dell'SDK ufficiale."
          }
        },
        "security": [
          {
            "desktopBearer": []
          },
          {
            "websiteCookie": []
          }
        ],
        "summary": "Crea o recupera un checkout di cui si è titolari usando una chiave di idempotenza stabile",
        "tags": [
          "Application integration"
        ]
      }
    },
    "/api/v1/orders/{id}": {
      "get": {
        "operationId": "getOrder",
        "parameters": [
          {
            "in": "path",
            "name": "id",
            "required": true,
            "schema": {
              "format": "uuid",
              "type": "string"
            }
          }
        ],
        "responses": {
          "200": {
            "content": {
              "application/json": {
                "schema": {
                  "properties": {
                    "data": {
                      "$ref": "#/components/schemas/Checkout"
                    },
                    "request_id": {
                      "$ref": "#/components/schemas/RequestID"
                    }
                  },
                  "required": [
                    "data",
                    "request_id"
                  ],
                  "type": "object"
                }
              }
            },
            "description": "Risposta riuscita"
          },
          "400": {
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/Error"
                }
              }
            },
            "description": "Campi, ID del prodotto o ambiente non validi."
          },
          "401": {
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/Error"
                }
              }
            },
            "description": "LOGIN_FAILED (accesso) o AUTH_REQUIRED (sessione scaduta/revocata). Eliminare le sessioni rifiutate; non ricorrere mai a un ripiego dopo un rifiuto esplicito."
          },
          "403": {
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/Error"
                }
              }
            },
            "description": "Operazione vietata, verifica dell'email richiesta, modifica iniziale della password richiesta o rifiuto esplicito del diritto."
          },
          "429": {
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/Error"
                }
              }
            },
            "description": "RATE_LIMITED; non riprovare in un ciclo senza attese adeguate.",
            "headers": {
              "Retry-After": {
                "description": "Secondi da attendere prima di un altro tentativo. Rispettare questo valore e limitare il numero totale di tentativi.",
                "schema": {
                  "minimum": 0,
                  "type": "integer"
                }
              }
            }
          },
          "503": {
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/Error"
                }
              }
            },
            "description": "Errore temporaneo del servizio o del database. L'accesso offline è consentito soltanto da un'autorizzazione firmata valida dell'SDK ufficiale."
          }
        },
        "security": [
          {
            "desktopBearer": []
          },
          {
            "websiteCookie": []
          }
        ],
        "summary": "Legge un ordine di cui si è titolari e l'avanzamento dell'evasione",
        "tags": [
          "Application integration"
        ]
      }
    },
    "/api/v1/orders/{id}/reconcile": {
      "post": {
        "operationId": "reconcileOrder",
        "parameters": [
          {
            "in": "path",
            "name": "id",
            "required": true,
            "schema": {
              "format": "uuid",
              "type": "string"
            }
          }
        ],
        "requestBody": {
          "content": {
            "application/json": {
              "schema": {
                "additionalProperties": false,
                "properties": {},
                "required": [],
                "type": "object"
              }
            }
          },
          "required": true
        },
        "responses": {
          "200": {
            "content": {
              "application/json": {
                "schema": {
                  "properties": {
                    "data": {
                      "$ref": "#/components/schemas/Checkout"
                    },
                    "request_id": {
                      "$ref": "#/components/schemas/RequestID"
                    }
                  },
                  "required": [
                    "data",
                    "request_id"
                  ],
                  "type": "object"
                }
              }
            },
            "description": "Risposta riuscita"
          },
          "400": {
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/Error"
                }
              }
            },
            "description": "Campi, ID del prodotto o ambiente non validi."
          },
          "401": {
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/Error"
                }
              }
            },
            "description": "LOGIN_FAILED (accesso) o AUTH_REQUIRED (sessione scaduta/revocata). Eliminare le sessioni rifiutate; non ricorrere mai a un ripiego dopo un rifiuto esplicito."
          },
          "403": {
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/Error"
                }
              }
            },
            "description": "Operazione vietata, verifica dell'email richiesta, modifica iniziale della password richiesta o rifiuto esplicito del diritto."
          },
          "429": {
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/Error"
                }
              }
            },
            "description": "RATE_LIMITED; non riprovare in un ciclo senza attese adeguate.",
            "headers": {
              "Retry-After": {
                "description": "Secondi da attendere prima di un altro tentativo. Rispettare questo valore e limitare il numero totale di tentativi.",
                "schema": {
                  "minimum": 0,
                  "type": "integer"
                }
              }
            }
          },
          "503": {
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/Error"
                }
              }
            },
            "description": "Errore temporaneo del servizio o del database. L'accesso offline è consentito soltanto da un'autorizzazione firmata valida dell'SDK ufficiale."
          }
        },
        "security": [
          {
            "desktopBearer": []
          },
          {
            "websiteCookie": []
          }
        ],
        "summary": "Consulta il fornitore di pagamento per un ordine di cui si è titolari",
        "tags": [
          "Application integration"
        ]
      }
    },
    "/api/v1/software/products/{id}/credential": {
      "post": {
        "deprecated": true,
        "description": "Le sessioni browser non possono recuperare chiavi di licenza. Non vengono accettati ID utente selezionati dal client. 403 ENTITLEMENT_PENDING include Retry-After: 3; i tentativi devono essere limitati. EXPIRED/SUSPENDED richiedono un intervento dell'utente. 404 ENTITLEMENT_NOT_PURCHASED indica l'assenza di un diritto posseduto.",
        "operationId": "softwareCredential",
        "parameters": [
          {
            "description": "ID del prodotto Launch, non ID del prodotto Licentivo.",
            "in": "path",
            "name": "id",
            "required": true,
            "schema": {
              "format": "uuid",
              "type": "string"
            }
          }
        ],
        "requestBody": {
          "content": {
            "application/json": {
              "schema": {
                "additionalProperties": false,
                "properties": {
                  "environment": {
                    "enum": [
                      "sandbox",
                      "live"
                    ],
                    "type": "string"
                  }
                },
                "required": [
                  "environment"
                ],
                "type": "object"
              }
            }
          },
          "required": true
        },
        "responses": {
          "410": {
            "description": "LICENSE_CREDENTIAL_REMOVED; non viene restituita alcuna chiave di licenza"
          }
        },
        "security": [
          {
            "desktopBearer": []
          }
        ],
        "summary": "Rimosso: gli SDK account devono usare lo scambio di identità",
        "tags": [
          "Application integration"
        ]
      }
    },
    "/api/v1/software/products/{id}/identity": {
      "post": {
        "operationId": "exchangeAccountIdentity",
        "parameters": [
          {
            "in": "path",
            "name": "id",
            "required": true,
            "schema": {
              "format": "uuid",
              "type": "string"
            }
          }
        ],
        "requestBody": {
          "content": {
            "application/json": {
              "schema": {
                "additionalProperties": false,
                "properties": {
                  "environment": {
                    "enum": [
                      "sandbox",
                      "live"
                    ],
                    "type": "string"
                  }
                },
                "required": [
                  "environment"
                ],
                "type": "object"
              }
            }
          },
          "required": true
        },
        "responses": {
          "200": {
            "content": {
              "application/json": {
                "schema": {
                  "properties": {
                    "data": {
                      "$ref": "#/components/schemas/LaunchIdentity"
                    }
                  },
                  "type": "object"
                }
              }
            },
            "description": "Solo contesto dell'identità. Licentivo decide l'autorizzazione."
          },
          "401": {
            "description": "Sessione dell'account rifiutata"
          },
          "503": {
            "description": "Connessione dell'identità non disponibile"
          }
        },
        "security": [
          {
            "desktopBearer": []
          }
        ],
        "summary": "Ottiene un'attestazione di identità dell'account di breve durata per l'SDK ufficiale"
      }
    },
    "/api/v1/software/products/{id}/status": {
      "get": {
        "description": "Sono informazioni sull'acquisto/sulla sincronizzazione, non un'autorizzazione all'esecuzione.",
        "operationId": "softwareStatus",
        "parameters": [
          {
            "description": "ID del prodotto Launch, non ID del prodotto Licentivo.",
            "in": "path",
            "name": "id",
            "required": true,
            "schema": {
              "format": "uuid",
              "type": "string"
            }
          },
          {
            "in": "query",
            "name": "environment",
            "required": false,
            "schema": {
              "default": "live",
              "enum": [
                "sandbox",
                "live"
              ],
              "type": "string"
            }
          }
        ],
        "responses": {
          "200": {
            "content": {
              "application/json": {
                "schema": {
                  "properties": {
                    "data": {
                      "$ref": "#/components/schemas/EntitlementStatus"
                    },
                    "request_id": {
                      "$ref": "#/components/schemas/RequestID"
                    }
                  },
                  "required": [
                    "data",
                    "request_id"
                  ],
                  "type": "object"
                }
              }
            },
            "description": "Risposta riuscita"
          },
          "400": {
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/Error"
                }
              }
            },
            "description": "Campi, ID del prodotto o ambiente non validi."
          },
          "401": {
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/Error"
                }
              }
            },
            "description": "LOGIN_FAILED (accesso) o AUTH_REQUIRED (sessione scaduta/revocata). Eliminare le sessioni rifiutate; non ricorrere mai a un ripiego dopo un rifiuto esplicito."
          },
          "403": {
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/Error"
                }
              }
            },
            "description": "Operazione vietata, verifica dell'email richiesta, modifica iniziale della password richiesta o rifiuto esplicito del diritto."
          },
          "429": {
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/Error"
                }
              }
            },
            "description": "RATE_LIMITED; non riprovare in un ciclo senza attese adeguate.",
            "headers": {
              "Retry-After": {
                "description": "Secondi da attendere prima di un altro tentativo. Rispettare questo valore e limitare il numero totale di tentativi.",
                "schema": {
                  "minimum": 0,
                  "type": "integer"
                }
              }
            }
          },
          "503": {
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/Error"
                }
              }
            },
            "description": "Errore temporaneo del servizio o del database. L'accesso offline è consentito soltanto da un'autorizzazione firmata valida dell'SDK ufficiale."
          }
        },
        "security": [
          {
            "desktopBearer": []
          }
        ],
        "summary": "Legge uno stato che consente di determinare le azioni per il cliente autenticato e il prodotto richiesto",
        "tags": [
          "Application integration"
        ]
      }
    },
    "/api/v1/system/status": {
      "get": {
        "operationId": "getSystemStatus",
        "responses": {
          "200": {
            "content": {
              "application/json": {
                "schema": {
                  "properties": {
                    "data": {
                      "properties": {
                        "implemented": {
                          "items": {
                            "type": "string"
                          },
                          "type": "array"
                        },
                        "phase": {
                          "const": "local-development"
                        },
                        "product": {
                          "const": "Licentivo Launch"
                        },
                        "sales_enabled": {
                          "const": false
                        },
                        "version": {
                          "type": "string"
                        }
                      },
                      "required": [
                        "product",
                        "version",
                        "phase",
                        "sales_enabled",
                        "implemented"
                      ],
                      "type": "object"
                    },
                    "request_id": {
                      "$ref": "#/components/schemas/RequestID"
                    }
                  },
                  "required": [
                    "data",
                    "request_id"
                  ],
                  "type": "object"
                }
              }
            },
            "description": "Fase di sviluppo corrente e ambito dell'implementazione"
          }
        },
        "summary": "Espone la versione e l'ambito dell'implementazione senza configurazione o credenziali"
      }
    },
    "/healthz": {
      "get": {
        "operationId": "getLiveness",
        "responses": {
          "200": {
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/HealthResponse"
                }
              }
            },
            "description": "Il processo HTTP è in esecuzione"
          }
        },
        "summary": "Operatività del processo, indipendente dalla disponibilità del database"
      }
    },
    "/readyz": {
      "get": {
        "operationId": "getReadiness",
        "responses": {
          "200": {
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ReadinessResponse"
                }
              }
            },
            "description": "Il database è pronto; questo non certifica il collaudo di pagamenti o licenze"
          },
          "503": {
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ReadinessResponse"
                }
              }
            },
            "description": "Il database non è configurato, non è disponibile o non contiene le tabelle obbligatorie"
          }
        },
        "summary": "Verifica la connettività MySQL e le tabelle GORM obbligatorie"
      }
    }
  },
  "servers": [
    {
      "description": "Sostituire con l'origine del proprio negozio; HTTP è consentito soltanto per lo sviluppo sandbox su loopback.",
      "url": "https://shop.example.com"
    }
  ]
}
