{
  "openapi": "3.1.0",
  "info": {
    "title": "tannerd.net Free Public Calculator API",
    "version": "1.2.0",
    "description": "Free public read-only deterministic calculator API for humans, AI agents, automations, and MCP/A2A/WebMCP clients. No API key is required. Every result includes a human-facing source and share URL when applicable.",
    "termsOfService": "https://tannerd.net/terms/"
  },
  "servers": [
    {
      "url": "https://tannerd.net",
      "description": "Production"
    }
  ],
  "externalDocs": {
    "description": "Human-readable API documentation",
    "url": "https://tannerd.net/api/"
  },
  "paths": {
    "/api/v1/seller-profit": {
      "get": {
        "operationId": "seller_profit",
        "summary": "Seller profit, fees, net proceeds, ROI, margin, break-even price and target-ROI buy price.",
        "description": "Seller profit, fees, net proceeds, ROI, margin, break-even price and target-ROI buy price. Human source: https://tannerd.net/tools/resale-profit-calculator/",
        "parameters": [
          {
            "name": "sale",
            "in": "query",
            "required": true,
            "schema": {
              "type": "number"
            },
            "example": 200
          },
          {
            "name": "buy",
            "in": "query",
            "required": true,
            "schema": {
              "type": "number"
            },
            "example": 50
          },
          {
            "name": "fee_pct",
            "in": "query",
            "required": false,
            "schema": {
              "type": "number"
            },
            "example": 13
          },
          {
            "name": "fixed_fee",
            "in": "query",
            "required": false,
            "schema": {
              "type": "number"
            },
            "example": 0
          },
          {
            "name": "shipping",
            "in": "query",
            "required": false,
            "schema": {
              "type": "number"
            },
            "example": 20
          },
          {
            "name": "other_costs",
            "in": "query",
            "required": false,
            "schema": {
              "type": "number"
            },
            "example": 0
          },
          {
            "name": "target_roi_pct",
            "in": "query",
            "required": false,
            "schema": {
              "type": "number"
            },
            "example": 100
          }
        ],
        "responses": {
          "200": {
            "description": "Calculation result",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/CalculatorResponse"
                }
              }
            }
          },
          "400": {
            "description": "Invalid input",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ErrorResponse"
                }
              }
            }
          }
        }
      }
    },
    "/api/v1/ecommerce-profit": {
      "get": {
        "operationId": "ecommerce_profit",
        "summary": "Order-level ecommerce profit after COGS, shipping, fulfillment, fees and advertising.",
        "description": "Order-level ecommerce profit after COGS, shipping, fulfillment, fees and advertising. Human source: https://tannerd.net/tools/ecommerce-profit-calculator/",
        "parameters": [
          {
            "name": "price",
            "in": "query",
            "required": true,
            "schema": {
              "type": "number"
            },
            "example": 80
          },
          {
            "name": "cogs",
            "in": "query",
            "required": true,
            "schema": {
              "type": "number"
            },
            "example": 25
          },
          {
            "name": "shipping",
            "in": "query",
            "required": false,
            "schema": {
              "type": "number"
            },
            "example": 6
          },
          {
            "name": "fulfillment",
            "in": "query",
            "required": false,
            "schema": {
              "type": "number"
            },
            "example": 3
          },
          {
            "name": "fee_pct",
            "in": "query",
            "required": false,
            "schema": {
              "type": "number"
            },
            "example": 3
          },
          {
            "name": "ad_cost",
            "in": "query",
            "required": false,
            "schema": {
              "type": "number"
            },
            "example": 18
          },
          {
            "name": "orders",
            "in": "query",
            "required": false,
            "schema": {
              "type": "number"
            },
            "example": 100
          }
        ],
        "responses": {
          "200": {
            "description": "Calculation result",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/CalculatorResponse"
                }
              }
            }
          },
          "400": {
            "description": "Invalid input",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ErrorResponse"
                }
              }
            }
          }
        }
      }
    },
    "/api/v1/break-even-roas": {
      "get": {
        "operationId": "break_even_roas",
        "summary": "Break-even return on ad spend and maximum cost per acquisition.",
        "description": "Break-even return on ad spend and maximum cost per acquisition. Human source: https://tannerd.net/tools/break-even-roas-calculator/",
        "parameters": [
          {
            "name": "aov",
            "in": "query",
            "required": true,
            "schema": {
              "type": "number"
            },
            "example": 80
          },
          {
            "name": "cogs",
            "in": "query",
            "required": true,
            "schema": {
              "type": "number"
            },
            "example": 25
          },
          {
            "name": "shipping",
            "in": "query",
            "required": false,
            "schema": {
              "type": "number"
            },
            "example": 6
          },
          {
            "name": "fulfillment",
            "in": "query",
            "required": false,
            "schema": {
              "type": "number"
            },
            "example": 3
          },
          {
            "name": "fee_pct",
            "in": "query",
            "required": false,
            "schema": {
              "type": "number"
            },
            "example": 3
          }
        ],
        "responses": {
          "200": {
            "description": "Calculation result",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/CalculatorResponse"
                }
              }
            }
          },
          "400": {
            "description": "Invalid input",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ErrorResponse"
                }
              }
            }
          }
        }
      }
    },
    "/api/v1/shift-pay": {
      "get": {
        "operationId": "shift_pay",
        "summary": "Paid hours and gross pay for one normal or overnight shift after an unpaid break.",
        "description": "Paid hours and gross pay for one normal or overnight shift after an unpaid break. Human source: https://tannerd.net/tools/shift-pay-calculator/",
        "parameters": [
          {
            "name": "start",
            "in": "query",
            "required": true,
            "schema": {
              "type": "string",
              "pattern": "^([01]\\d|2[0-3]):[0-5]\\d$"
            },
            "example": "13:30"
          },
          {
            "name": "end",
            "in": "query",
            "required": true,
            "schema": {
              "type": "string",
              "pattern": "^([01]\\d|2[0-3]):[0-5]\\d$"
            },
            "example": "01:30"
          },
          {
            "name": "break_minutes",
            "in": "query",
            "required": false,
            "schema": {
              "type": "number"
            },
            "example": 30
          },
          {
            "name": "hourly_rate",
            "in": "query",
            "required": true,
            "schema": {
              "type": "number"
            },
            "example": 20
          }
        ],
        "responses": {
          "200": {
            "description": "Calculation result",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/CalculatorResponse"
                }
              }
            }
          },
          "400": {
            "description": "Invalid input",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ErrorResponse"
                }
              }
            }
          }
        }
      }
    },
    "/api/v1/overtime": {
      "get": {
        "operationId": "overtime",
        "summary": "Regular hours, overtime hours, overtime rate and estimated gross pay.",
        "description": "Regular hours, overtime hours, overtime rate and estimated gross pay. Human source: https://tannerd.net/tools/overtime-calculator/",
        "parameters": [
          {
            "name": "hourly_rate",
            "in": "query",
            "required": true,
            "schema": {
              "type": "number"
            },
            "example": 20
          },
          {
            "name": "total_hours",
            "in": "query",
            "required": true,
            "schema": {
              "type": "number"
            },
            "example": 45
          },
          {
            "name": "threshold",
            "in": "query",
            "required": false,
            "schema": {
              "type": "number"
            },
            "example": 40
          },
          {
            "name": "multiplier",
            "in": "query",
            "required": false,
            "schema": {
              "type": "number"
            },
            "example": 1.5
          }
        ],
        "responses": {
          "200": {
            "description": "Calculation result",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/CalculatorResponse"
                }
              }
            }
          },
          "400": {
            "description": "Invalid input",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ErrorResponse"
                }
              }
            }
          }
        }
      }
    },
    "/api/v1/trip-cost": {
      "get": {
        "operationId": "trip_cost",
        "summary": "Gallons, gas cost, toll-inclusive trip cost, cost per mile and split cost.",
        "description": "Gallons, gas cost, toll-inclusive trip cost, cost per mile and split cost. Human source: https://tannerd.net/tools/trip-cost-calculator/",
        "parameters": [
          {
            "name": "miles",
            "in": "query",
            "required": true,
            "schema": {
              "type": "number"
            },
            "example": 300
          },
          {
            "name": "mpg",
            "in": "query",
            "required": true,
            "schema": {
              "type": "number"
            },
            "example": 30
          },
          {
            "name": "gas_price",
            "in": "query",
            "required": true,
            "schema": {
              "type": "number"
            },
            "example": 3.25
          },
          {
            "name": "tolls",
            "in": "query",
            "required": false,
            "schema": {
              "type": "number"
            },
            "example": 0
          },
          {
            "name": "people",
            "in": "query",
            "required": false,
            "schema": {
              "type": "number"
            },
            "example": 1
          }
        ],
        "responses": {
          "200": {
            "description": "Calculation result",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/CalculatorResponse"
                }
              }
            }
          },
          "400": {
            "description": "Invalid input",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ErrorResponse"
                }
              }
            }
          }
        }
      }
    },
    "/api/v1/cost-per-mile": {
      "get": {
        "operationId": "cost_per_mile",
        "summary": "Vehicle cost per mile, revenue per mile and profit per mile.",
        "description": "Vehicle cost per mile, revenue per mile and profit per mile. Human source: https://tannerd.net/tools/cost-per-mile/",
        "parameters": [
          {
            "name": "total_costs",
            "in": "query",
            "required": true,
            "schema": {
              "type": "number"
            },
            "example": 800
          },
          {
            "name": "miles",
            "in": "query",
            "required": true,
            "schema": {
              "type": "number"
            },
            "example": 2000
          },
          {
            "name": "revenue",
            "in": "query",
            "required": false,
            "schema": {
              "type": "number"
            },
            "example": 1600
          }
        ],
        "responses": {
          "200": {
            "description": "Calculation result",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/CalculatorResponse"
                }
              }
            }
          },
          "400": {
            "description": "Invalid input",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ErrorResponse"
                }
              }
            }
          }
        }
      }
    },
    "/api/v1/gig-profit": {
      "get": {
        "operationId": "gig_profit",
        "summary": "Gig-driving profit and effective hourly earnings after a user-entered vehicle cost per mile.",
        "description": "Gig-driving profit and effective hourly earnings after a user-entered vehicle cost per mile. Human source: https://tannerd.net/tools/gig-profit-calculator/",
        "parameters": [
          {
            "name": "gross_earnings",
            "in": "query",
            "required": true,
            "schema": {
              "type": "number"
            },
            "example": 250
          },
          {
            "name": "hours",
            "in": "query",
            "required": true,
            "schema": {
              "type": "number"
            },
            "example": 10
          },
          {
            "name": "miles",
            "in": "query",
            "required": true,
            "schema": {
              "type": "number"
            },
            "example": 200
          },
          {
            "name": "vehicle_cost_per_mile",
            "in": "query",
            "required": false,
            "schema": {
              "type": "number"
            },
            "example": 0.35
          }
        ],
        "responses": {
          "200": {
            "description": "Calculation result",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/CalculatorResponse"
                }
              }
            }
          },
          "400": {
            "description": "Invalid input",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ErrorResponse"
                }
              }
            }
          }
        }
      }
    },
    "/api/v1/roof-takeoff": {
      "get": {
        "operationId": "roof_takeoff",
        "summary": "Roof material planning from footprint, pitch, waste and editable product coverage assumptions.",
        "description": "Roof material planning from footprint, pitch, waste and editable product coverage assumptions. Human source: https://tannerd.net/tools/roof-material-takeoff-calculator/",
        "parameters": [
          {
            "name": "length",
            "in": "query",
            "required": true,
            "schema": {
              "type": "number"
            },
            "example": 40
          },
          {
            "name": "width",
            "in": "query",
            "required": true,
            "schema": {
              "type": "number"
            },
            "example": 30
          },
          {
            "name": "pitch",
            "in": "query",
            "required": false,
            "schema": {
              "type": "number"
            },
            "example": 6
          },
          {
            "name": "waste_pct",
            "in": "query",
            "required": false,
            "schema": {
              "type": "number"
            },
            "example": 12
          },
          {
            "name": "bundles_per_square",
            "in": "query",
            "required": false,
            "schema": {
              "type": "number"
            },
            "example": 3
          },
          {
            "name": "underlayment_sqft_per_roll",
            "in": "query",
            "required": false,
            "schema": {
              "type": "number"
            },
            "example": 1000
          },
          {
            "name": "ridge_hip_feet",
            "in": "query",
            "required": false,
            "schema": {
              "type": "number"
            },
            "example": 60
          },
          {
            "name": "ridge_cap_feet_per_bundle",
            "in": "query",
            "required": false,
            "schema": {
              "type": "number"
            },
            "example": 25
          },
          {
            "name": "eave_rake_feet",
            "in": "query",
            "required": false,
            "schema": {
              "type": "number"
            },
            "example": 180
          },
          {
            "name": "nails_per_square",
            "in": "query",
            "required": false,
            "schema": {
              "type": "number"
            },
            "example": 256
          }
        ],
        "responses": {
          "200": {
            "description": "Calculation result",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/CalculatorResponse"
                }
              }
            }
          },
          "400": {
            "description": "Invalid input",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ErrorResponse"
                }
              }
            }
          }
        }
      }
    },
    "/api/v1/concrete-slab": {
      "get": {
        "operationId": "concrete_slab",
        "summary": "Concrete volume for a rectangular slab with an optional extra allowance.",
        "description": "Concrete volume for a rectangular slab with an optional extra allowance. Human source: https://tannerd.net/tools/concrete-slab-calculator/",
        "parameters": [
          {
            "name": "length",
            "in": "query",
            "required": true,
            "schema": {
              "type": "number"
            },
            "example": 10
          },
          {
            "name": "width",
            "in": "query",
            "required": true,
            "schema": {
              "type": "number"
            },
            "example": 10
          },
          {
            "name": "thickness_inches",
            "in": "query",
            "required": true,
            "schema": {
              "type": "number"
            },
            "example": 4
          },
          {
            "name": "extra_pct",
            "in": "query",
            "required": false,
            "schema": {
              "type": "number"
            },
            "example": 10
          }
        ],
        "responses": {
          "200": {
            "description": "Calculation result",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/CalculatorResponse"
                }
              }
            }
          },
          "400": {
            "description": "Invalid input",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ErrorResponse"
                }
              }
            }
          }
        }
      }
    },
    "/api/v1/contractor-margin": {
      "get": {
        "operationId": "contractor_margin",
        "summary": "Convert contractor markup to price/margin and calculate price for a target margin.",
        "description": "Convert contractor markup to price/margin and calculate price for a target margin. Human source: https://tannerd.net/tools/contractor-markup-margin-calculator/",
        "parameters": [
          {
            "name": "cost",
            "in": "query",
            "required": true,
            "schema": {
              "type": "number"
            },
            "example": 5000
          },
          {
            "name": "markup_pct",
            "in": "query",
            "required": false,
            "schema": {
              "type": "number"
            },
            "example": 30
          },
          {
            "name": "target_margin_pct",
            "in": "query",
            "required": false,
            "schema": {
              "type": "number"
            },
            "example": 30
          }
        ],
        "responses": {
          "200": {
            "description": "Calculation result",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/CalculatorResponse"
                }
              }
            }
          },
          "400": {
            "description": "Invalid input",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ErrorResponse"
                }
              }
            }
          }
        }
      }
    },
    "/api/v1/square-footage": {
      "get": {
        "operationId": "square_footage",
        "summary": "Rectangular square footage from length and width.",
        "description": "Rectangular square footage from length and width. Human source: https://tannerd.net/tools/square-footage-calculator/",
        "parameters": [
          {
            "name": "length",
            "in": "query",
            "required": true,
            "schema": {
              "type": "number"
            },
            "example": 12
          },
          {
            "name": "width",
            "in": "query",
            "required": true,
            "schema": {
              "type": "number"
            },
            "example": 10
          }
        ],
        "responses": {
          "200": {
            "description": "Calculation result",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/CalculatorResponse"
                }
              }
            }
          },
          "400": {
            "description": "Invalid input",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ErrorResponse"
                }
              }
            }
          }
        }
      }
    },
    "/api/v1/time-card": {
      "post": {
        "operationId": "time_card",
        "summary": "Calculate a weekly or biweekly time card with overnight shifts, unpaid breaks, weekly overtime and gross pay.",
        "requestBody": {
          "required": true,
          "content": {
            "application/json": {
              "schema": {
                "type": "object",
                "required": [
                  "hourly_rate",
                  "days"
                ],
                "properties": {
                  "hourly_rate": {
                    "type": "number",
                    "example": 20
                  },
                  "overtime_threshold": {
                    "type": "number",
                    "default": 40
                  },
                  "overtime_multiplier": {
                    "type": "number",
                    "default": 1.5
                  },
                  "days": {
                    "type": "array",
                    "minItems": 1,
                    "maxItems": 14,
                    "items": {
                      "type": "object",
                      "required": [
                        "start",
                        "end"
                      ],
                      "properties": {
                        "start": {
                          "type": "string",
                          "example": "08:00"
                        },
                        "end": {
                          "type": "string",
                          "example": "16:30"
                        },
                        "break_minutes": {
                          "type": "number",
                          "default": 30
                        }
                      }
                    }
                  }
                }
              }
            }
          }
        },
        "responses": {
          "200": {
            "description": "Time card result",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/CalculatorResponse"
                }
              }
            }
          },
          "400": {
            "description": "Invalid input"
          }
        }
      }
    },
    "/api/v1/health": {
      "get": {
        "operationId": "health",
        "summary": "API health and version information.",
        "responses": {
          "200": {
            "description": "Healthy"
          }
        }
      }
    },
    "/api/v1/electricity-cost": {
      "get": {
        "operationId": "electricity_cost",
        "summary": "Electricity Cost Calculator",
        "description": "Calculate electricity use and running cost per day, month, and year from watts, runtime, duty cycle, quantity, and your electricity rate. Human source: https://tannerd.net/tools/electricity-cost-calculator/",
        "parameters": [
          {
            "name": "watts",
            "in": "query",
            "required": true,
            "schema": {
              "type": "number"
            },
            "example": 1500
          },
          {
            "name": "hours_per_day",
            "in": "query",
            "required": true,
            "schema": {
              "type": "number"
            },
            "example": 5
          },
          {
            "name": "days_per_month",
            "in": "query",
            "required": false,
            "schema": {
              "type": "number"
            },
            "example": 30
          },
          {
            "name": "rate_per_kwh",
            "in": "query",
            "required": true,
            "schema": {
              "type": "number"
            },
            "example": 0.18
          },
          {
            "name": "quantity",
            "in": "query",
            "required": false,
            "schema": {
              "type": "number"
            },
            "example": 1
          },
          {
            "name": "duty_cycle_pct",
            "in": "query",
            "required": false,
            "schema": {
              "type": "number"
            },
            "example": 100
          }
        ],
        "responses": {
          "200": {
            "description": "Calculation result",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/CalculatorResponse"
                }
              }
            }
          },
          "400": {
            "description": "Invalid input",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ErrorResponse"
                }
              }
            }
          }
        }
      }
    },
    "/api/v1/ev-vs-gas": {
      "get": {
        "operationId": "ev_vs_gas",
        "summary": "EV vs Gas Cost Calculator",
        "description": "Compare EV charging cost with gasoline cost per mile, per month, and per year using your electricity rate, EV efficiency, MPG, and gas price. Human source: https://tannerd.net/tools/ev-vs-gas-cost-calculator/",
        "parameters": [
          {
            "name": "miles_per_month",
            "in": "query",
            "required": true,
            "schema": {
              "type": "number"
            },
            "example": 1000
          },
          {
            "name": "ev_kwh_per_100_miles",
            "in": "query",
            "required": true,
            "schema": {
              "type": "number"
            },
            "example": 30
          },
          {
            "name": "electricity_rate",
            "in": "query",
            "required": true,
            "schema": {
              "type": "number"
            },
            "example": 0.18
          },
          {
            "name": "charging_efficiency_pct",
            "in": "query",
            "required": false,
            "schema": {
              "type": "number"
            },
            "example": 90
          },
          {
            "name": "gas_mpg",
            "in": "query",
            "required": true,
            "schema": {
              "type": "number"
            },
            "example": 30
          },
          {
            "name": "gas_price",
            "in": "query",
            "required": true,
            "schema": {
              "type": "number"
            },
            "example": 3.5
          }
        ],
        "responses": {
          "200": {
            "description": "Calculation result",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/CalculatorResponse"
                }
              }
            }
          },
          "400": {
            "description": "Invalid input",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ErrorResponse"
                }
              }
            }
          }
        }
      }
    },
    "/api/v1/break-even-point": {
      "get": {
        "operationId": "break_even_point",
        "summary": "Break-even Point Calculator",
        "description": "Calculate break-even units and break-even revenue from fixed costs, selling price, and variable cost per unit. Human source: https://tannerd.net/tools/break-even-point-calculator/",
        "parameters": [
          {
            "name": "fixed_costs",
            "in": "query",
            "required": true,
            "schema": {
              "type": "number"
            },
            "example": 5000
          },
          {
            "name": "price_per_unit",
            "in": "query",
            "required": true,
            "schema": {
              "type": "number"
            },
            "example": 80
          },
          {
            "name": "variable_cost_per_unit",
            "in": "query",
            "required": true,
            "schema": {
              "type": "number"
            },
            "example": 50
          }
        ],
        "responses": {
          "200": {
            "description": "Calculation result",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/CalculatorResponse"
                }
              }
            }
          },
          "400": {
            "description": "Invalid input",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ErrorResponse"
                }
              }
            }
          }
        }
      }
    },
    "/api/v1/marketing-metrics": {
      "get": {
        "operationId": "marketing_metrics",
        "summary": "Marketing Metrics Calculator \u2013 CPC, CPM, CPA, ROAS & CTR",
        "description": "Calculate CPC, CPM, CPA, CTR, conversion rate, and ROAS from ad spend, impressions, clicks, conversions, and revenue. Human source: https://tannerd.net/tools/marketing-metrics-calculator/",
        "parameters": [
          {
            "name": "spend",
            "in": "query",
            "required": true,
            "schema": {
              "type": "number"
            },
            "example": 1500
          },
          {
            "name": "impressions",
            "in": "query",
            "required": false,
            "schema": {
              "type": "number"
            },
            "example": 100000
          },
          {
            "name": "clicks",
            "in": "query",
            "required": false,
            "schema": {
              "type": "number"
            },
            "example": 2500
          },
          {
            "name": "conversions",
            "in": "query",
            "required": false,
            "schema": {
              "type": "number"
            },
            "example": 100
          },
          {
            "name": "revenue",
            "in": "query",
            "required": false,
            "schema": {
              "type": "number"
            },
            "example": 5000
          }
        ],
        "responses": {
          "200": {
            "description": "Calculation result",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/CalculatorResponse"
                }
              }
            }
          },
          "400": {
            "description": "Invalid input",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ErrorResponse"
                }
              }
            }
          }
        }
      }
    },
    "/api/v1/customer-ltv-cac": {
      "get": {
        "operationId": "customer_ltv_cac",
        "summary": "Customer LTV:CAC Calculator",
        "description": "Estimate customer lifetime revenue, gross-profit LTV, and LTV:CAC ratio from average order value, purchase frequency, customer lifespan, gross margin, and CAC. Human source: https://tannerd.net/tools/customer-ltv-cac-calculator/",
        "parameters": [
          {
            "name": "average_order_value",
            "in": "query",
            "required": true,
            "schema": {
              "type": "number"
            },
            "example": 80
          },
          {
            "name": "purchases_per_year",
            "in": "query",
            "required": true,
            "schema": {
              "type": "number"
            },
            "example": 4
          },
          {
            "name": "customer_lifespan_years",
            "in": "query",
            "required": true,
            "schema": {
              "type": "number"
            },
            "example": 3
          },
          {
            "name": "gross_margin_pct",
            "in": "query",
            "required": true,
            "schema": {
              "type": "number"
            },
            "example": 50
          },
          {
            "name": "cac",
            "in": "query",
            "required": true,
            "schema": {
              "type": "number"
            },
            "example": 75
          }
        ],
        "responses": {
          "200": {
            "description": "Calculation result",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/CalculatorResponse"
                }
              }
            }
          },
          "400": {
            "description": "Invalid input",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ErrorResponse"
                }
              }
            }
          }
        }
      }
    },
    "/api/v1/cash-runway": {
      "get": {
        "operationId": "cash_runway",
        "summary": "Cash Runway & Burn Rate Calculator",
        "description": "Calculate monthly net burn and cash runway from current cash, monthly revenue, and monthly expenses. Human source: https://tannerd.net/tools/cash-runway-calculator/",
        "parameters": [
          {
            "name": "cash_balance",
            "in": "query",
            "required": true,
            "schema": {
              "type": "number"
            },
            "example": 50000
          },
          {
            "name": "monthly_revenue",
            "in": "query",
            "required": true,
            "schema": {
              "type": "number"
            },
            "example": 10000
          },
          {
            "name": "monthly_expenses",
            "in": "query",
            "required": true,
            "schema": {
              "type": "number"
            },
            "example": 15000
          }
        ],
        "responses": {
          "200": {
            "description": "Calculation result",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/CalculatorResponse"
                }
              }
            }
          },
          "400": {
            "description": "Invalid input",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ErrorResponse"
                }
              }
            }
          }
        }
      }
    },
    "/api/v1/freelance-rate": {
      "get": {
        "operationId": "freelance_rate",
        "summary": "Freelance Hourly Rate Calculator",
        "description": "Calculate the minimum billable hourly rate needed to cover a target annual income and business overhead from realistic billable weeks and hours. Human source: https://tannerd.net/tools/freelance-rate-calculator/",
        "parameters": [
          {
            "name": "target_income",
            "in": "query",
            "required": true,
            "schema": {
              "type": "number"
            },
            "example": 70000
          },
          {
            "name": "annual_overhead",
            "in": "query",
            "required": false,
            "schema": {
              "type": "number"
            },
            "example": 10000
          },
          {
            "name": "billable_weeks",
            "in": "query",
            "required": true,
            "schema": {
              "type": "number"
            },
            "example": 46
          },
          {
            "name": "billable_hours_per_week",
            "in": "query",
            "required": true,
            "schema": {
              "type": "number"
            },
            "example": 25
          }
        ],
        "responses": {
          "200": {
            "description": "Calculation result",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/CalculatorResponse"
                }
              }
            }
          },
          "400": {
            "description": "Invalid input",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ErrorResponse"
                }
              }
            }
          }
        }
      }
    },
    "/api/v1/unit-price-compare": {
      "get": {
        "operationId": "unit_price_compare",
        "summary": "Unit Price Comparison Calculator",
        "description": "Compare two package prices by unit and see which option is cheaper plus the percentage difference. Human source: https://tannerd.net/tools/unit-price-comparison-calculator/",
        "parameters": [
          {
            "name": "price_a",
            "in": "query",
            "required": true,
            "schema": {
              "type": "number"
            },
            "example": 12.99
          },
          {
            "name": "quantity_a",
            "in": "query",
            "required": true,
            "schema": {
              "type": "number"
            },
            "example": 16
          },
          {
            "name": "price_b",
            "in": "query",
            "required": true,
            "schema": {
              "type": "number"
            },
            "example": 17.49
          },
          {
            "name": "quantity_b",
            "in": "query",
            "required": true,
            "schema": {
              "type": "number"
            },
            "example": 24
          }
        ],
        "responses": {
          "200": {
            "description": "Calculation result",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/CalculatorResponse"
                }
              }
            }
          },
          "400": {
            "description": "Invalid input",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ErrorResponse"
                }
              }
            }
          }
        }
      }
    },
    "/api/v1/dimensional-weight": {
      "get": {
        "operationId": "dimensional_weight",
        "summary": "Dimensional Weight Calculator",
        "description": "Calculate dimensional shipping weight from package dimensions and a user-entered DIM divisor, then compare it with actual weight. Human source: https://tannerd.net/tools/dimensional-weight-calculator/",
        "parameters": [
          {
            "name": "length_inches",
            "in": "query",
            "required": true,
            "schema": {
              "type": "number"
            },
            "example": 18
          },
          {
            "name": "width_inches",
            "in": "query",
            "required": true,
            "schema": {
              "type": "number"
            },
            "example": 12
          },
          {
            "name": "height_inches",
            "in": "query",
            "required": true,
            "schema": {
              "type": "number"
            },
            "example": 10
          },
          {
            "name": "dim_divisor",
            "in": "query",
            "required": true,
            "schema": {
              "type": "number"
            },
            "example": 139
          },
          {
            "name": "actual_weight",
            "in": "query",
            "required": false,
            "schema": {
              "type": "number"
            },
            "example": 8
          }
        ],
        "responses": {
          "200": {
            "description": "Calculation result",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/CalculatorResponse"
                }
              }
            }
          },
          "400": {
            "description": "Invalid input",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ErrorResponse"
                }
              }
            }
          }
        }
      }
    },
    "/api/v1/date-difference": {
      "get": {
        "operationId": "date_difference",
        "summary": "Days Between Dates Calculator",
        "description": "Exact calendar-day difference between two ISO dates. Human source: https://tannerd.net/tools/date-difference-calculator/",
        "parameters": [
          {
            "name": "start_date",
            "in": "query",
            "required": true,
            "schema": {
              "type": "string",
              "format": "date"
            },
            "example": "2026-09-01"
          },
          {
            "name": "end_date",
            "in": "query",
            "required": true,
            "schema": {
              "type": "string",
              "format": "date"
            },
            "example": "2026-09-30"
          }
        ],
        "responses": {
          "200": {
            "description": "Calculation result",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/CalculatorResponse"
                }
              }
            }
          },
          "400": {
            "description": "Invalid input",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ErrorResponse"
                }
              }
            }
          }
        }
      }
    },
    "/api/v1/percentage-change": {
      "get": {
        "operationId": "percentage_change",
        "summary": "Percentage Change Calculator",
        "description": "Percentage increase or decrease between an original value and a new value. Human source: https://tannerd.net/tools/percentage-change-calculator/",
        "parameters": [
          {
            "name": "original",
            "in": "query",
            "required": true,
            "schema": {
              "type": "number"
            },
            "example": 100
          },
          {
            "name": "new_value",
            "in": "query",
            "required": true,
            "schema": {
              "type": "number"
            },
            "example": 125
          }
        ],
        "responses": {
          "200": {
            "description": "Calculation result",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/CalculatorResponse"
                }
              }
            }
          },
          "400": {
            "description": "Invalid input",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ErrorResponse"
                }
              }
            }
          }
        }
      }
    },
    "/api/v1/salary-to-hourly": {
      "get": {
        "operationId": "salary_to_hourly",
        "summary": "Salary to Hourly Calculator",
        "description": "Convert annual salary to equivalent hourly, weekly, and monthly amounts from weekly hours. Human source: https://tannerd.net/tools/salary-to-hourly-calculator/",
        "parameters": [
          {
            "name": "annual_salary",
            "in": "query",
            "required": true,
            "schema": {
              "type": "number"
            },
            "example": 60000
          },
          {
            "name": "hours_per_week",
            "in": "query",
            "required": false,
            "schema": {
              "type": "number"
            },
            "example": 40
          }
        ],
        "responses": {
          "200": {
            "description": "Calculation result",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/CalculatorResponse"
                }
              }
            }
          },
          "400": {
            "description": "Invalid input",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ErrorResponse"
                }
              }
            }
          }
        }
      }
    }
  },
  "components": {
    "schemas": {
      "CalculatorResponse": {
        "type": "object",
        "required": [
          "ok",
          "calculator",
          "inputs",
          "result",
          "formula",
          "source",
          "reviewed"
        ],
        "properties": {
          "ok": {
            "type": "boolean"
          },
          "calculator": {
            "type": "string"
          },
          "inputs": {
            "type": "object"
          },
          "result": {
            "type": "object"
          },
          "formula": {
            "type": "string"
          },
          "source": {
            "type": "string",
            "format": "uri"
          },
          "reviewed": {
            "type": "string",
            "format": "date"
          }
        }
      },
      "ErrorResponse": {
        "type": "object",
        "properties": {
          "ok": {
            "type": "boolean",
            "const": false
          },
          "error": {
            "type": "string"
          },
          "parameter": {
            "type": [
              "string",
              "null"
            ]
          },
          "docs": {
            "type": "string",
            "format": "uri"
          }
        }
      }
    }
  }
}
