{
 "openapi": "3.1.0",
 "info": {
  "title": "PackOS Open Calc API",
  "version": "1.0.0",
  "description": "Free, keyless packaging math: dimensional weight, NMFC freight class, pallet Ti-Hi, McKee box compression, case sizing, label sizing. Estimates for planning, not rate quotes. Docs: https://packos.ai/developers.html",
  "contact": {
   "email": "hello@packos.ai",
   "url": "https://packos.ai/developers.html"
  }
 },
 "servers": [
  {
   "url": "https://packos.ai"
  }
 ],
 "paths": {
  "/api/calc": {
   "get": {
    "operationId": "calc",
    "summary": "Compute packaging math (fn selects the function)",
    "parameters": [
     {
      "name": "fn",
      "in": "query",
      "required": true,
      "schema": {
       "type": "string",
       "enum": [
        "dim-weight",
        "freight-class",
        "ti-hi",
        "bct",
        "case-size",
        "label-size"
       ]
      },
      "description": "Which calculation to run"
     },
     {
      "name": "l",
      "in": "query",
      "schema": {
       "type": "number"
      },
      "description": "length in (dim-weight, freight-class, bct)"
     },
     {
      "name": "w",
      "in": "query",
      "schema": {
       "type": "number"
      },
      "description": "width in"
     },
     {
      "name": "h",
      "in": "query",
      "schema": {
       "type": "number"
      },
      "description": "height in"
     },
     {
      "name": "wt",
      "in": "query",
      "schema": {
       "type": "number"
      },
      "description": "actual weight lb"
     },
     {
      "name": "div",
      "in": "query",
      "schema": {
       "type": "number",
       "default": 139
      },
      "description": "DIM divisor (139/166/5000...)"
     },
     {
      "name": "cl",
      "in": "query",
      "schema": {
       "type": "number"
      },
      "description": "case length in (ti-hi) / unit clearance in (case-size)"
     },
     {
      "name": "cw",
      "in": "query",
      "schema": {
       "type": "number"
      },
      "description": "case width in (ti-hi)"
     },
     {
      "name": "ch",
      "in": "query",
      "schema": {
       "type": "number"
      },
      "description": "case height in (ti-hi)"
     },
     {
      "name": "pl",
      "in": "query",
      "schema": {
       "type": "number"
      },
      "description": "pallet length in, default 48 (ti-hi) / product length in (case-size)"
     },
     {
      "name": "pw",
      "in": "query",
      "schema": {
       "type": "number"
      },
      "description": "pallet width in, default 40 (ti-hi) / product width in (case-size)"
     },
     {
      "name": "ph",
      "in": "query",
      "schema": {
       "type": "number"
      },
      "description": "product height in (case-size)"
     },
     {
      "name": "maxh",
      "in": "query",
      "schema": {
       "type": "number",
       "default": 54
      },
      "description": "max load height in (ti-hi)"
     },
     {
      "name": "ect",
      "in": "query",
      "schema": {
       "type": "number"
      },
      "description": "board ECT (bct)"
     },
     {
      "name": "sf",
      "in": "query",
      "schema": {
       "type": "number",
       "default": 5
      },
      "description": "safety factor (bct)"
     },
     {
      "name": "cap",
      "in": "query",
      "schema": {
       "type": "number",
       "default": 0.157
      },
      "description": "board caliper in (bct, case-size)"
     },
     {
      "name": "n1",
      "in": "query",
      "schema": {
       "type": "integer"
      },
      "description": "count along length (case-size)"
     },
     {
      "name": "n2",
      "in": "query",
      "schema": {
       "type": "integer"
      },
      "description": "count along width (case-size)"
     },
     {
      "name": "n3",
      "in": "query",
      "schema": {
       "type": "integer"
      },
      "description": "layers (case-size)"
     },
     {
      "name": "dia",
      "in": "query",
      "schema": {
       "type": "number"
      },
      "description": "container diameter in (label-size)"
     },
     {
      "name": "hgt",
      "in": "query",
      "schema": {
       "type": "number"
      },
      "description": "label-area height in (label-size)"
     },
     {
      "name": "style",
      "in": "query",
      "schema": {
       "type": "string",
       "enum": [
        "wrap",
        "fb",
        "front"
       ],
       "default": "wrap"
      },
      "description": "label style (label-size)"
     },
     {
      "name": "seam",
      "in": "query",
      "schema": {
       "type": "number",
       "default": 0.125
      },
      "description": "seam overlap in (label-size)"
     },
     {
      "name": "topc",
      "in": "query",
      "schema": {
       "type": "number",
       "default": 0.25
      },
      "description": "top clearance in (label-size)"
     },
     {
      "name": "botc",
      "in": "query",
      "schema": {
       "type": "number",
       "default": 0.25
      },
      "description": "bottom clearance in (label-size)"
     }
    ],
    "responses": {
     "200": {
      "description": "Computed result",
      "content": {
       "application/json": {
        "schema": {
         "type": "object",
         "properties": {
          "ok": {
           "type": "boolean"
          },
          "fn": {
           "type": "string"
          },
          "disclaimer": {
           "type": "string"
          }
         },
         "additionalProperties": true
        }
       }
      }
     },
     "400": {
      "description": "Unknown fn or invalid parameters"
     }
    }
   }
  }
 }
}