{
  "openapi": "3.1.0",
  "info": {
    "title": "Server Line read-only pricing API",
    "version": "1.0.0",
    "description": "Public pricing for all 14 registered products. No account, JavaScript, cookies or API key required. Uses the same official server-side calculators and Excel sources as the cart. First read product fields, then calculate with every required field. Do not guess option codes, discard modifiers, estimate missing prices or treat a previous configuration as the requested one. No ordering, cart, payment or email operation is exposed. Option labels and validation messages are Hungarian. HTML fallback: /api/calculator.php."
  },
  "servers": [
    {
      "url": "https://www.serverline.hu"
    }
  ],
  "security": [],
  "externalDocs": {
    "url": "https://www.serverline.hu/api/"
  },
  "paths": {
    "/api/v1/products.php": {
      "get": {
        "operationId": "getProductsOrFields",
        "summary": "List products or read live fields and option codes",
        "description": "Without product_code: catalog. With product_code: that product’s required fields and option codes. Some combinations and production times are conditional; validate with a quote. If a JSON reader cannot open this endpoint, read /api/calculator.php?product_code=... as HTML.",
        "parameters": [
          {
            "name": "product_code",
            "in": "query",
            "required": false,
            "schema": {
              "$ref": "#/components/schemas/ProductCode"
            }
          }
        ],
        "responses": {
          "200": {
            "description": "Catalog or product fields.",
            "content": {
              "application/json": {
                "schema": {
                  "oneOf": [
                    {
                      "$ref": "#/components/schemas/Catalog"
                    },
                    {
                      "$ref": "#/components/schemas/Product"
                    }
                  ]
                }
              }
            }
          },
          "404": {
            "description": "Unknown product.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/Error"
                }
              }
            }
          },
          "405": {
            "description": "Unsupported method; see Allow header.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/Error"
                }
              }
            }
          },
          "422": {
            "description": "Missing, malformed or unsupported selection. No price is returned; do not reuse a prior quote.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/Error"
                }
              }
            }
          },
          "503": {
            "description": "Pricing unavailable. No estimate is returned.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/Error"
                }
              }
            }
          }
        }
      }
    },
    "/api/v1/quote.php": {
      "get": {
        "operationId": "calculateQuoteGet",
        "summary": "Calculate a configured item using URL parameters",
        "description": "Send product_code and all fields for that product, flat in the query. Parameters shown here are a union of all product fields: only that product’s fields are allowed, and every one of them must be present. An empty gyartasi_ido selects actual normal production. Encode plus signs in brochure extent codes as %2B. No side effects.",
        "parameters": [
          {
            "name": "product_code",
            "in": "query",
            "required": true,
            "schema": {
              "$ref": "#/components/schemas/ProductCode"
            }
          },
          {
            "name": "mennyiseg",
            "in": "query",
            "required": false,
            "schema": {
              "oneOf": [
                {
                  "type": "integer",
                  "minimum": 1,
                  "maximum": 999999999
                },
                {
                  "type": "string",
                  "pattern": "^[1-9][0-9]{0,8}$"
                }
              ],
              "description": "Product-specific mennyiseg. Use the live product field description; do not invent or translate option codes."
            },
            "description": "Required if listed in the selected product’s live fields; omit fields belonging to other products. Product-specific mennyiseg. Use the live product field description; do not invent or translate option codes."
          },
          {
            "name": "nyomtatas",
            "in": "query",
            "required": false,
            "schema": {
              "oneOf": [
                {
                  "type": "string",
                  "maxLength": 100
                },
                {
                  "type": "integer"
                }
              ],
              "description": "Product-specific nyomtatas. Use the live product field description; do not invent or translate option codes."
            },
            "description": "Required if listed in the selected product’s live fields; omit fields belonging to other products. Product-specific nyomtatas. Use the live product field description; do not invent or translate option codes."
          },
          {
            "name": "meret",
            "in": "query",
            "required": false,
            "schema": {
              "oneOf": [
                {
                  "type": "string",
                  "maxLength": 100
                },
                {
                  "type": "integer"
                }
              ],
              "description": "Product-specific meret. Use the live product field description; do not invent or translate option codes."
            },
            "description": "Required if listed in the selected product’s live fields; omit fields belonging to other products. Product-specific meret. Use the live product field description; do not invent or translate option codes."
          },
          {
            "name": "karton",
            "in": "query",
            "required": false,
            "schema": {
              "oneOf": [
                {
                  "type": "string",
                  "maxLength": 100
                },
                {
                  "type": "integer"
                }
              ],
              "description": "Product-specific karton. Use the live product field description; do not invent or translate option codes."
            },
            "description": "Required if listed in the selected product’s live fields; omit fields belonging to other products. Product-specific karton. Use the live product field description; do not invent or translate option codes."
          },
          {
            "name": "feluletnemesites",
            "in": "query",
            "required": false,
            "schema": {
              "oneOf": [
                {
                  "type": "string",
                  "maxLength": 100
                },
                {
                  "type": "integer"
                }
              ],
              "description": "Product-specific feluletnemesites. Use the live product field description; do not invent or translate option codes."
            },
            "description": "Required if listed in the selected product’s live fields; omit fields belonging to other products. Product-specific feluletnemesites. Use the live product field description; do not invent or translate option codes."
          },
          {
            "name": "sarokkerekites",
            "in": "query",
            "required": false,
            "schema": {
              "oneOf": [
                {
                  "type": "string",
                  "maxLength": 100
                },
                {
                  "type": "integer"
                }
              ],
              "description": "Product-specific sarokkerekites. Use the live product field description; do not invent or translate option codes."
            },
            "description": "Required if listed in the selected product’s live fields; omit fields belonging to other products. Product-specific sarokkerekites. Use the live product field description; do not invent or translate option codes."
          },
          {
            "name": "gyartasi_ido",
            "in": "query",
            "required": false,
            "schema": {
              "oneOf": [
                {
                  "type": "string",
                  "maxLength": 100
                },
                {
                  "type": "integer"
                }
              ],
              "description": "Exact production-time code. Empty string selects the actual normal production time for this configuration. Duration starts when the job is ready for production, not at order submission."
            },
            "description": "Required if listed in the selected product’s live fields; omit fields belonging to other products. Exact production-time code. Empty string selects the actual normal production time for this configuration. Duration starts when the job is ready for production, not at order submission."
          },
          {
            "name": "anyagleadas",
            "in": "query",
            "required": false,
            "schema": {
              "oneOf": [
                {
                  "type": "string",
                  "maxLength": 100
                },
                {
                  "type": "integer"
                }
              ],
              "description": "Artwork preparation price category, not a file upload. Read the product-specific codes."
            },
            "description": "Required if listed in the selected product’s live fields; omit fields belonging to other products. Artwork preparation price category, not a file upload. Read the product-specific codes."
          },
          {
            "name": "szelesseg_cm",
            "in": "query",
            "required": false,
            "schema": {
              "oneOf": [
                {
                  "type": "integer",
                  "minimum": 1,
                  "maximum": 999999999
                },
                {
                  "type": "string",
                  "pattern": "^[1-9][0-9]{0,8}$"
                }
              ],
              "description": "Product-specific szelesseg_cm. Use the live product field description; do not invent or translate option codes."
            },
            "description": "Required if listed in the selected product’s live fields; omit fields belonging to other products. Product-specific szelesseg_cm. Use the live product field description; do not invent or translate option codes."
          },
          {
            "name": "magassag_cm",
            "in": "query",
            "required": false,
            "schema": {
              "oneOf": [
                {
                  "type": "integer",
                  "minimum": 1,
                  "maximum": 999999999
                },
                {
                  "type": "string",
                  "pattern": "^[1-9][0-9]{0,8}$"
                }
              ],
              "description": "Product-specific magassag_cm. Use the live product field description; do not invent or translate option codes."
            },
            "description": "Required if listed in the selected product’s live fields; omit fields belonging to other products. Product-specific magassag_cm. Use the live product field description; do not invent or translate option codes."
          },
          {
            "name": "szelesseg_mm",
            "in": "query",
            "required": false,
            "schema": {
              "oneOf": [
                {
                  "type": "integer",
                  "minimum": 1,
                  "maximum": 999999999
                },
                {
                  "type": "string",
                  "pattern": "^[1-9][0-9]{0,8}$"
                }
              ],
              "description": "Product-specific szelesseg_mm. Use the live product field description; do not invent or translate option codes."
            },
            "description": "Required if listed in the selected product’s live fields; omit fields belonging to other products. Product-specific szelesseg_mm. Use the live product field description; do not invent or translate option codes."
          },
          {
            "name": "hosszusag_mm",
            "in": "query",
            "required": false,
            "schema": {
              "oneOf": [
                {
                  "type": "integer",
                  "minimum": 1,
                  "maximum": 999999999
                },
                {
                  "type": "string",
                  "pattern": "^[1-9][0-9]{0,8}$"
                }
              ],
              "description": "Product-specific hosszusag_mm. Use the live product field description; do not invent or translate option codes."
            },
            "description": "Required if listed in the selected product’s live fields; omit fields belonging to other products. Product-specific hosszusag_mm. Use the live product field description; do not invent or translate option codes."
          },
          {
            "name": "alapanyag",
            "in": "query",
            "required": false,
            "schema": {
              "oneOf": [
                {
                  "type": "string",
                  "maxLength": 100
                },
                {
                  "type": "integer"
                }
              ],
              "description": "Product-specific alapanyag. Use the live product field description; do not invent or translate option codes."
            },
            "description": "Required if listed in the selected product’s live fields; omit fields belonging to other products. Product-specific alapanyag. Use the live product field description; do not invent or translate option codes."
          },
          {
            "name": "kivitel",
            "in": "query",
            "required": false,
            "schema": {
              "oneOf": [
                {
                  "type": "string",
                  "maxLength": 100
                },
                {
                  "type": "integer"
                }
              ],
              "description": "Product-specific kivitel. Use the live product field description; do not invent or translate option codes."
            },
            "description": "Required if listed in the selected product’s live fields; omit fields belonging to other products. Product-specific kivitel. Use the live product field description; do not invent or translate option codes."
          },
          {
            "name": "papir",
            "in": "query",
            "required": false,
            "schema": {
              "oneOf": [
                {
                  "type": "string",
                  "maxLength": 100
                },
                {
                  "type": "integer"
                }
              ],
              "description": "Product-specific papir. Use the live product field description; do not invent or translate option codes."
            },
            "description": "Required if listed in the selected product’s live fields; omit fields belonging to other products. Product-specific papir. Use the live product field description; do not invent or translate option codes."
          },
          {
            "name": "terjedelem",
            "in": "query",
            "required": false,
            "schema": {
              "oneOf": [
                {
                  "type": "string",
                  "maxLength": 100
                },
                {
                  "type": "integer"
                }
              ],
              "description": "Product-specific extent. For brochures, 4+4 means 4 inner plus 4 cover pages (8 total); 8+4 means 12 total. Clarify whether the customer includes the cover and select its paper separately. Encode + as %2B in URLs."
            },
            "description": "Required if listed in the selected product’s live fields; omit fields belonging to other products. Product-specific extent. For brochures, 4+4 means 4 inner plus 4 cover pages (8 total); 8+4 means 12 total. Clarify whether the customer includes the cover and select its paper separately. Encode + as %2B in URLs."
          },
          {
            "name": "beliv",
            "in": "query",
            "required": false,
            "schema": {
              "oneOf": [
                {
                  "type": "string",
                  "maxLength": 100
                },
                {
                  "type": "integer"
                }
              ],
              "description": "Product-specific beliv. Use the live product field description; do not invent or translate option codes."
            },
            "description": "Required if listed in the selected product’s live fields; omit fields belonging to other products. Product-specific beliv. Use the live product field description; do not invent or translate option codes."
          },
          {
            "name": "borito",
            "in": "query",
            "required": false,
            "schema": {
              "oneOf": [
                {
                  "type": "string",
                  "maxLength": 100
                },
                {
                  "type": "integer"
                }
              ],
              "description": "Product-specific borito. Use the live product field description; do not invent or translate option codes."
            },
            "description": "Required if listed in the selected product’s live fields; omit fields belonging to other products. Product-specific borito. Use the live product field description; do not invent or translate option codes."
          },
          {
            "name": "oldalszam",
            "in": "query",
            "required": false,
            "schema": {
              "oneOf": [
                {
                  "type": "integer",
                  "minimum": 1,
                  "maximum": 999999999
                },
                {
                  "type": "string",
                  "pattern": "^[1-9][0-9]{0,8}$"
                }
              ],
              "description": "Product-specific oldalszam. Use the live product field description; do not invent or translate option codes."
            },
            "description": "Required if listed in the selected product’s live fields; omit fields belonging to other products. Product-specific oldalszam. Use the live product field description; do not invent or translate option codes."
          }
        ],
        "responses": {
          "200": {
            "description": "Current configured item price.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/Quote"
                }
              }
            }
          },
          "404": {
            "description": "Unknown product.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/Error"
                }
              }
            }
          },
          "405": {
            "description": "Unsupported method; see Allow header.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/Error"
                }
              }
            }
          },
          "422": {
            "description": "Missing, malformed or unsupported selection. No price is returned; do not reuse a prior quote.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/Error"
                }
              }
            }
          },
          "503": {
            "description": "Pricing unavailable. No estimate is returned.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/Error"
                }
              }
            }
          }
        }
      },
      "post": {
        "operationId": "calculateQuotePost",
        "summary": "Calculate a configured item using a JSON body",
        "description": "Body limit 16 KiB. Send product_code and selections, using the matching product schema. Unknown fields, booleans, arrays or unsupported option codes are rejected. No side effects.",
        "requestBody": {
          "required": true,
          "content": {
            "application/json": {
              "schema": {
                "$ref": "#/components/schemas/QuoteRequest"
              },
              "examples": {
                "immediateMattBusinessCard": {
                  "summary": "100 single-sided matt-laminated cards with immediate production; no assumed price",
                  "value": {
                    "product_code": "business_card",
                    "selections": {
                      "mennyiseg": 100,
                      "nyomtatas": "4-0",
                      "meret": "90x50",
                      "karton": "alapkarton",
                      "feluletnemesites": "matt-folia",
                      "sarokkerekites": "nincs",
                      "gyartasi_ido": "azonnali",
                      "anyagleadas": "nyomdakesz"
                    }
                  }
                }
              }
            }
          }
        },
        "responses": {
          "200": {
            "description": "Current configured item price.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/Quote"
                }
              }
            }
          },
          "404": {
            "description": "Unknown product.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/Error"
                }
              }
            }
          },
          "405": {
            "description": "Unsupported method; see Allow header.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/Error"
                }
              }
            }
          },
          "422": {
            "description": "Missing, malformed or unsupported selection. No price is returned; do not reuse a prior quote.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/Error"
                }
              }
            }
          },
          "503": {
            "description": "Pricing unavailable. No estimate is returned.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/Error"
                }
              }
            }
          }
        }
      }
    },
    "/api/calculator.php": {
      "get": {
        "operationId": "readHtmlPricing",
        "summary": "Read fields or calculate a price as HTML without JavaScript",
        "description": "Without parameters: product list. With product_code only: form plus a visible text table of all option codes. With product fields: calculated HTML result, including actual selected finishing and production time. No form interaction is required: the full query URL can be fetched directly. This is a read-only alternative to JSON, not a separate price formula.",
        "parameters": [
          {
            "name": "product_code",
            "in": "query",
            "required": false,
            "schema": {
              "$ref": "#/components/schemas/ProductCode"
            }
          },
          {
            "name": "mennyiseg",
            "in": "query",
            "required": false,
            "schema": {
              "oneOf": [
                {
                  "type": "integer",
                  "minimum": 1,
                  "maximum": 999999999
                },
                {
                  "type": "string",
                  "pattern": "^[1-9][0-9]{0,8}$"
                }
              ],
              "description": "Product-specific mennyiseg. Use the live product field description; do not invent or translate option codes."
            },
            "description": "Required if listed in the selected product’s live fields; omit fields belonging to other products. Product-specific mennyiseg. Use the live product field description; do not invent or translate option codes."
          },
          {
            "name": "nyomtatas",
            "in": "query",
            "required": false,
            "schema": {
              "oneOf": [
                {
                  "type": "string",
                  "maxLength": 100
                },
                {
                  "type": "integer"
                }
              ],
              "description": "Product-specific nyomtatas. Use the live product field description; do not invent or translate option codes."
            },
            "description": "Required if listed in the selected product’s live fields; omit fields belonging to other products. Product-specific nyomtatas. Use the live product field description; do not invent or translate option codes."
          },
          {
            "name": "meret",
            "in": "query",
            "required": false,
            "schema": {
              "oneOf": [
                {
                  "type": "string",
                  "maxLength": 100
                },
                {
                  "type": "integer"
                }
              ],
              "description": "Product-specific meret. Use the live product field description; do not invent or translate option codes."
            },
            "description": "Required if listed in the selected product’s live fields; omit fields belonging to other products. Product-specific meret. Use the live product field description; do not invent or translate option codes."
          },
          {
            "name": "karton",
            "in": "query",
            "required": false,
            "schema": {
              "oneOf": [
                {
                  "type": "string",
                  "maxLength": 100
                },
                {
                  "type": "integer"
                }
              ],
              "description": "Product-specific karton. Use the live product field description; do not invent or translate option codes."
            },
            "description": "Required if listed in the selected product’s live fields; omit fields belonging to other products. Product-specific karton. Use the live product field description; do not invent or translate option codes."
          },
          {
            "name": "feluletnemesites",
            "in": "query",
            "required": false,
            "schema": {
              "oneOf": [
                {
                  "type": "string",
                  "maxLength": 100
                },
                {
                  "type": "integer"
                }
              ],
              "description": "Product-specific feluletnemesites. Use the live product field description; do not invent or translate option codes."
            },
            "description": "Required if listed in the selected product’s live fields; omit fields belonging to other products. Product-specific feluletnemesites. Use the live product field description; do not invent or translate option codes."
          },
          {
            "name": "sarokkerekites",
            "in": "query",
            "required": false,
            "schema": {
              "oneOf": [
                {
                  "type": "string",
                  "maxLength": 100
                },
                {
                  "type": "integer"
                }
              ],
              "description": "Product-specific sarokkerekites. Use the live product field description; do not invent or translate option codes."
            },
            "description": "Required if listed in the selected product’s live fields; omit fields belonging to other products. Product-specific sarokkerekites. Use the live product field description; do not invent or translate option codes."
          },
          {
            "name": "gyartasi_ido",
            "in": "query",
            "required": false,
            "schema": {
              "oneOf": [
                {
                  "type": "string",
                  "maxLength": 100
                },
                {
                  "type": "integer"
                }
              ],
              "description": "Exact production-time code. Empty string selects the actual normal production time for this configuration. Duration starts when the job is ready for production, not at order submission."
            },
            "description": "Required if listed in the selected product’s live fields; omit fields belonging to other products. Exact production-time code. Empty string selects the actual normal production time for this configuration. Duration starts when the job is ready for production, not at order submission."
          },
          {
            "name": "anyagleadas",
            "in": "query",
            "required": false,
            "schema": {
              "oneOf": [
                {
                  "type": "string",
                  "maxLength": 100
                },
                {
                  "type": "integer"
                }
              ],
              "description": "Artwork preparation price category, not a file upload. Read the product-specific codes."
            },
            "description": "Required if listed in the selected product’s live fields; omit fields belonging to other products. Artwork preparation price category, not a file upload. Read the product-specific codes."
          },
          {
            "name": "szelesseg_cm",
            "in": "query",
            "required": false,
            "schema": {
              "oneOf": [
                {
                  "type": "integer",
                  "minimum": 1,
                  "maximum": 999999999
                },
                {
                  "type": "string",
                  "pattern": "^[1-9][0-9]{0,8}$"
                }
              ],
              "description": "Product-specific szelesseg_cm. Use the live product field description; do not invent or translate option codes."
            },
            "description": "Required if listed in the selected product’s live fields; omit fields belonging to other products. Product-specific szelesseg_cm. Use the live product field description; do not invent or translate option codes."
          },
          {
            "name": "magassag_cm",
            "in": "query",
            "required": false,
            "schema": {
              "oneOf": [
                {
                  "type": "integer",
                  "minimum": 1,
                  "maximum": 999999999
                },
                {
                  "type": "string",
                  "pattern": "^[1-9][0-9]{0,8}$"
                }
              ],
              "description": "Product-specific magassag_cm. Use the live product field description; do not invent or translate option codes."
            },
            "description": "Required if listed in the selected product’s live fields; omit fields belonging to other products. Product-specific magassag_cm. Use the live product field description; do not invent or translate option codes."
          },
          {
            "name": "szelesseg_mm",
            "in": "query",
            "required": false,
            "schema": {
              "oneOf": [
                {
                  "type": "integer",
                  "minimum": 1,
                  "maximum": 999999999
                },
                {
                  "type": "string",
                  "pattern": "^[1-9][0-9]{0,8}$"
                }
              ],
              "description": "Product-specific szelesseg_mm. Use the live product field description; do not invent or translate option codes."
            },
            "description": "Required if listed in the selected product’s live fields; omit fields belonging to other products. Product-specific szelesseg_mm. Use the live product field description; do not invent or translate option codes."
          },
          {
            "name": "hosszusag_mm",
            "in": "query",
            "required": false,
            "schema": {
              "oneOf": [
                {
                  "type": "integer",
                  "minimum": 1,
                  "maximum": 999999999
                },
                {
                  "type": "string",
                  "pattern": "^[1-9][0-9]{0,8}$"
                }
              ],
              "description": "Product-specific hosszusag_mm. Use the live product field description; do not invent or translate option codes."
            },
            "description": "Required if listed in the selected product’s live fields; omit fields belonging to other products. Product-specific hosszusag_mm. Use the live product field description; do not invent or translate option codes."
          },
          {
            "name": "alapanyag",
            "in": "query",
            "required": false,
            "schema": {
              "oneOf": [
                {
                  "type": "string",
                  "maxLength": 100
                },
                {
                  "type": "integer"
                }
              ],
              "description": "Product-specific alapanyag. Use the live product field description; do not invent or translate option codes."
            },
            "description": "Required if listed in the selected product’s live fields; omit fields belonging to other products. Product-specific alapanyag. Use the live product field description; do not invent or translate option codes."
          },
          {
            "name": "kivitel",
            "in": "query",
            "required": false,
            "schema": {
              "oneOf": [
                {
                  "type": "string",
                  "maxLength": 100
                },
                {
                  "type": "integer"
                }
              ],
              "description": "Product-specific kivitel. Use the live product field description; do not invent or translate option codes."
            },
            "description": "Required if listed in the selected product’s live fields; omit fields belonging to other products. Product-specific kivitel. Use the live product field description; do not invent or translate option codes."
          },
          {
            "name": "papir",
            "in": "query",
            "required": false,
            "schema": {
              "oneOf": [
                {
                  "type": "string",
                  "maxLength": 100
                },
                {
                  "type": "integer"
                }
              ],
              "description": "Product-specific papir. Use the live product field description; do not invent or translate option codes."
            },
            "description": "Required if listed in the selected product’s live fields; omit fields belonging to other products. Product-specific papir. Use the live product field description; do not invent or translate option codes."
          },
          {
            "name": "terjedelem",
            "in": "query",
            "required": false,
            "schema": {
              "oneOf": [
                {
                  "type": "string",
                  "maxLength": 100
                },
                {
                  "type": "integer"
                }
              ],
              "description": "Product-specific extent. For brochures, 4+4 means 4 inner plus 4 cover pages (8 total); 8+4 means 12 total. Clarify whether the customer includes the cover and select its paper separately. Encode + as %2B in URLs."
            },
            "description": "Required if listed in the selected product’s live fields; omit fields belonging to other products. Product-specific extent. For brochures, 4+4 means 4 inner plus 4 cover pages (8 total); 8+4 means 12 total. Clarify whether the customer includes the cover and select its paper separately. Encode + as %2B in URLs."
          },
          {
            "name": "beliv",
            "in": "query",
            "required": false,
            "schema": {
              "oneOf": [
                {
                  "type": "string",
                  "maxLength": 100
                },
                {
                  "type": "integer"
                }
              ],
              "description": "Product-specific beliv. Use the live product field description; do not invent or translate option codes."
            },
            "description": "Required if listed in the selected product’s live fields; omit fields belonging to other products. Product-specific beliv. Use the live product field description; do not invent or translate option codes."
          },
          {
            "name": "borito",
            "in": "query",
            "required": false,
            "schema": {
              "oneOf": [
                {
                  "type": "string",
                  "maxLength": 100
                },
                {
                  "type": "integer"
                }
              ],
              "description": "Product-specific borito. Use the live product field description; do not invent or translate option codes."
            },
            "description": "Required if listed in the selected product’s live fields; omit fields belonging to other products. Product-specific borito. Use the live product field description; do not invent or translate option codes."
          },
          {
            "name": "oldalszam",
            "in": "query",
            "required": false,
            "schema": {
              "oneOf": [
                {
                  "type": "integer",
                  "minimum": 1,
                  "maximum": 999999999
                },
                {
                  "type": "string",
                  "pattern": "^[1-9][0-9]{0,8}$"
                }
              ],
              "description": "Product-specific oldalszam. Use the live product field description; do not invent or translate option codes."
            },
            "description": "Required if listed in the selected product’s live fields; omit fields belonging to other products. Product-specific oldalszam. Use the live product field description; do not invent or translate option codes."
          },
          {
            "name": "language",
            "in": "query",
            "schema": {
              "type": "string",
              "enum": [
                "hu",
                "en"
              ]
            }
          },
          {
            "name": "calculate",
            "in": "query",
            "schema": {
              "type": "string",
              "const": "1"
            },
            "description": "Optional. Fields in the query already trigger calculation."
          }
        ],
        "responses": {
          "200": {
            "description": "HTML catalog, fields or calculated result.",
            "content": {
              "text/html": {
                "schema": {
                  "type": "string"
                }
              }
            }
          },
          "404": {
            "description": "HTML error page without a calculated price result.",
            "content": {
              "text/html": {
                "schema": {
                  "type": "string"
                }
              }
            }
          },
          "405": {
            "description": "HTML error page without a calculated price result.",
            "content": {
              "text/html": {
                "schema": {
                  "type": "string"
                }
              }
            }
          },
          "422": {
            "description": "HTML error page without a calculated price result.",
            "content": {
              "text/html": {
                "schema": {
                  "type": "string"
                }
              }
            }
          },
          "503": {
            "description": "HTML error page without a calculated price result.",
            "content": {
              "text/html": {
                "schema": {
                  "type": "string"
                }
              }
            }
          }
        }
      }
    }
  },
  "components": {
    "schemas": {
      "ProductCode": {
        "type": "string",
        "enum": [
          "business_card",
          "rollup",
          "molino",
          "sticker",
          "display",
          "folder",
          "brochure",
          "flyer",
          "menu",
          "notepad",
          "freight_calendar",
          "desk_pad_calendar",
          "wall_calendar",
          "desk_calendar"
        ]
      },
      "Option": {
        "type": "object",
        "required": [
          "code",
          "label"
        ],
        "properties": {
          "code": {
            "type": "string"
          },
          "label": {
            "type": "string"
          }
        }
      },
      "FieldDefinition": {
        "type": "object",
        "required": [
          "type",
          "required"
        ],
        "properties": {
          "type": {
            "type": "string",
            "enum": [
              "string",
              "integer"
            ]
          },
          "required": {
            "type": "boolean",
            "const": true
          },
          "description": {
            "type": "string"
          },
          "unit": {
            "type": "string"
          },
          "minimum": {
            "type": "number"
          },
          "maximum": {
            "type": "number"
          },
          "enum": {
            "type": "array",
            "items": {
              "type": [
                "integer",
                "string"
              ]
            }
          },
          "options": {
            "type": "array",
            "items": {
              "$ref": "#/components/schemas/Option"
            }
          }
        }
      },
      "Product": {
        "type": "object",
        "required": [
          "product_code",
          "fields",
          "quote_url",
          "product_pages",
          "validation"
        ],
        "properties": {
          "product_code": {
            "$ref": "#/components/schemas/ProductCode"
          },
          "fields": {
            "type": "object",
            "additionalProperties": {
              "$ref": "#/components/schemas/FieldDefinition"
            }
          },
          "quote_url": {
            "type": "string"
          },
          "product_pages": {
            "type": "object",
            "additionalProperties": {
              "type": "string"
            }
          },
          "validation": {
            "type": "string"
          }
        }
      },
      "Catalog": {
        "type": "object",
        "required": [
          "api_version",
          "documentation_url",
          "products"
        ],
        "properties": {
          "api_version": {
            "type": "string",
            "const": "1"
          },
          "documentation_url": {
            "type": "string"
          },
          "products": {
            "type": "array",
            "items": {
              "type": "object",
              "required": [
                "product_code",
                "product_pages",
                "fields_url"
              ],
              "properties": {
                "product_code": {
                  "$ref": "#/components/schemas/ProductCode"
                },
                "product_pages": {
                  "type": "object",
                  "additionalProperties": {
                    "type": "string"
                  }
                },
                "fields_url": {
                  "type": "string"
                }
              }
            }
          }
        }
      },
      "Error": {
        "type": "object",
        "required": [
          "error"
        ],
        "properties": {
          "error": {
            "type": "string",
            "enum": [
              "unknown_product",
              "method_not_allowed",
              "invalid_selection",
              "pricing_unavailable"
            ]
          },
          "message": {
            "type": "string"
          },
          "products_url": {
            "type": "string"
          }
        }
      },
      "Selections_business_card": {
        "type": "object",
        "additionalProperties": false,
        "required": [
          "mennyiseg",
          "nyomtatas",
          "meret",
          "karton",
          "feluletnemesites",
          "sarokkerekites",
          "gyartasi_ido",
          "anyagleadas"
        ],
        "properties": {
          "mennyiseg": {
            "oneOf": [
              {
                "type": "integer",
                "minimum": 1,
                "maximum": 999999999
              },
              {
                "type": "string",
                "pattern": "^[1-9][0-9]{0,8}$"
              }
            ],
            "description": "Product-specific mennyiseg. Use the live product field description; do not invent or translate option codes."
          },
          "nyomtatas": {
            "oneOf": [
              {
                "type": "string",
                "maxLength": 100
              },
              {
                "type": "integer"
              }
            ],
            "description": "Product-specific nyomtatas. Use the live product field description; do not invent or translate option codes."
          },
          "meret": {
            "oneOf": [
              {
                "type": "string",
                "maxLength": 100
              },
              {
                "type": "integer"
              }
            ],
            "description": "Product-specific meret. Use the live product field description; do not invent or translate option codes."
          },
          "karton": {
            "oneOf": [
              {
                "type": "string",
                "maxLength": 100
              },
              {
                "type": "integer"
              }
            ],
            "description": "Product-specific karton. Use the live product field description; do not invent or translate option codes."
          },
          "feluletnemesites": {
            "oneOf": [
              {
                "type": "string",
                "maxLength": 100
              },
              {
                "type": "integer"
              }
            ],
            "description": "Product-specific feluletnemesites. Use the live product field description; do not invent or translate option codes."
          },
          "sarokkerekites": {
            "oneOf": [
              {
                "type": "string",
                "maxLength": 100
              },
              {
                "type": "integer"
              }
            ],
            "description": "Product-specific sarokkerekites. Use the live product field description; do not invent or translate option codes."
          },
          "gyartasi_ido": {
            "oneOf": [
              {
                "type": "string",
                "maxLength": 100
              },
              {
                "type": "integer"
              }
            ],
            "description": "Exact production-time code. Empty string selects the actual normal production time for this configuration. Duration starts when the job is ready for production, not at order submission."
          },
          "anyagleadas": {
            "oneOf": [
              {
                "type": "string",
                "maxLength": 100
              },
              {
                "type": "integer"
              }
            ],
            "description": "Artwork preparation price category, not a file upload. Read the product-specific codes."
          }
        },
        "description": "Live option codes: https://www.serverline.hu/api/v1/products.php?product_code=business_card. Readable HTML: https://www.serverline.hu/api/calculator.php?product_code=business_card. Options are conditional; the calculator validates combinations.",
        "x-options-url": "https://www.serverline.hu/api/v1/products.php?product_code=business_card"
      },
      "Request_business_card": {
        "type": "object",
        "additionalProperties": false,
        "required": [
          "product_code",
          "selections"
        ],
        "properties": {
          "product_code": {
            "type": "string",
            "const": "business_card"
          },
          "selections": {
            "$ref": "#/components/schemas/Selections_business_card"
          }
        }
      },
      "Selections_rollup": {
        "type": "object",
        "additionalProperties": false,
        "required": [
          "mennyiseg",
          "meret",
          "gyartasi_ido",
          "anyagleadas"
        ],
        "properties": {
          "mennyiseg": {
            "oneOf": [
              {
                "type": "integer",
                "minimum": 1,
                "maximum": 999999999
              },
              {
                "type": "string",
                "pattern": "^[1-9][0-9]{0,8}$"
              }
            ],
            "description": "Product-specific mennyiseg. Use the live product field description; do not invent or translate option codes."
          },
          "meret": {
            "oneOf": [
              {
                "type": "string",
                "maxLength": 100
              },
              {
                "type": "integer"
              }
            ],
            "description": "Product-specific meret. Use the live product field description; do not invent or translate option codes."
          },
          "gyartasi_ido": {
            "oneOf": [
              {
                "type": "string",
                "maxLength": 100
              },
              {
                "type": "integer"
              }
            ],
            "description": "Exact production-time code. Empty string selects the actual normal production time for this configuration. Duration starts when the job is ready for production, not at order submission."
          },
          "anyagleadas": {
            "oneOf": [
              {
                "type": "string",
                "maxLength": 100
              },
              {
                "type": "integer"
              }
            ],
            "description": "Artwork preparation price category, not a file upload. Read the product-specific codes."
          }
        },
        "description": "Live option codes: https://www.serverline.hu/api/v1/products.php?product_code=rollup. Readable HTML: https://www.serverline.hu/api/calculator.php?product_code=rollup. Options are conditional; the calculator validates combinations.",
        "x-options-url": "https://www.serverline.hu/api/v1/products.php?product_code=rollup"
      },
      "Request_rollup": {
        "type": "object",
        "additionalProperties": false,
        "required": [
          "product_code",
          "selections"
        ],
        "properties": {
          "product_code": {
            "type": "string",
            "const": "rollup"
          },
          "selections": {
            "$ref": "#/components/schemas/Selections_rollup"
          }
        }
      },
      "Selections_molino": {
        "type": "object",
        "additionalProperties": false,
        "required": [
          "mennyiseg",
          "szelesseg_cm",
          "magassag_cm",
          "gyartasi_ido",
          "anyagleadas"
        ],
        "properties": {
          "mennyiseg": {
            "oneOf": [
              {
                "type": "integer",
                "minimum": 1,
                "maximum": 999999999
              },
              {
                "type": "string",
                "pattern": "^[1-9][0-9]{0,8}$"
              }
            ],
            "description": "Product-specific mennyiseg. Use the live product field description; do not invent or translate option codes."
          },
          "szelesseg_cm": {
            "oneOf": [
              {
                "type": "integer",
                "minimum": 1,
                "maximum": 999999999
              },
              {
                "type": "string",
                "pattern": "^[1-9][0-9]{0,8}$"
              }
            ],
            "description": "Product-specific szelesseg_cm. Use the live product field description; do not invent or translate option codes."
          },
          "magassag_cm": {
            "oneOf": [
              {
                "type": "integer",
                "minimum": 1,
                "maximum": 999999999
              },
              {
                "type": "string",
                "pattern": "^[1-9][0-9]{0,8}$"
              }
            ],
            "description": "Product-specific magassag_cm. Use the live product field description; do not invent or translate option codes."
          },
          "gyartasi_ido": {
            "oneOf": [
              {
                "type": "string",
                "maxLength": 100
              },
              {
                "type": "integer"
              }
            ],
            "description": "Exact production-time code. Empty string selects the actual normal production time for this configuration. Duration starts when the job is ready for production, not at order submission."
          },
          "anyagleadas": {
            "oneOf": [
              {
                "type": "string",
                "maxLength": 100
              },
              {
                "type": "integer"
              }
            ],
            "description": "Artwork preparation price category, not a file upload. Read the product-specific codes."
          }
        },
        "description": "Live option codes: https://www.serverline.hu/api/v1/products.php?product_code=molino. Readable HTML: https://www.serverline.hu/api/calculator.php?product_code=molino. Options are conditional; the calculator validates combinations.",
        "x-options-url": "https://www.serverline.hu/api/v1/products.php?product_code=molino"
      },
      "Request_molino": {
        "type": "object",
        "additionalProperties": false,
        "required": [
          "product_code",
          "selections"
        ],
        "properties": {
          "product_code": {
            "type": "string",
            "const": "molino"
          },
          "selections": {
            "$ref": "#/components/schemas/Selections_molino"
          }
        }
      },
      "Selections_sticker": {
        "type": "object",
        "additionalProperties": false,
        "required": [
          "mennyiseg",
          "szelesseg_mm",
          "hosszusag_mm",
          "alapanyag",
          "kivitel",
          "gyartasi_ido",
          "anyagleadas"
        ],
        "properties": {
          "mennyiseg": {
            "oneOf": [
              {
                "type": "integer",
                "minimum": 1,
                "maximum": 999999999
              },
              {
                "type": "string",
                "pattern": "^[1-9][0-9]{0,8}$"
              }
            ],
            "description": "Product-specific mennyiseg. Use the live product field description; do not invent or translate option codes."
          },
          "szelesseg_mm": {
            "oneOf": [
              {
                "type": "integer",
                "minimum": 1,
                "maximum": 999999999
              },
              {
                "type": "string",
                "pattern": "^[1-9][0-9]{0,8}$"
              }
            ],
            "description": "Product-specific szelesseg_mm. Use the live product field description; do not invent or translate option codes."
          },
          "hosszusag_mm": {
            "oneOf": [
              {
                "type": "integer",
                "minimum": 1,
                "maximum": 999999999
              },
              {
                "type": "string",
                "pattern": "^[1-9][0-9]{0,8}$"
              }
            ],
            "description": "Product-specific hosszusag_mm. Use the live product field description; do not invent or translate option codes."
          },
          "alapanyag": {
            "oneOf": [
              {
                "type": "string",
                "maxLength": 100
              },
              {
                "type": "integer"
              }
            ],
            "description": "Product-specific alapanyag. Use the live product field description; do not invent or translate option codes."
          },
          "kivitel": {
            "oneOf": [
              {
                "type": "string",
                "maxLength": 100
              },
              {
                "type": "integer"
              }
            ],
            "description": "Product-specific kivitel. Use the live product field description; do not invent or translate option codes."
          },
          "gyartasi_ido": {
            "oneOf": [
              {
                "type": "string",
                "maxLength": 100
              },
              {
                "type": "integer"
              }
            ],
            "description": "Exact production-time code. Empty string selects the actual normal production time for this configuration. Duration starts when the job is ready for production, not at order submission."
          },
          "anyagleadas": {
            "oneOf": [
              {
                "type": "string",
                "maxLength": 100
              },
              {
                "type": "integer"
              }
            ],
            "description": "Artwork preparation price category, not a file upload. Read the product-specific codes."
          }
        },
        "description": "Live option codes: https://www.serverline.hu/api/v1/products.php?product_code=sticker. Readable HTML: https://www.serverline.hu/api/calculator.php?product_code=sticker. Options are conditional; the calculator validates combinations.",
        "x-options-url": "https://www.serverline.hu/api/v1/products.php?product_code=sticker"
      },
      "Request_sticker": {
        "type": "object",
        "additionalProperties": false,
        "required": [
          "product_code",
          "selections"
        ],
        "properties": {
          "product_code": {
            "type": "string",
            "const": "sticker"
          },
          "selections": {
            "$ref": "#/components/schemas/Selections_sticker"
          }
        }
      },
      "Selections_display": {
        "type": "object",
        "additionalProperties": false,
        "required": [
          "mennyiseg",
          "szelesseg_cm",
          "magassag_cm",
          "papir",
          "gyartasi_ido",
          "anyagleadas"
        ],
        "properties": {
          "mennyiseg": {
            "oneOf": [
              {
                "type": "integer",
                "minimum": 1,
                "maximum": 999999999
              },
              {
                "type": "string",
                "pattern": "^[1-9][0-9]{0,8}$"
              }
            ],
            "description": "Product-specific mennyiseg. Use the live product field description; do not invent or translate option codes."
          },
          "szelesseg_cm": {
            "oneOf": [
              {
                "type": "integer",
                "minimum": 1,
                "maximum": 999999999
              },
              {
                "type": "string",
                "pattern": "^[1-9][0-9]{0,8}$"
              }
            ],
            "description": "Product-specific szelesseg_cm. Use the live product field description; do not invent or translate option codes."
          },
          "magassag_cm": {
            "oneOf": [
              {
                "type": "integer",
                "minimum": 1,
                "maximum": 999999999
              },
              {
                "type": "string",
                "pattern": "^[1-9][0-9]{0,8}$"
              }
            ],
            "description": "Product-specific magassag_cm. Use the live product field description; do not invent or translate option codes."
          },
          "papir": {
            "oneOf": [
              {
                "type": "string",
                "maxLength": 100
              },
              {
                "type": "integer"
              }
            ],
            "description": "Product-specific papir. Use the live product field description; do not invent or translate option codes."
          },
          "gyartasi_ido": {
            "oneOf": [
              {
                "type": "string",
                "maxLength": 100
              },
              {
                "type": "integer"
              }
            ],
            "description": "Exact production-time code. Empty string selects the actual normal production time for this configuration. Duration starts when the job is ready for production, not at order submission."
          },
          "anyagleadas": {
            "oneOf": [
              {
                "type": "string",
                "maxLength": 100
              },
              {
                "type": "integer"
              }
            ],
            "description": "Artwork preparation price category, not a file upload. Read the product-specific codes."
          }
        },
        "description": "Live option codes: https://www.serverline.hu/api/v1/products.php?product_code=display. Readable HTML: https://www.serverline.hu/api/calculator.php?product_code=display. Options are conditional; the calculator validates combinations.",
        "x-options-url": "https://www.serverline.hu/api/v1/products.php?product_code=display"
      },
      "Request_display": {
        "type": "object",
        "additionalProperties": false,
        "required": [
          "product_code",
          "selections"
        ],
        "properties": {
          "product_code": {
            "type": "string",
            "const": "display"
          },
          "selections": {
            "$ref": "#/components/schemas/Selections_display"
          }
        }
      },
      "Selections_folder": {
        "type": "object",
        "additionalProperties": false,
        "required": [
          "mennyiseg",
          "meret",
          "nyomtatas",
          "feluletnemesites",
          "kivitel",
          "gyartasi_ido",
          "anyagleadas"
        ],
        "properties": {
          "mennyiseg": {
            "oneOf": [
              {
                "type": "integer",
                "minimum": 1,
                "maximum": 999999999
              },
              {
                "type": "string",
                "pattern": "^[1-9][0-9]{0,8}$"
              }
            ],
            "description": "Product-specific mennyiseg. Use the live product field description; do not invent or translate option codes."
          },
          "meret": {
            "oneOf": [
              {
                "type": "string",
                "maxLength": 100
              },
              {
                "type": "integer"
              }
            ],
            "description": "Product-specific meret. Use the live product field description; do not invent or translate option codes."
          },
          "nyomtatas": {
            "oneOf": [
              {
                "type": "string",
                "maxLength": 100
              },
              {
                "type": "integer"
              }
            ],
            "description": "Product-specific nyomtatas. Use the live product field description; do not invent or translate option codes."
          },
          "feluletnemesites": {
            "oneOf": [
              {
                "type": "string",
                "maxLength": 100
              },
              {
                "type": "integer"
              }
            ],
            "description": "Product-specific feluletnemesites. Use the live product field description; do not invent or translate option codes."
          },
          "kivitel": {
            "oneOf": [
              {
                "type": "string",
                "maxLength": 100
              },
              {
                "type": "integer"
              }
            ],
            "description": "Product-specific kivitel. Use the live product field description; do not invent or translate option codes."
          },
          "gyartasi_ido": {
            "oneOf": [
              {
                "type": "string",
                "maxLength": 100
              },
              {
                "type": "integer"
              }
            ],
            "description": "Exact production-time code. Empty string selects the actual normal production time for this configuration. Duration starts when the job is ready for production, not at order submission."
          },
          "anyagleadas": {
            "oneOf": [
              {
                "type": "string",
                "maxLength": 100
              },
              {
                "type": "integer"
              }
            ],
            "description": "Artwork preparation price category, not a file upload. Read the product-specific codes."
          }
        },
        "description": "Live option codes: https://www.serverline.hu/api/v1/products.php?product_code=folder. Readable HTML: https://www.serverline.hu/api/calculator.php?product_code=folder. Options are conditional; the calculator validates combinations.",
        "x-options-url": "https://www.serverline.hu/api/v1/products.php?product_code=folder"
      },
      "Request_folder": {
        "type": "object",
        "additionalProperties": false,
        "required": [
          "product_code",
          "selections"
        ],
        "properties": {
          "product_code": {
            "type": "string",
            "const": "folder"
          },
          "selections": {
            "$ref": "#/components/schemas/Selections_folder"
          }
        }
      },
      "Selections_brochure": {
        "type": "object",
        "additionalProperties": false,
        "required": [
          "mennyiseg",
          "meret",
          "terjedelem",
          "beliv",
          "borito",
          "feluletnemesites",
          "gyartasi_ido",
          "anyagleadas"
        ],
        "properties": {
          "mennyiseg": {
            "oneOf": [
              {
                "type": "integer",
                "minimum": 1,
                "maximum": 999999999
              },
              {
                "type": "string",
                "pattern": "^[1-9][0-9]{0,8}$"
              }
            ],
            "description": "Product-specific mennyiseg. Use the live product field description; do not invent or translate option codes."
          },
          "meret": {
            "oneOf": [
              {
                "type": "string",
                "maxLength": 100
              },
              {
                "type": "integer"
              }
            ],
            "description": "Product-specific meret. Use the live product field description; do not invent or translate option codes."
          },
          "terjedelem": {
            "oneOf": [
              {
                "type": "string",
                "maxLength": 100
              },
              {
                "type": "integer"
              }
            ],
            "description": "Product-specific extent. For brochures, 4+4 means 4 inner plus 4 cover pages (8 total); 8+4 means 12 total. Clarify whether the customer includes the cover and select its paper separately. Encode + as %2B in URLs."
          },
          "beliv": {
            "oneOf": [
              {
                "type": "string",
                "maxLength": 100
              },
              {
                "type": "integer"
              }
            ],
            "description": "Product-specific beliv. Use the live product field description; do not invent or translate option codes."
          },
          "borito": {
            "oneOf": [
              {
                "type": "string",
                "maxLength": 100
              },
              {
                "type": "integer"
              }
            ],
            "description": "Product-specific borito. Use the live product field description; do not invent or translate option codes."
          },
          "feluletnemesites": {
            "oneOf": [
              {
                "type": "string",
                "maxLength": 100
              },
              {
                "type": "integer"
              }
            ],
            "description": "Product-specific feluletnemesites. Use the live product field description; do not invent or translate option codes."
          },
          "gyartasi_ido": {
            "oneOf": [
              {
                "type": "string",
                "maxLength": 100
              },
              {
                "type": "integer"
              }
            ],
            "description": "Exact production-time code. Empty string selects the actual normal production time for this configuration. Duration starts when the job is ready for production, not at order submission."
          },
          "anyagleadas": {
            "oneOf": [
              {
                "type": "string",
                "maxLength": 100
              },
              {
                "type": "integer"
              }
            ],
            "description": "Artwork preparation price category, not a file upload. Read the product-specific codes."
          }
        },
        "description": "Live option codes: https://www.serverline.hu/api/v1/products.php?product_code=brochure. Readable HTML: https://www.serverline.hu/api/calculator.php?product_code=brochure. Options are conditional; the calculator validates combinations.",
        "x-options-url": "https://www.serverline.hu/api/v1/products.php?product_code=brochure"
      },
      "Request_brochure": {
        "type": "object",
        "additionalProperties": false,
        "required": [
          "product_code",
          "selections"
        ],
        "properties": {
          "product_code": {
            "type": "string",
            "const": "brochure"
          },
          "selections": {
            "$ref": "#/components/schemas/Selections_brochure"
          }
        }
      },
      "Selections_flyer": {
        "type": "object",
        "additionalProperties": false,
        "required": [
          "mennyiseg",
          "meret",
          "nyomtatas",
          "karton",
          "gyartasi_ido",
          "anyagleadas"
        ],
        "properties": {
          "mennyiseg": {
            "oneOf": [
              {
                "type": "integer",
                "minimum": 1,
                "maximum": 999999999
              },
              {
                "type": "string",
                "pattern": "^[1-9][0-9]{0,8}$"
              }
            ],
            "description": "Product-specific mennyiseg. Use the live product field description; do not invent or translate option codes."
          },
          "meret": {
            "oneOf": [
              {
                "type": "string",
                "maxLength": 100
              },
              {
                "type": "integer"
              }
            ],
            "description": "Product-specific meret. Use the live product field description; do not invent or translate option codes."
          },
          "nyomtatas": {
            "oneOf": [
              {
                "type": "string",
                "maxLength": 100
              },
              {
                "type": "integer"
              }
            ],
            "description": "Product-specific nyomtatas. Use the live product field description; do not invent or translate option codes."
          },
          "karton": {
            "oneOf": [
              {
                "type": "string",
                "maxLength": 100
              },
              {
                "type": "integer"
              }
            ],
            "description": "Product-specific karton. Use the live product field description; do not invent or translate option codes."
          },
          "gyartasi_ido": {
            "oneOf": [
              {
                "type": "string",
                "maxLength": 100
              },
              {
                "type": "integer"
              }
            ],
            "description": "Exact production-time code. Empty string selects the actual normal production time for this configuration. Duration starts when the job is ready for production, not at order submission."
          },
          "anyagleadas": {
            "oneOf": [
              {
                "type": "string",
                "maxLength": 100
              },
              {
                "type": "integer"
              }
            ],
            "description": "Artwork preparation price category, not a file upload. Read the product-specific codes."
          }
        },
        "description": "Live option codes: https://www.serverline.hu/api/v1/products.php?product_code=flyer. Readable HTML: https://www.serverline.hu/api/calculator.php?product_code=flyer. Options are conditional; the calculator validates combinations.",
        "x-options-url": "https://www.serverline.hu/api/v1/products.php?product_code=flyer"
      },
      "Request_flyer": {
        "type": "object",
        "additionalProperties": false,
        "required": [
          "product_code",
          "selections"
        ],
        "properties": {
          "product_code": {
            "type": "string",
            "const": "flyer"
          },
          "selections": {
            "$ref": "#/components/schemas/Selections_flyer"
          }
        }
      },
      "Selections_menu": {
        "type": "object",
        "additionalProperties": false,
        "required": [
          "mennyiseg",
          "kivitel",
          "oldalszam",
          "meret",
          "papir",
          "feluletnemesites",
          "gyartasi_ido",
          "anyagleadas"
        ],
        "properties": {
          "mennyiseg": {
            "oneOf": [
              {
                "type": "integer",
                "minimum": 1,
                "maximum": 999999999
              },
              {
                "type": "string",
                "pattern": "^[1-9][0-9]{0,8}$"
              }
            ],
            "description": "Product-specific mennyiseg. Use the live product field description; do not invent or translate option codes."
          },
          "kivitel": {
            "oneOf": [
              {
                "type": "string",
                "maxLength": 100
              },
              {
                "type": "integer"
              }
            ],
            "description": "Product-specific kivitel. Use the live product field description; do not invent or translate option codes."
          },
          "oldalszam": {
            "oneOf": [
              {
                "type": "integer",
                "minimum": 1,
                "maximum": 999999999
              },
              {
                "type": "string",
                "pattern": "^[1-9][0-9]{0,8}$"
              }
            ],
            "description": "Product-specific oldalszam. Use the live product field description; do not invent or translate option codes."
          },
          "meret": {
            "oneOf": [
              {
                "type": "string",
                "maxLength": 100
              },
              {
                "type": "integer"
              }
            ],
            "description": "Product-specific meret. Use the live product field description; do not invent or translate option codes."
          },
          "papir": {
            "oneOf": [
              {
                "type": "string",
                "maxLength": 100
              },
              {
                "type": "integer"
              }
            ],
            "description": "Product-specific papir. Use the live product field description; do not invent or translate option codes."
          },
          "feluletnemesites": {
            "oneOf": [
              {
                "type": "string",
                "maxLength": 100
              },
              {
                "type": "integer"
              }
            ],
            "description": "Product-specific feluletnemesites. Use the live product field description; do not invent or translate option codes."
          },
          "gyartasi_ido": {
            "oneOf": [
              {
                "type": "string",
                "maxLength": 100
              },
              {
                "type": "integer"
              }
            ],
            "description": "Exact production-time code. Empty string selects the actual normal production time for this configuration. Duration starts when the job is ready for production, not at order submission."
          },
          "anyagleadas": {
            "oneOf": [
              {
                "type": "string",
                "maxLength": 100
              },
              {
                "type": "integer"
              }
            ],
            "description": "Artwork preparation price category, not a file upload. Read the product-specific codes."
          }
        },
        "description": "Live option codes: https://www.serverline.hu/api/v1/products.php?product_code=menu. Readable HTML: https://www.serverline.hu/api/calculator.php?product_code=menu. Options are conditional; the calculator validates combinations.",
        "x-options-url": "https://www.serverline.hu/api/v1/products.php?product_code=menu"
      },
      "Request_menu": {
        "type": "object",
        "additionalProperties": false,
        "required": [
          "product_code",
          "selections"
        ],
        "properties": {
          "product_code": {
            "type": "string",
            "const": "menu"
          },
          "selections": {
            "$ref": "#/components/schemas/Selections_menu"
          }
        }
      },
      "Selections_notepad": {
        "type": "object",
        "additionalProperties": false,
        "required": [
          "mennyiseg",
          "kivitel",
          "meret",
          "terjedelem",
          "gyartasi_ido",
          "anyagleadas"
        ],
        "properties": {
          "mennyiseg": {
            "oneOf": [
              {
                "type": "integer",
                "minimum": 1,
                "maximum": 999999999
              },
              {
                "type": "string",
                "pattern": "^[1-9][0-9]{0,8}$"
              }
            ],
            "description": "Product-specific mennyiseg. Use the live product field description; do not invent or translate option codes."
          },
          "kivitel": {
            "oneOf": [
              {
                "type": "string",
                "maxLength": 100
              },
              {
                "type": "integer"
              }
            ],
            "description": "Product-specific kivitel. Use the live product field description; do not invent or translate option codes."
          },
          "meret": {
            "oneOf": [
              {
                "type": "string",
                "maxLength": 100
              },
              {
                "type": "integer"
              }
            ],
            "description": "Product-specific meret. Use the live product field description; do not invent or translate option codes."
          },
          "terjedelem": {
            "oneOf": [
              {
                "type": "integer",
                "minimum": 1,
                "maximum": 999999999
              },
              {
                "type": "string",
                "pattern": "^[1-9][0-9]{0,8}$"
              }
            ],
            "description": "Product-specific extent. For brochures, 4+4 means 4 inner plus 4 cover pages (8 total); 8+4 means 12 total. Clarify whether the customer includes the cover and select its paper separately. Encode + as %2B in URLs."
          },
          "gyartasi_ido": {
            "oneOf": [
              {
                "type": "string",
                "maxLength": 100
              },
              {
                "type": "integer"
              }
            ],
            "description": "Exact production-time code. Empty string selects the actual normal production time for this configuration. Duration starts when the job is ready for production, not at order submission."
          },
          "anyagleadas": {
            "oneOf": [
              {
                "type": "string",
                "maxLength": 100
              },
              {
                "type": "integer"
              }
            ],
            "description": "Artwork preparation price category, not a file upload. Read the product-specific codes."
          }
        },
        "description": "Live option codes: https://www.serverline.hu/api/v1/products.php?product_code=notepad. Readable HTML: https://www.serverline.hu/api/calculator.php?product_code=notepad. Options are conditional; the calculator validates combinations.",
        "x-options-url": "https://www.serverline.hu/api/v1/products.php?product_code=notepad"
      },
      "Request_notepad": {
        "type": "object",
        "additionalProperties": false,
        "required": [
          "product_code",
          "selections"
        ],
        "properties": {
          "product_code": {
            "type": "string",
            "const": "notepad"
          },
          "selections": {
            "$ref": "#/components/schemas/Selections_notepad"
          }
        }
      },
      "Selections_freight_calendar": {
        "type": "object",
        "additionalProperties": false,
        "required": [
          "mennyiseg",
          "kivitel",
          "gyartasi_ido",
          "anyagleadas"
        ],
        "properties": {
          "mennyiseg": {
            "oneOf": [
              {
                "type": "integer",
                "minimum": 1,
                "maximum": 999999999
              },
              {
                "type": "string",
                "pattern": "^[1-9][0-9]{0,8}$"
              }
            ],
            "description": "Product-specific mennyiseg. Use the live product field description; do not invent or translate option codes."
          },
          "kivitel": {
            "oneOf": [
              {
                "type": "string",
                "maxLength": 100
              },
              {
                "type": "integer"
              }
            ],
            "description": "Product-specific kivitel. Use the live product field description; do not invent or translate option codes."
          },
          "gyartasi_ido": {
            "oneOf": [
              {
                "type": "string",
                "maxLength": 100
              },
              {
                "type": "integer"
              }
            ],
            "description": "Exact production-time code. Empty string selects the actual normal production time for this configuration. Duration starts when the job is ready for production, not at order submission."
          },
          "anyagleadas": {
            "oneOf": [
              {
                "type": "string",
                "maxLength": 100
              },
              {
                "type": "integer"
              }
            ],
            "description": "Artwork preparation price category, not a file upload. Read the product-specific codes."
          }
        },
        "description": "Live option codes: https://www.serverline.hu/api/v1/products.php?product_code=freight_calendar. Readable HTML: https://www.serverline.hu/api/calculator.php?product_code=freight_calendar. Options are conditional; the calculator validates combinations.",
        "x-options-url": "https://www.serverline.hu/api/v1/products.php?product_code=freight_calendar"
      },
      "Request_freight_calendar": {
        "type": "object",
        "additionalProperties": false,
        "required": [
          "product_code",
          "selections"
        ],
        "properties": {
          "product_code": {
            "type": "string",
            "const": "freight_calendar"
          },
          "selections": {
            "$ref": "#/components/schemas/Selections_freight_calendar"
          }
        }
      },
      "Selections_desk_pad_calendar": {
        "type": "object",
        "additionalProperties": false,
        "required": [
          "mennyiseg",
          "meret",
          "kivitel",
          "gyartasi_ido",
          "anyagleadas"
        ],
        "properties": {
          "mennyiseg": {
            "oneOf": [
              {
                "type": "integer",
                "minimum": 1,
                "maximum": 999999999
              },
              {
                "type": "string",
                "pattern": "^[1-9][0-9]{0,8}$"
              }
            ],
            "description": "Product-specific mennyiseg. Use the live product field description; do not invent or translate option codes."
          },
          "meret": {
            "oneOf": [
              {
                "type": "string",
                "maxLength": 100
              },
              {
                "type": "integer"
              }
            ],
            "description": "Product-specific meret. Use the live product field description; do not invent or translate option codes."
          },
          "kivitel": {
            "oneOf": [
              {
                "type": "string",
                "maxLength": 100
              },
              {
                "type": "integer"
              }
            ],
            "description": "Product-specific kivitel. Use the live product field description; do not invent or translate option codes."
          },
          "gyartasi_ido": {
            "oneOf": [
              {
                "type": "string",
                "maxLength": 100
              },
              {
                "type": "integer"
              }
            ],
            "description": "Exact production-time code. Empty string selects the actual normal production time for this configuration. Duration starts when the job is ready for production, not at order submission."
          },
          "anyagleadas": {
            "oneOf": [
              {
                "type": "string",
                "maxLength": 100
              },
              {
                "type": "integer"
              }
            ],
            "description": "Artwork preparation price category, not a file upload. Read the product-specific codes."
          }
        },
        "description": "Live option codes: https://www.serverline.hu/api/v1/products.php?product_code=desk_pad_calendar. Readable HTML: https://www.serverline.hu/api/calculator.php?product_code=desk_pad_calendar. Options are conditional; the calculator validates combinations.",
        "x-options-url": "https://www.serverline.hu/api/v1/products.php?product_code=desk_pad_calendar"
      },
      "Request_desk_pad_calendar": {
        "type": "object",
        "additionalProperties": false,
        "required": [
          "product_code",
          "selections"
        ],
        "properties": {
          "product_code": {
            "type": "string",
            "const": "desk_pad_calendar"
          },
          "selections": {
            "$ref": "#/components/schemas/Selections_desk_pad_calendar"
          }
        }
      },
      "Selections_wall_calendar": {
        "type": "object",
        "additionalProperties": false,
        "required": [
          "mennyiseg",
          "meret",
          "gyartasi_ido",
          "anyagleadas"
        ],
        "properties": {
          "mennyiseg": {
            "oneOf": [
              {
                "type": "integer",
                "minimum": 1,
                "maximum": 999999999
              },
              {
                "type": "string",
                "pattern": "^[1-9][0-9]{0,8}$"
              }
            ],
            "description": "Product-specific mennyiseg. Use the live product field description; do not invent or translate option codes."
          },
          "meret": {
            "oneOf": [
              {
                "type": "string",
                "maxLength": 100
              },
              {
                "type": "integer"
              }
            ],
            "description": "Product-specific meret. Use the live product field description; do not invent or translate option codes."
          },
          "gyartasi_ido": {
            "oneOf": [
              {
                "type": "string",
                "maxLength": 100
              },
              {
                "type": "integer"
              }
            ],
            "description": "Exact production-time code. Empty string selects the actual normal production time for this configuration. Duration starts when the job is ready for production, not at order submission."
          },
          "anyagleadas": {
            "oneOf": [
              {
                "type": "string",
                "maxLength": 100
              },
              {
                "type": "integer"
              }
            ],
            "description": "Artwork preparation price category, not a file upload. Read the product-specific codes."
          }
        },
        "description": "Live option codes: https://www.serverline.hu/api/v1/products.php?product_code=wall_calendar. Readable HTML: https://www.serverline.hu/api/calculator.php?product_code=wall_calendar. Options are conditional; the calculator validates combinations.",
        "x-options-url": "https://www.serverline.hu/api/v1/products.php?product_code=wall_calendar"
      },
      "Request_wall_calendar": {
        "type": "object",
        "additionalProperties": false,
        "required": [
          "product_code",
          "selections"
        ],
        "properties": {
          "product_code": {
            "type": "string",
            "const": "wall_calendar"
          },
          "selections": {
            "$ref": "#/components/schemas/Selections_wall_calendar"
          }
        }
      },
      "Selections_desk_calendar": {
        "type": "object",
        "additionalProperties": false,
        "required": [
          "mennyiseg",
          "kivitel",
          "gyartasi_ido",
          "anyagleadas"
        ],
        "properties": {
          "mennyiseg": {
            "oneOf": [
              {
                "type": "integer",
                "minimum": 1,
                "maximum": 999999999
              },
              {
                "type": "string",
                "pattern": "^[1-9][0-9]{0,8}$"
              }
            ],
            "description": "Product-specific mennyiseg. Use the live product field description; do not invent or translate option codes."
          },
          "kivitel": {
            "oneOf": [
              {
                "type": "string",
                "maxLength": 100
              },
              {
                "type": "integer"
              }
            ],
            "description": "Product-specific kivitel. Use the live product field description; do not invent or translate option codes."
          },
          "gyartasi_ido": {
            "oneOf": [
              {
                "type": "string",
                "maxLength": 100
              },
              {
                "type": "integer"
              }
            ],
            "description": "Exact production-time code. Empty string selects the actual normal production time for this configuration. Duration starts when the job is ready for production, not at order submission."
          },
          "anyagleadas": {
            "oneOf": [
              {
                "type": "string",
                "maxLength": 100
              },
              {
                "type": "integer"
              }
            ],
            "description": "Artwork preparation price category, not a file upload. Read the product-specific codes."
          }
        },
        "description": "Live option codes: https://www.serverline.hu/api/v1/products.php?product_code=desk_calendar. Readable HTML: https://www.serverline.hu/api/calculator.php?product_code=desk_calendar. Options are conditional; the calculator validates combinations.",
        "x-options-url": "https://www.serverline.hu/api/v1/products.php?product_code=desk_calendar"
      },
      "Request_desk_calendar": {
        "type": "object",
        "additionalProperties": false,
        "required": [
          "product_code",
          "selections"
        ],
        "properties": {
          "product_code": {
            "type": "string",
            "const": "desk_calendar"
          },
          "selections": {
            "$ref": "#/components/schemas/Selections_desk_calendar"
          }
        }
      },
      "QuoteRequest": {
        "oneOf": [
          {
            "$ref": "#/components/schemas/Request_business_card"
          },
          {
            "$ref": "#/components/schemas/Request_rollup"
          },
          {
            "$ref": "#/components/schemas/Request_molino"
          },
          {
            "$ref": "#/components/schemas/Request_sticker"
          },
          {
            "$ref": "#/components/schemas/Request_display"
          },
          {
            "$ref": "#/components/schemas/Request_folder"
          },
          {
            "$ref": "#/components/schemas/Request_brochure"
          },
          {
            "$ref": "#/components/schemas/Request_flyer"
          },
          {
            "$ref": "#/components/schemas/Request_menu"
          },
          {
            "$ref": "#/components/schemas/Request_notepad"
          },
          {
            "$ref": "#/components/schemas/Request_freight_calendar"
          },
          {
            "$ref": "#/components/schemas/Request_desk_pad_calendar"
          },
          {
            "$ref": "#/components/schemas/Request_wall_calendar"
          },
          {
            "$ref": "#/components/schemas/Request_desk_calendar"
          }
        ],
        "discriminator": {
          "propertyName": "product_code",
          "mapping": {
            "business_card": "#/components/schemas/Request_business_card",
            "rollup": "#/components/schemas/Request_rollup",
            "molino": "#/components/schemas/Request_molino",
            "sticker": "#/components/schemas/Request_sticker",
            "display": "#/components/schemas/Request_display",
            "folder": "#/components/schemas/Request_folder",
            "brochure": "#/components/schemas/Request_brochure",
            "flyer": "#/components/schemas/Request_flyer",
            "menu": "#/components/schemas/Request_menu",
            "notepad": "#/components/schemas/Request_notepad",
            "freight_calendar": "#/components/schemas/Request_freight_calendar",
            "desk_pad_calendar": "#/components/schemas/Request_desk_pad_calendar",
            "wall_calendar": "#/components/schemas/Request_wall_calendar",
            "desk_calendar": "#/components/schemas/Request_desk_calendar"
          }
        }
      },
      "Quote": {
        "type": "object",
        "required": [
          "product_code",
          "currency",
          "customer_type",
          "quantity",
          "selections",
          "labels",
          "calculated_at",
          "price_version",
          "shipping_included",
          "discounts_applied",
          "order_created",
          "price_guaranteed",
          "ordering_api_available",
          "product_pages",
          "notice",
          "production_unit_price_net",
          "production_total_net",
          "graphic_fee_net",
          "item_total_net",
          "vat_rate",
          "vat_amount",
          "item_total_gross"
        ],
        "properties": {
          "product_code": {
            "$ref": "#/components/schemas/ProductCode"
          },
          "currency": {
            "type": "string",
            "const": "HUF"
          },
          "customer_type": {
            "type": "string",
            "const": "guest"
          },
          "quantity": {
            "type": "integer",
            "minimum": 1
          },
          "selections": {
            "type": "object",
            "additionalProperties": {
              "type": "string"
            }
          },
          "labels": {
            "type": "object",
            "additionalProperties": {
              "type": "string"
            }
          },
          "calculated_at": {
            "type": "string",
            "format": "date-time"
          },
          "price_version": {
            "type": "string",
            "pattern": "^[a-f0-9]{64}$"
          },
          "shipping_included": {
            "type": "boolean",
            "const": false
          },
          "discounts_applied": {
            "type": "boolean",
            "const": false
          },
          "order_created": {
            "type": "boolean",
            "const": false
          },
          "price_guaranteed": {
            "type": "boolean",
            "const": false
          },
          "ordering_api_available": {
            "type": "boolean",
            "const": false
          },
          "production_unit_price_net": {
            "type": "number",
            "minimum": 0
          },
          "production_total_net": {
            "type": "number",
            "minimum": 0
          },
          "graphic_fee_net": {
            "type": "number",
            "minimum": 0
          },
          "item_total_net": {
            "type": "number",
            "minimum": 0
          },
          "vat_rate": {
            "type": "number",
            "minimum": 0
          },
          "vat_amount": {
            "type": "number",
            "minimum": 0
          },
          "item_total_gross": {
            "type": "number",
            "minimum": 0
          },
          "production_time_surcharge_percent": {
            "type": "number",
            "minimum": 0
          },
          "production_time_surcharge_total_net": {
            "type": "number",
            "minimum": 0
          },
          "product_pages": {
            "type": "object",
            "additionalProperties": {
              "type": "string"
            }
          },
          "notice": {
            "type": "string"
          }
        },
        "description": "Actual configured guest item price in HUF, excluding shipping and account discounts. Production-time surcharge is already included; do not add it again. vat_rate is a percentage. Values are rounded by the official calculator; never reconstruct the result from percentages. Not a guaranteed offer or order. Verify the returned selections and labels against the requested configuration."
      }
    }
  }
}
