{
  "openapi": "3.1.0",
  "info": {
    "title": "Project Math Lab Calculation API",
    "version": "1.0.0"
  },
  "servers": [
    {
      "url": "https://projectmathlab.com"
    }
  ],
  "paths": {
    "/api/v1/gravel": {
      "get": {
        "operationId": "calculate_gravel",
        "summary": "Calculate gravel quantities and purchase estimates",
        "description": "Conditional required parameters and assumptions are documented at /calculator-links/. Only one area or bed and one supplier per request.",
        "parameters": [
          {
            "name": "mode",
            "in": "query",
            "schema": {
              "type": "string",
              "enum": [
                "dimensions",
                "volume",
                "weight"
              ],
              "default": "dimensions"
            },
            "required": false
          },
          {
            "name": "length_ft",
            "in": "query",
            "schema": {
              "type": "number",
              "minimum": 0.000001,
              "maximum": 100000
            },
            "required": false
          },
          {
            "name": "width_ft",
            "in": "query",
            "schema": {
              "type": "number",
              "minimum": 0.000001,
              "maximum": 100000
            },
            "required": false
          },
          {
            "name": "depth_in",
            "in": "query",
            "schema": {
              "type": "number",
              "minimum": 0.000001,
              "maximum": 10000
            },
            "required": false
          },
          {
            "name": "cubic_yards",
            "in": "query",
            "schema": {
              "type": "number",
              "minimum": 0,
              "maximum": 1000000
            },
            "required": false
          },
          {
            "name": "short_tons",
            "in": "query",
            "schema": {
              "type": "number",
              "minimum": 0,
              "maximum": 1000000
            },
            "required": false
          },
          {
            "name": "density_ton_per_yd3",
            "in": "query",
            "schema": {
              "type": "number",
              "minimum": 0.000001,
              "maximum": 100
            },
            "required": false
          },
          {
            "name": "extra_percent",
            "in": "query",
            "schema": {
              "type": "number",
              "minimum": 0,
              "maximum": 100,
              "default": 0
            },
            "required": false
          },
          {
            "name": "quote_unit",
            "in": "query",
            "schema": {
              "type": "string",
              "enum": [
                "yard",
                "ton"
              ],
              "default": "yard"
            },
            "required": false
          },
          {
            "name": "price_per_unit",
            "in": "query",
            "schema": {
              "type": "number",
              "minimum": 0,
              "maximum": 1000000
            },
            "required": false
          },
          {
            "name": "delivery_fee",
            "in": "query",
            "schema": {
              "type": "number",
              "minimum": 0,
              "maximum": 1000000,
              "default": 0
            },
            "required": false
          },
          {
            "name": "minimum_order",
            "in": "query",
            "schema": {
              "type": "number",
              "minimum": 0,
              "maximum": 1000000,
              "default": 0
            },
            "required": false
          },
          {
            "name": "order_increment",
            "in": "query",
            "schema": {
              "type": "number",
              "minimum": 0.000001,
              "maximum": 1000000,
              "default": 0.5
            },
            "required": false
          }
        ],
        "responses": {
          "200": {
            "description": "Inputs, explicit units, result, assumptions and calculator_url",
            "content": {
              "application/json": {
                "schema": {
                  "type": "object",
                  "required": [
                    "version",
                    "tool",
                    "inputs",
                    "units",
                    "result",
                    "assumptions",
                    "calculator_url"
                  ]
                }
              }
            }
          },
          "400": {
            "description": "Missing, unknown, repeated, inappropriate or invalid parameters"
          },
          "405": {
            "description": "GET only"
          },
          "414": {
            "description": "Query exceeds 2048 characters"
          }
        }
      }
    },
    "/api/v1/mulch": {
      "get": {
        "operationId": "calculate_mulch",
        "summary": "Calculate mulch quantities and purchase estimates",
        "description": "Conditional required parameters and assumptions are documented at /calculator-links/. Only one area or bed and one supplier per request.",
        "parameters": [
          {
            "name": "area_sq_ft",
            "in": "query",
            "schema": {
              "type": "number",
              "minimum": 0.000001,
              "maximum": 1000000
            },
            "required": true
          },
          {
            "name": "depth_in",
            "in": "query",
            "schema": {
              "type": "number",
              "minimum": 0.000001,
              "maximum": 10000
            },
            "required": true
          },
          {
            "name": "existing_depth_in",
            "in": "query",
            "schema": {
              "type": "number",
              "minimum": 0,
              "maximum": 1000000,
              "default": 0
            },
            "required": false
          },
          {
            "name": "extra_percent",
            "in": "query",
            "schema": {
              "type": "number",
              "minimum": 0,
              "maximum": 100,
              "default": 0
            },
            "required": false
          },
          {
            "name": "bag_ft3",
            "in": "query",
            "schema": {
              "type": "number",
              "minimum": 0.000001,
              "maximum": 1000000
            },
            "required": true
          },
          {
            "name": "bag_price",
            "in": "query",
            "schema": {
              "type": "number",
              "minimum": 0,
              "maximum": 1000000
            },
            "required": false
          },
          {
            "name": "price_per_yd3",
            "in": "query",
            "schema": {
              "type": "number",
              "minimum": 0,
              "maximum": 1000000
            },
            "required": false
          },
          {
            "name": "delivery_fee",
            "in": "query",
            "schema": {
              "type": "number",
              "minimum": 0,
              "maximum": 1000000,
              "default": 0
            },
            "required": false
          },
          {
            "name": "minimum_order",
            "in": "query",
            "schema": {
              "type": "number",
              "minimum": 0,
              "maximum": 1000000,
              "default": 0
            },
            "required": false
          },
          {
            "name": "order_increment",
            "in": "query",
            "schema": {
              "type": "number",
              "minimum": 0.000001,
              "maximum": 1000000,
              "default": 0.5
            },
            "required": false
          }
        ],
        "responses": {
          "200": {
            "description": "Inputs, explicit units, result, assumptions and calculator_url",
            "content": {
              "application/json": {
                "schema": {
                  "type": "object",
                  "required": [
                    "version",
                    "tool",
                    "inputs",
                    "units",
                    "result",
                    "assumptions",
                    "calculator_url"
                  ]
                }
              }
            }
          },
          "400": {
            "description": "Missing, unknown, repeated, inappropriate or invalid parameters"
          },
          "405": {
            "description": "GET only"
          },
          "414": {
            "description": "Query exceeds 2048 characters"
          }
        }
      }
    },
    "/api/v1/raised-bed-soil": {
      "get": {
        "operationId": "calculate_raised_bed_soil",
        "summary": "Calculate raised-bed-soil quantities and purchase estimates",
        "description": "Conditional required parameters and assumptions are documented at /calculator-links/. Only one area or bed and one supplier per request.",
        "parameters": [
          {
            "name": "length_ft",
            "in": "query",
            "schema": {
              "type": "number",
              "minimum": 0.000001,
              "maximum": 100000
            },
            "required": true
          },
          {
            "name": "width_ft",
            "in": "query",
            "schema": {
              "type": "number",
              "minimum": 0.000001,
              "maximum": 100000
            },
            "required": true
          },
          {
            "name": "target_depth_in",
            "in": "query",
            "schema": {
              "type": "number",
              "minimum": 0.000001,
              "maximum": 10000
            },
            "required": true
          },
          {
            "name": "current_depth_in",
            "in": "query",
            "schema": {
              "type": "number",
              "minimum": 0,
              "maximum": 1000000,
              "default": 0
            },
            "required": false
          },
          {
            "name": "extra_percent",
            "in": "query",
            "schema": {
              "type": "number",
              "minimum": 0,
              "maximum": 100,
              "default": 0
            },
            "required": false
          },
          {
            "name": "bag_ft3",
            "in": "query",
            "schema": {
              "type": "number",
              "minimum": 0.000001,
              "maximum": 1000000
            },
            "required": true
          },
          {
            "name": "bag_price",
            "in": "query",
            "schema": {
              "type": "number",
              "minimum": 0,
              "maximum": 1000000
            },
            "required": false
          },
          {
            "name": "price_per_yd3",
            "in": "query",
            "schema": {
              "type": "number",
              "minimum": 0,
              "maximum": 1000000
            },
            "required": false
          },
          {
            "name": "delivery_fee",
            "in": "query",
            "schema": {
              "type": "number",
              "minimum": 0,
              "maximum": 1000000,
              "default": 0
            },
            "required": false
          },
          {
            "name": "minimum_order",
            "in": "query",
            "schema": {
              "type": "number",
              "minimum": 0,
              "maximum": 1000000,
              "default": 0
            },
            "required": false
          },
          {
            "name": "order_increment",
            "in": "query",
            "schema": {
              "type": "number",
              "minimum": 0.000001,
              "maximum": 1000000,
              "default": 0.5
            },
            "required": false
          }
        ],
        "responses": {
          "200": {
            "description": "Inputs, explicit units, result, assumptions and calculator_url",
            "content": {
              "application/json": {
                "schema": {
                  "type": "object",
                  "required": [
                    "version",
                    "tool",
                    "inputs",
                    "units",
                    "result",
                    "assumptions",
                    "calculator_url"
                  ]
                }
              }
            }
          },
          "400": {
            "description": "Missing, unknown, repeated, inappropriate or invalid parameters"
          },
          "405": {
            "description": "GET only"
          },
          "414": {
            "description": "Query exceeds 2048 characters"
          }
        }
      }
    }
  }
}