{
  "info": {
    "contact": {
      "name": "Cowerx",
      "url": "https://apitoolcalls.com/api/"
    },
    "description": "API Tool Calls: public HTTP tools with 20 free calls a day per IP with no key. Own-key tools also need the caller's OpenRouter key. Free limits reset at midnight UTC; global and per-tool limits also apply. Citation lookups have a separate limit of 60 per IP per UTC hour.",
    "title": "API Tool Calls",
    "version": "1.0.0"
  },
  "openapi": "3.1.0",
  "paths": {
    "/api/basement-water": {
      "get": {
        "description": "Narrow down why a basement gets wet and who fixes it. Eight observation groups return every rule-matched possible cause, evidence, safe first checks, trade referrals and sources. Hazard stops come first; no probabilities or structural diagnosis. Pure rules, no network or model.",
        "operationId": "basement_water_cause",
        "parameters": [
          {
            "description": "Repeat for each observation code. Send unknown for unknown or none_observed for no observations. Supply at least one group.",
            "explode": true,
            "in": "query",
            "name": "hazard",
            "required": false,
            "schema": {
              "items": {
                "enum": [
                  "standing_water",
                  "sewage",
                  "electrical",
                  "unknown",
                  "none_observed"
                ],
                "type": "string"
              },
              "minItems": 1,
              "type": "array"
            },
            "style": "form"
          },
          {
            "description": "Repeat for each observation code. Send unknown for unknown or none_observed for no observations. Supply at least one group.",
            "explode": true,
            "in": "query",
            "name": "timing",
            "required": false,
            "schema": {
              "items": {
                "enum": [
                  "rain",
                  "snowmelt",
                  "dry_weather",
                  "water_use",
                  "humid_summer",
                  "unknown",
                  "none_observed"
                ],
                "type": "string"
              },
              "minItems": 1,
              "type": "array"
            },
            "style": "form"
          },
          {
            "description": "Repeat for each observation code. Send unknown for unknown or none_observed for no observations. Supply at least one group.",
            "explode": true,
            "in": "query",
            "name": "where",
            "required": false,
            "schema": {
              "items": {
                "enum": [
                  "wall_crack",
                  "wall_floor_joint",
                  "floor",
                  "window",
                  "overhead_pipe",
                  "floor_drain",
                  "crack_changing",
                  "wall_bowing",
                  "unknown",
                  "none_observed"
                ],
                "type": "string"
              },
              "minItems": 1,
              "type": "array"
            },
            "style": "form"
          },
          {
            "description": "Repeat for each observation code. Send unknown for unknown or none_observed for no observations. Supply at least one group.",
            "explode": true,
            "in": "query",
            "name": "gutters",
            "required": false,
            "schema": {
              "items": {
                "enum": [
                  "overflowing",
                  "missing",
                  "downspout_near",
                  "unknown",
                  "none_observed"
                ],
                "type": "string"
              },
              "minItems": 1,
              "type": "array"
            },
            "style": "form"
          },
          {
            "description": "Repeat for each observation code. Send unknown for unknown or none_observed for no observations. Supply at least one group.",
            "explode": true,
            "in": "query",
            "name": "grading",
            "required": false,
            "schema": {
              "items": {
                "enum": [
                  "slopes_toward",
                  "puddles",
                  "unknown",
                  "none_observed"
                ],
                "type": "string"
              },
              "minItems": 1,
              "type": "array"
            },
            "style": "form"
          },
          {
            "description": "Repeat for each observation code. Send unknown for unknown or none_observed for no observations. Supply at least one group.",
            "explode": true,
            "in": "query",
            "name": "window_well",
            "required": false,
            "schema": {
              "items": {
                "enum": [
                  "debris",
                  "ponding",
                  "starts_at_window",
                  "unknown",
                  "none_observed"
                ],
                "type": "string"
              },
              "minItems": 1,
              "type": "array"
            },
            "style": "form"
          },
          {
            "description": "Repeat for each observation code. Send unknown for unknown or none_observed for no observations. Supply at least one group.",
            "explode": true,
            "in": "query",
            "name": "sump",
            "required": false,
            "schema": {
              "items": {
                "enum": [
                  "none",
                  "power_lost",
                  "pit_filling_no_discharge",
                  "running",
                  "seepage_no_inflow",
                  "unknown",
                  "none_observed"
                ],
                "type": "string"
              },
              "minItems": 1,
              "type": "array"
            },
            "style": "form"
          },
          {
            "description": "Repeat for each observation code. Send unknown for unknown or none_observed for no observations. Supply at least one group.",
            "explode": true,
            "in": "query",
            "name": "moisture",
            "required": false,
            "schema": {
              "items": {
                "enum": [
                  "cold_surface_sweating",
                  "humid_air",
                  "indoor_sources",
                  "visible_drip",
                  "unknown",
                  "none_observed"
                ],
                "type": "string"
              },
              "minItems": 1,
              "type": "array"
            },
            "style": "form"
          }
        ],
        "responses": {
          "200": {
            "content": {
              "application/json": {
                "schema": {
                  "additionalProperties": true,
                  "properties": {
                    "link": {
                      "examples": [
                        "https://apitoolcalls.com/basement-water/?utm_source=api&utm_medium=api"
                      ],
                      "format": "uri",
                      "type": "string"
                    },
                    "via": {
                      "const": "API Tool Calls",
                      "type": "string"
                    }
                  },
                  "required": [
                    "via",
                    "link"
                  ],
                  "type": "object"
                }
              }
            },
            "description": "Successful tool result with attribution."
          },
          "400": {
            "content": {
              "application/json": {
                "schema": {
                  "properties": {
                    "error": {
                      "properties": {
                        "code": {
                          "type": "integer"
                        },
                        "message": {
                          "type": "string"
                        }
                      },
                      "required": [
                        "message"
                      ],
                      "type": "object"
                    }
                  },
                  "required": [
                    "error"
                  ],
                  "type": "object"
                }
              }
            },
            "description": "Invalid tool arguments."
          },
          "429": {
            "content": {
              "application/json": {
                "schema": {
                  "properties": {
                    "error": {
                      "properties": {
                        "code": {
                          "type": "integer"
                        },
                        "message": {
                          "type": "string"
                        }
                      },
                      "required": [
                        "message"
                      ],
                      "type": "object"
                    }
                  },
                  "required": [
                    "error"
                  ],
                  "type": "object"
                }
              }
            },
            "description": "Free call limit reached; try again after the limit resets."
          }
        }
      }
    },
    "/api/cite-url": {
      "get": {
        "description": "Read citation metadata from one public HTTP or HTTPS page.",
        "operationId": "cite_url",
        "parameters": [
          {
            "in": "query",
            "name": "url",
            "required": true,
            "schema": {
              "description": "Enter a public http or https page URL without login details (ports 80/443 only)",
              "type": "string"
            }
          }
        ],
        "responses": {
          "200": {
            "content": {
              "application/json": {
                "schema": {
                  "additionalProperties": true,
                  "properties": {
                    "link": {
                      "examples": [
                        "https://apitoolcalls.com/apa-citation-generator/?utm_source=api&utm_medium=api"
                      ],
                      "format": "uri",
                      "type": "string"
                    },
                    "via": {
                      "const": "API Tool Calls",
                      "type": "string"
                    }
                  },
                  "required": [
                    "via",
                    "link"
                  ],
                  "type": "object"
                }
              }
            },
            "description": "Successful tool result with attribution."
          },
          "400": {
            "content": {
              "application/json": {
                "schema": {
                  "properties": {
                    "error": {
                      "properties": {
                        "code": {
                          "type": "integer"
                        },
                        "message": {
                          "type": "string"
                        }
                      },
                      "required": [
                        "message"
                      ],
                      "type": "object"
                    }
                  },
                  "required": [
                    "error"
                  ],
                  "type": "object"
                }
              }
            },
            "description": "Invalid tool arguments."
          },
          "429": {
            "content": {
              "application/json": {
                "schema": {
                  "properties": {
                    "error": {
                      "properties": {
                        "code": {
                          "type": "integer"
                        },
                        "message": {
                          "type": "string"
                        }
                      },
                      "required": [
                        "message"
                      ],
                      "type": "object"
                    }
                  },
                  "required": [
                    "error"
                  ],
                  "type": "object"
                }
              }
            },
            "description": "Free call limit reached; try again after the limit resets."
          }
        }
      }
    },
    "/api/company-facts": {
      "post": {
        "description": "Read a business's own home, about and contact pages and return its name, address, phone, email, founding year and what it does, each with the page it came from. Page text goes to a language model: with no key, a small shared free daily allowance (Google Gemini); with an X-OpenRouter-Key header, the caller's OpenRouter key.",
        "operationId": "company_facts",
        "parameters": [
          {
            "description": "Needs the caller's OpenRouter key in the X-OpenRouter-Key header.",
            "in": "header",
            "name": "X-OpenRouter-Key",
            "required": true,
            "schema": {
              "maxLength": 200,
              "minLength": 1,
              "type": "string"
            }
          }
        ],
        "requestBody": {
          "content": {
            "application/json": {
              "schema": {
                "additionalProperties": false,
                "properties": {
                  "url": {
                    "description": "The business's public http or https homepage URL.",
                    "maxLength": 8192,
                    "minLength": 1,
                    "type": "string"
                  }
                },
                "required": [
                  "url"
                ],
                "type": "object"
              }
            }
          },
          "required": true
        },
        "responses": {
          "200": {
            "content": {
              "application/json": {
                "schema": {
                  "additionalProperties": true,
                  "properties": {
                    "link": {
                      "examples": [
                        "https://apitoolcalls.com/company-info-finder/?utm_source=api&utm_medium=api"
                      ],
                      "format": "uri",
                      "type": "string"
                    },
                    "via": {
                      "const": "API Tool Calls",
                      "type": "string"
                    }
                  },
                  "required": [
                    "via",
                    "link"
                  ],
                  "type": "object"
                }
              }
            },
            "description": "Successful tool result with attribution."
          },
          "400": {
            "content": {
              "application/json": {
                "schema": {
                  "properties": {
                    "error": {
                      "properties": {
                        "code": {
                          "type": "integer"
                        },
                        "message": {
                          "type": "string"
                        }
                      },
                      "required": [
                        "message"
                      ],
                      "type": "object"
                    }
                  },
                  "required": [
                    "error"
                  ],
                  "type": "object"
                }
              }
            },
            "description": "Invalid tool arguments."
          },
          "401": {
            "content": {
              "application/json": {
                "schema": {
                  "properties": {
                    "error": {
                      "properties": {
                        "code": {
                          "type": "integer"
                        },
                        "message": {
                          "type": "string"
                        }
                      },
                      "required": [
                        "message"
                      ],
                      "type": "object"
                    }
                  },
                  "required": [
                    "error"
                  ],
                  "type": "object"
                }
              }
            },
            "description": "OpenRouter key missing or rejected."
          },
          "429": {
            "content": {
              "application/json": {
                "schema": {
                  "properties": {
                    "error": {
                      "properties": {
                        "code": {
                          "type": "integer"
                        },
                        "message": {
                          "type": "string"
                        }
                      },
                      "required": [
                        "message"
                      ],
                      "type": "object"
                    }
                  },
                  "required": [
                    "error"
                  ],
                  "type": "object"
                }
              }
            },
            "description": "Free call limit reached; try again after the limit resets."
          }
        }
      }
    },
    "/api/data-finder": {
      "get": {
        "description": "Get a full Data Finder plan for up to three sources: fit, cost at your monthly volume, resale terms with recorded clause, URL and read date, and build-it-yourself guidance. No live source lookup. Defaults: volume 0, US, no resale.",
        "operationId": "find_data",
        "parameters": [
          {
            "in": "query",
            "name": "q",
            "required": true,
            "schema": {
              "description": "Describe the data you need and what you want to build.",
              "maxLength": 500,
              "minLength": 1,
              "type": "string"
            }
          },
          {
            "in": "query",
            "name": "volume",
            "required": false,
            "schema": {
              "maximum": 1000000000000000,
              "minimum": 0,
              "type": "integer"
            }
          },
          {
            "in": "query",
            "name": "resell",
            "required": false,
            "schema": {
              "enum": [
                "yes",
                "no"
              ],
              "type": "string"
            }
          },
          {
            "in": "query",
            "name": "geo",
            "required": false,
            "schema": {
              "maxLength": 200,
              "minLength": 1,
              "type": "string"
            }
          }
        ],
        "responses": {
          "200": {
            "content": {
              "application/json": {
                "schema": {
                  "additionalProperties": true,
                  "properties": {
                    "link": {
                      "examples": [
                        "https://apitoolcalls.com/data-finder/?utm_source=api&utm_medium=api"
                      ],
                      "format": "uri",
                      "type": "string"
                    },
                    "via": {
                      "const": "API Tool Calls",
                      "type": "string"
                    }
                  },
                  "required": [
                    "via",
                    "link"
                  ],
                  "type": "object"
                }
              }
            },
            "description": "Successful tool result with attribution."
          },
          "400": {
            "content": {
              "application/json": {
                "schema": {
                  "properties": {
                    "error": {
                      "properties": {
                        "code": {
                          "type": "integer"
                        },
                        "message": {
                          "type": "string"
                        }
                      },
                      "required": [
                        "message"
                      ],
                      "type": "object"
                    }
                  },
                  "required": [
                    "error"
                  ],
                  "type": "object"
                }
              }
            },
            "description": "Invalid tool arguments."
          },
          "429": {
            "content": {
              "application/json": {
                "schema": {
                  "properties": {
                    "error": {
                      "properties": {
                        "code": {
                          "type": "integer"
                        },
                        "message": {
                          "type": "string"
                        }
                      },
                      "required": [
                        "message"
                      ],
                      "type": "object"
                    }
                  },
                  "required": [
                    "error"
                  ],
                  "type": "object"
                }
              }
            },
            "description": "Free call limit reached; try again after the limit resets."
          }
        }
      }
    },
    "/api/driveway-cost": {
      "get": {
        "description": "Estimate driveway replacement costs for a given size. Returns national installed ranges with no published typical figure. One call compares all ten surfaces. Base, drainage and permits are not priced; removal is priced only for an existing concrete driveway. Includes unpriced checks, two separate national reference cards and dated sources. Pure arithmetic, no network or model.",
        "operationId": "driveway_cost",
        "parameters": [
          {
            "description": "1–10 sections, each 1–10,000 sq ft; total 20–10,000 sq ft. Use length_ft + width_ft OR area_sqft per section. Repeat this parameter for each section; use lengthxwidth in feet or an area in square feet.",
            "explode": true,
            "in": "query",
            "name": "section",
            "required": true,
            "schema": {
              "items": {
                "pattern": "^([0-9]+(?:\\.[0-9]+)?)(?:x([0-9]+(?:\\.[0-9]+)?))?$",
                "type": "string"
              },
              "maxItems": 10,
              "minItems": 1,
              "type": "array"
            },
            "style": "form"
          },
          {
            "description": "Optional labels; supply exactly one per section.",
            "explode": true,
            "in": "query",
            "name": "section_name",
            "required": false,
            "schema": {
              "items": {
                "description": "Optional section name, at most 40 characters.",
                "maxLength": 40,
                "type": "string"
              },
              "maxItems": 10,
              "type": "array"
            },
            "style": "form"
          },
          {
            "in": "query",
            "name": "surface",
            "required": true,
            "schema": {
              "description": "Chosen installed surface; one call compares all ten surfaces.",
              "enum": [
                "concrete_standard",
                "concrete_decorative",
                "concrete_stamped",
                "concrete_custom",
                "asphalt_standard",
                "asphalt_recycled",
                "asphalt_porous",
                "pavers_standard",
                "pavers_brick",
                "pavers_cobblestone"
              ],
              "type": "string"
            }
          },
          {
            "in": "query",
            "name": "existing",
            "required": false,
            "schema": {
              "default": "none",
              "description": "Existing driveway surface. Removal is priced only for existing concrete.",
              "enum": [
                "none",
                "concrete",
                "other"
              ],
              "type": "string"
            }
          }
        ],
        "responses": {
          "200": {
            "content": {
              "application/json": {
                "schema": {
                  "additionalProperties": true,
                  "properties": {
                    "link": {
                      "examples": [
                        "https://apitoolcalls.com/driveway-cost-calculator/?utm_source=api&utm_medium=api"
                      ],
                      "format": "uri",
                      "type": "string"
                    },
                    "via": {
                      "const": "API Tool Calls",
                      "type": "string"
                    }
                  },
                  "required": [
                    "via",
                    "link"
                  ],
                  "type": "object"
                }
              }
            },
            "description": "Successful tool result with attribution."
          },
          "400": {
            "content": {
              "application/json": {
                "schema": {
                  "properties": {
                    "error": {
                      "properties": {
                        "code": {
                          "type": "integer"
                        },
                        "message": {
                          "type": "string"
                        }
                      },
                      "required": [
                        "message"
                      ],
                      "type": "object"
                    }
                  },
                  "required": [
                    "error"
                  ],
                  "type": "object"
                }
              }
            },
            "description": "Invalid tool arguments."
          },
          "429": {
            "content": {
              "application/json": {
                "schema": {
                  "properties": {
                    "error": {
                      "properties": {
                        "code": {
                          "type": "integer"
                        },
                        "message": {
                          "type": "string"
                        }
                      },
                      "required": [
                        "message"
                      ],
                      "type": "object"
                    }
                  },
                  "required": [
                    "error"
                  ],
                  "type": "object"
                }
              }
            },
            "description": "Free call limit reached; try again after the limit resets."
          }
        }
      }
    },
    "/api/epoch-convert": {
      "get": {
        "description": "Convert between Unix timestamps and dates. Converts a Unix timestamp (seconds or milliseconds, detected by size) or an ISO 8601 date string to epoch seconds, epoch milliseconds, an ISO UTC time, the same moment in an optional IANA time zone, and the weekday there. A date string with no offset is read in the given zone, UTC by default. Pure standard-library rules, no network, model or clock.",
        "operationId": "epoch_convert",
        "parameters": [
          {
            "in": "query",
            "name": "value",
            "required": true,
            "schema": {
              "anyOf": [
                {
                  "type": "number"
                },
                {
                  "maxLength": 64,
                  "type": "string"
                }
              ],
              "description": "Required. A Unix timestamp (number or digits; seconds or milliseconds are detected by size) or an ISO 8601 date or date-time string such as 2024-03-10 or 2024-03-10T14:30:00-05:00."
            }
          },
          {
            "in": "query",
            "name": "tz",
            "required": false,
            "schema": {
              "description": "Optional IANA time zone name such as America/New_York. Default UTC. Used for iso_in_tz and weekday, and as the zone of a date string that has no offset of its own.",
              "maxLength": 64,
              "type": "string"
            }
          },
          {
            "in": "query",
            "name": "unit",
            "required": false,
            "schema": {
              "description": "Optional. Force a numeric value to be read as seconds (s) or milliseconds (ms) instead of auto-detecting.",
              "enum": [
                "s",
                "ms"
              ],
              "type": "string"
            }
          }
        ],
        "responses": {
          "200": {
            "content": {
              "application/json": {
                "schema": {
                  "additionalProperties": true,
                  "properties": {
                    "link": {
                      "examples": [
                        "https://apitoolcalls.com/unix-epoch/?utm_source=api&utm_medium=api"
                      ],
                      "format": "uri",
                      "type": "string"
                    },
                    "via": {
                      "const": "API Tool Calls",
                      "type": "string"
                    }
                  },
                  "required": [
                    "via",
                    "link"
                  ],
                  "type": "object"
                }
              }
            },
            "description": "Successful tool result with attribution."
          },
          "400": {
            "content": {
              "application/json": {
                "schema": {
                  "properties": {
                    "error": {
                      "properties": {
                        "code": {
                          "type": "integer"
                        },
                        "message": {
                          "type": "string"
                        }
                      },
                      "required": [
                        "message"
                      ],
                      "type": "object"
                    }
                  },
                  "required": [
                    "error"
                  ],
                  "type": "object"
                }
              }
            },
            "description": "Invalid tool arguments."
          },
          "429": {
            "content": {
              "application/json": {
                "schema": {
                  "properties": {
                    "error": {
                      "properties": {
                        "code": {
                          "type": "integer"
                        },
                        "message": {
                          "type": "string"
                        }
                      },
                      "required": [
                        "message"
                      ],
                      "type": "object"
                    }
                  },
                  "required": [
                    "error"
                  ],
                  "type": "object"
                }
              }
            },
            "description": "Free call limit reached; try again after the limit resets."
          }
        }
      }
    },
    "/api/ev-charger-installation-cost": {
      "get": {
        "description": "Work out the circuit a home EV charger needs, panel triage, utility install cost references and federal credit rules. Returns safety first, the exact 125% minimum breaker calculation, panel triage, unpriced extras and dated federal 30C rules. Reference cards are utility and DOE program figures, not a price for this home. A licensed electrician and permit are needed; confirm local requirements and inspection. Pure rules and Decimal, no network, model or clock. Web and MCP share the free daily allowance.",
        "operationId": "ev_charger_install_cost",
        "parameters": [
          {
            "in": "query",
            "name": "level",
            "required": false,
            "schema": {
              "description": "Charging level; omit when unknown.",
              "enum": [
                "level1",
                "level2"
              ],
              "type": "string"
            }
          },
          {
            "in": "query",
            "name": "charger_amps",
            "required": false,
            "schema": {
              "description": "Rated or installer-set maximum charging current in amps.",
              "maximum": 80,
              "minimum": 6,
              "type": "number"
            }
          },
          {
            "in": "query",
            "name": "panel_amps",
            "required": false,
            "schema": {
              "description": "Panel/service rating, echoed only; a panel label alone cannot decide electrical changes or price the job.",
              "maximum": 400,
              "minimum": 30,
              "type": "integer"
            }
          },
          {
            "in": "query",
            "name": "spare_space",
            "required": false,
            "schema": {
              "description": "Compatible breaker space for a new circuit.",
              "enum": [
                "yes",
                "no"
              ],
              "type": "string"
            }
          },
          {
            "in": "query",
            "name": "capacity_check",
            "required": false,
            "schema": {
              "description": "Electrician load calculation result; not_done means not assessed.",
              "enum": [
                "enough",
                "not_enough",
                "not_done"
              ],
              "type": "string"
            }
          },
          {
            "in": "query",
            "name": "existing_circuit",
            "required": false,
            "schema": {
              "description": "Suitable dedicated circuit already at the parking spot.",
              "enum": [
                "yes",
                "no"
              ],
              "type": "string"
            }
          },
          {
            "in": "query",
            "name": "run_feet",
            "required": false,
            "schema": {
              "description": "Estimated routed panel-to-charger length, not straight-line distance.",
              "maximum": 500,
              "minimum": 1,
              "type": "number"
            }
          },
          {
            "allowEmptyValue": true,
            "description": " Send comma-separated codes; an empty value means none observed.",
            "explode": false,
            "in": "query",
            "name": "extras",
            "required": false,
            "schema": {
              "items": {
                "enum": [
                  "detached_garage",
                  "outdoor_run",
                  "finished_walls",
                  "trenching",
                  "pavement_cut",
                  "long_route"
                ],
                "type": "string"
              },
              "type": "array",
              "uniqueItems": true
            },
            "style": "form"
          },
          {
            "in": "query",
            "name": "installed_on",
            "required": false,
            "schema": {
              "description": "Placed-in-service date YYYY-MM-DD; omitted follows the after-2026-06-30 rule.",
              "format": "date",
              "type": "string"
            }
          }
        ],
        "responses": {
          "200": {
            "content": {
              "application/json": {
                "schema": {
                  "additionalProperties": true,
                  "properties": {
                    "link": {
                      "examples": [
                        "https://apitoolcalls.com/ev-charger-installation-cost/?utm_source=api&utm_medium=api"
                      ],
                      "format": "uri",
                      "type": "string"
                    },
                    "via": {
                      "const": "API Tool Calls",
                      "type": "string"
                    }
                  },
                  "required": [
                    "via",
                    "link"
                  ],
                  "type": "object"
                }
              }
            },
            "description": "Successful tool result with attribution."
          },
          "400": {
            "content": {
              "application/json": {
                "schema": {
                  "properties": {
                    "error": {
                      "properties": {
                        "code": {
                          "type": "integer"
                        },
                        "message": {
                          "type": "string"
                        }
                      },
                      "required": [
                        "message"
                      ],
                      "type": "object"
                    }
                  },
                  "required": [
                    "error"
                  ],
                  "type": "object"
                }
              }
            },
            "description": "Invalid tool arguments."
          },
          "429": {
            "content": {
              "application/json": {
                "schema": {
                  "properties": {
                    "error": {
                      "properties": {
                        "code": {
                          "type": "integer"
                        },
                        "message": {
                          "type": "string"
                        }
                      },
                      "required": [
                        "message"
                      ],
                      "type": "object"
                    }
                  },
                  "required": [
                    "error"
                  ],
                  "type": "object"
                }
              }
            },
            "description": "Free call limit reached; try again after the limit resets."
          }
        }
      }
    },
    "/api/fence-cost": {
      "get": {
        "description": "Estimate fence and gate costs from net non-gate length and gate widths. Returns calculated low, median bid and high bounds from exact City of Sunrise FL 2020 municipal bid rows, their scope and sources, and local permit guidance. Historical public bid observations are not current homeowner prices.",
        "operationId": "fence_cost",
        "parameters": [
          {
            "in": "query",
            "name": "net_length_ft",
            "required": true,
            "schema": {
              "description": "Net non-gate fence length in feet. Gate openings already excluded; do not subtract them again.",
              "maximum": 1000000000.0,
              "minimum": 0,
              "type": "number"
            }
          },
          {
            "in": "query",
            "name": "fence_type",
            "required": true,
            "schema": {
              "description": "Exact documented material and height row; no interpolation.",
              "enum": [
                "chain_link_4",
                "chain_link_6",
                "wood_6",
                "pvc_4",
                "pvc_6",
                "aluminum_4"
              ],
              "type": "string"
            }
          },
          {
            "in": "query",
            "name": "gate_type",
            "required": false,
            "schema": {
              "description": "Exact documented gate material and height for all entered widths; local_quote for unsupported gates.",
              "enum": [
                "chain_link_6",
                "wood_6",
                "pvc_6",
                "aluminum_4",
                "local_quote"
              ],
              "type": "string"
            }
          },
          {
            "allowEmptyValue": true,
            "description": "Each gate width in feet, not a gate count. GET: comma-separated widths; omitted means no gates.",
            "explode": false,
            "in": "query",
            "name": "gate_widths_ft",
            "required": false,
            "schema": {
              "description": "Each gate width in feet, not a gate count. GET: comma-separated widths; omitted means no gates.",
              "items": {
                "exclusiveMinimum": 0,
                "maximum": 1000000000.0,
                "type": "number"
              },
              "type": "array"
            },
            "style": "form"
          }
        ],
        "responses": {
          "200": {
            "content": {
              "application/json": {
                "schema": {
                  "additionalProperties": true,
                  "properties": {
                    "link": {
                      "examples": [
                        "https://apitoolcalls.com/fence-cost-calculator/?utm_source=api&utm_medium=api"
                      ],
                      "format": "uri",
                      "type": "string"
                    },
                    "via": {
                      "const": "API Tool Calls",
                      "type": "string"
                    }
                  },
                  "required": [
                    "via",
                    "link"
                  ],
                  "type": "object"
                }
              }
            },
            "description": "Successful tool result with attribution."
          },
          "400": {
            "content": {
              "application/json": {
                "schema": {
                  "properties": {
                    "error": {
                      "properties": {
                        "code": {
                          "type": "integer"
                        },
                        "message": {
                          "type": "string"
                        }
                      },
                      "required": [
                        "message"
                      ],
                      "type": "object"
                    }
                  },
                  "required": [
                    "error"
                  ],
                  "type": "object"
                }
              }
            },
            "description": "Invalid tool arguments."
          },
          "429": {
            "content": {
              "application/json": {
                "schema": {
                  "properties": {
                    "error": {
                      "properties": {
                        "code": {
                          "type": "integer"
                        },
                        "message": {
                          "type": "string"
                        }
                      },
                      "required": [
                        "message"
                      ],
                      "type": "object"
                    }
                  },
                  "required": [
                    "error"
                  ],
                  "type": "object"
                }
              }
            },
            "description": "Free call limit reached; try again after the limit resets."
          }
        }
      }
    },
    "/api/flooring-cost": {
      "get": {
        "description": "Estimate installed flooring costs for given room sizes. Returns national installed ranges (labor and materials), no labor-only figure, and no published typical figure. One call compares all eight materials using net room area, with hardwood order guidance, an unpriced prep checklist, a separate historical Census reference card and dated sources. Pure arithmetic, no network or model.",
        "operationId": "flooring_cost",
        "parameters": [
          {
            "description": "1–20 rooms, each 1–5,000 sq ft; total 10–10,000 sq ft. Use length_ft + width_ft OR area_sqft per room. Repeat this parameter for each room; use lengthxwidth in feet or an area in square feet.",
            "explode": true,
            "in": "query",
            "name": "room",
            "required": true,
            "schema": {
              "items": {
                "pattern": "^([0-9]+(?:\\.[0-9]+)?)(?:x([0-9]+(?:\\.[0-9]+)?))?$",
                "type": "string"
              },
              "maxItems": 20,
              "minItems": 1,
              "type": "array"
            },
            "style": "form"
          },
          {
            "description": "Optional labels; supply exactly one per room.",
            "explode": true,
            "in": "query",
            "name": "room_name",
            "required": false,
            "schema": {
              "items": {
                "description": "Optional room name, at most 40 characters.",
                "maxLength": 40,
                "type": "string"
              },
              "maxItems": 20,
              "type": "array"
            },
            "style": "form"
          },
          {
            "in": "query",
            "name": "material",
            "required": true,
            "schema": {
              "description": "Chosen installed material; one call also compares all eight materials.",
              "enum": [
                "carpet",
                "laminate",
                "vinyl_sheet",
                "vinyl_plank",
                "hardwood_solid",
                "hardwood_engineered",
                "tile_ceramic",
                "tile_porcelain"
              ],
              "type": "string"
            }
          },
          {
            "in": "query",
            "name": "layout",
            "required": false,
            "schema": {
              "default": "standard",
              "description": "Only changes the hardwood order amount: standard 5%, diagonal 10%. Installed estimate always uses net area.",
              "enum": [
                "standard",
                "diagonal"
              ],
              "type": "string"
            }
          }
        ],
        "responses": {
          "200": {
            "content": {
              "application/json": {
                "schema": {
                  "additionalProperties": true,
                  "properties": {
                    "link": {
                      "examples": [
                        "https://apitoolcalls.com/flooring-cost-calculator/?utm_source=api&utm_medium=api"
                      ],
                      "format": "uri",
                      "type": "string"
                    },
                    "via": {
                      "const": "API Tool Calls",
                      "type": "string"
                    }
                  },
                  "required": [
                    "via",
                    "link"
                  ],
                  "type": "object"
                }
              }
            },
            "description": "Successful tool result with attribution."
          },
          "400": {
            "content": {
              "application/json": {
                "schema": {
                  "properties": {
                    "error": {
                      "properties": {
                        "code": {
                          "type": "integer"
                        },
                        "message": {
                          "type": "string"
                        }
                      },
                      "required": [
                        "message"
                      ],
                      "type": "object"
                    }
                  },
                  "required": [
                    "error"
                  ],
                  "type": "object"
                }
              }
            },
            "description": "Invalid tool arguments."
          },
          "429": {
            "content": {
              "application/json": {
                "schema": {
                  "properties": {
                    "error": {
                      "properties": {
                        "code": {
                          "type": "integer"
                        },
                        "message": {
                          "type": "string"
                        }
                      },
                      "required": [
                        "message"
                      ],
                      "type": "object"
                    }
                  },
                  "required": [
                    "error"
                  ],
                  "type": "object"
                }
              }
            },
            "description": "Free call limit reached; try again after the limit resets."
          }
        }
      }
    },
    "/api/funeral-cost": {
      "get": {
        "description": "Show funeral consumer rights, national burial and cremation reference costs, and add up a funeral home's itemized prices. Returns FTC Funeral Rule rights first. Reference figures are NFDA 2023 national medians from an industry member survey, not local prices. Bundle cards apply only to services with viewing; direct services have no citable national bundle figure. The worksheet adds up the family's own itemized prices and keeps missing prices visible. Pure rules and Decimal money, no network or model. Web and MCP share the free daily allowance.",
        "operationId": "funeral_cost",
        "parameters": [
          {
            "in": "query",
            "name": "disposition",
            "required": true,
            "schema": {
              "enum": [
                "burial",
                "cremation"
              ],
              "type": "string"
            }
          },
          {
            "in": "query",
            "name": "service",
            "required": true,
            "schema": {
              "description": "Direct means immediate burial or direct cremation, without viewing.",
              "enum": [
                "viewing_ceremony",
                "direct"
              ],
              "type": "string"
            }
          },
          {
            "in": "query",
            "name": "vault",
            "required": false,
            "schema": {
              "description": "Burial only; omit when unknown.",
              "enum": [
                "yes",
                "no"
              ],
              "type": "string"
            }
          },
          {
            "in": "query",
            "name": "basic_services",
            "required": false,
            "schema": {
              "description": "Funeral director and staff basic services; always applies.",
              "maximum": 1000000,
              "minimum": 0,
              "type": "number"
            }
          },
          {
            "in": "query",
            "name": "transfer",
            "required": false,
            "schema": {
              "description": "Transfer of remains to the funeral home; always applies.",
              "maximum": 1000000,
              "minimum": 0,
              "type": "number"
            }
          },
          {
            "in": "query",
            "name": "embalming_preparation",
            "required": false,
            "schema": {
              "description": "Embalming or other preparation; requires service viewing_ceremony.",
              "maximum": 1000000,
              "minimum": 0,
              "type": "number"
            }
          },
          {
            "in": "query",
            "name": "viewing_facilities",
            "required": false,
            "schema": {
              "description": "Facilities and staff for viewing; requires service viewing_ceremony.",
              "maximum": 1000000,
              "minimum": 0,
              "type": "number"
            }
          },
          {
            "in": "query",
            "name": "ceremony_facilities",
            "required": false,
            "schema": {
              "description": "Facilities and staff for the ceremony; requires service viewing_ceremony.",
              "maximum": 1000000,
              "minimum": 0,
              "type": "number"
            }
          },
          {
            "in": "query",
            "name": "vehicles",
            "required": false,
            "schema": {
              "description": "Hearse and other vehicles; requires burial or service viewing_ceremony.",
              "maximum": 1000000,
              "minimum": 0,
              "type": "number"
            }
          },
          {
            "in": "query",
            "name": "casket",
            "required": false,
            "schema": {
              "description": "Casket (bought here or elsewhere); requires burial or cremation with service viewing_ceremony (purchase or rental).",
              "maximum": 1000000,
              "minimum": 0,
              "type": "number"
            }
          },
          {
            "in": "query",
            "name": "alternative_container",
            "required": false,
            "schema": {
              "description": "Alternative container; requires cremation.",
              "maximum": 1000000,
              "minimum": 0,
              "type": "number"
            }
          },
          {
            "in": "query",
            "name": "crematory_fee",
            "required": false,
            "schema": {
              "description": "Crematory fee; requires cremation.",
              "maximum": 1000000,
              "minimum": 0,
              "type": "number"
            }
          },
          {
            "in": "query",
            "name": "urn",
            "required": false,
            "schema": {
              "description": "Urn; requires cremation.",
              "maximum": 1000000,
              "minimum": 0,
              "type": "number"
            }
          },
          {
            "in": "query",
            "name": "vault_price",
            "required": false,
            "schema": {
              "description": "Outer burial container (vault or liner); requires burial with vault yes or unknown.",
              "maximum": 1000000,
              "minimum": 0,
              "type": "number"
            }
          },
          {
            "in": "query",
            "name": "plot",
            "required": false,
            "schema": {
              "description": "Cemetery plot or interment space; always applies.",
              "maximum": 1000000,
              "minimum": 0,
              "type": "number"
            }
          },
          {
            "in": "query",
            "name": "opening_closing",
            "required": false,
            "schema": {
              "description": "Opening and closing the grave or niche; always applies.",
              "maximum": 1000000,
              "minimum": 0,
              "type": "number"
            }
          },
          {
            "in": "query",
            "name": "marker",
            "required": false,
            "schema": {
              "description": "Marker or monument; always applies.",
              "maximum": 1000000,
              "minimum": 0,
              "type": "number"
            }
          },
          {
            "in": "query",
            "name": "cash_advances",
            "required": false,
            "schema": {
              "description": "Cash advances (death certificates, obituary notices, flowers, clergy, and similar); always applies.",
              "maximum": 1000000,
              "minimum": 0,
              "type": "number"
            }
          },
          {
            "in": "query",
            "name": "taxes",
            "required": false,
            "schema": {
              "description": "Taxes; always applies.",
              "maximum": 1000000,
              "minimum": 0,
              "type": "number"
            }
          }
        ],
        "responses": {
          "200": {
            "content": {
              "application/json": {
                "schema": {
                  "additionalProperties": true,
                  "properties": {
                    "link": {
                      "examples": [
                        "https://apitoolcalls.com/funeral-cost/?utm_source=api&utm_medium=api"
                      ],
                      "format": "uri",
                      "type": "string"
                    },
                    "via": {
                      "const": "API Tool Calls",
                      "type": "string"
                    }
                  },
                  "required": [
                    "via",
                    "link"
                  ],
                  "type": "object"
                }
              }
            },
            "description": "Successful tool result with attribution."
          },
          "400": {
            "content": {
              "application/json": {
                "schema": {
                  "properties": {
                    "error": {
                      "properties": {
                        "code": {
                          "type": "integer"
                        },
                        "message": {
                          "type": "string"
                        }
                      },
                      "required": [
                        "message"
                      ],
                      "type": "object"
                    }
                  },
                  "required": [
                    "error"
                  ],
                  "type": "object"
                }
              }
            },
            "description": "Invalid tool arguments."
          },
          "429": {
            "content": {
              "application/json": {
                "schema": {
                  "properties": {
                    "error": {
                      "properties": {
                        "code": {
                          "type": "integer"
                        },
                        "message": {
                          "type": "string"
                        }
                      },
                      "required": [
                        "message"
                      ],
                      "type": "object"
                    }
                  },
                  "required": [
                    "error"
                  ],
                  "type": "object"
                }
              }
            },
            "description": "Free call limit reached; try again after the limit resets."
          }
        }
      }
    },
    "/api/furnace_age": {
      "get": {
        "description": "Estimate furnace manufacture age from a confirmed Lennox legacy, Rheem or Nordyne serial format or a maker-confirmed date. Calculates age at your selected as-of date, keeps NAHB and InterNACHI life guidance separate, applies EPA age guidance and the DOE repair comparison to your own quotes, and returns separately labeled historical and modeled replacement references.",
        "operationId": "furnace_age",
        "parameters": [
          {
            "in": "query",
            "name": "as_of",
            "required": true,
            "schema": {
              "description": "Required real YYYY-MM-DD date for the age calculation.",
              "type": "string"
            }
          },
          {
            "in": "query",
            "name": "brand",
            "required": false,
            "schema": {
              "description": "Lennox, Rheem or Nordyne; other brands require maker/dealer confirmation.",
              "type": "string"
            }
          },
          {
            "in": "query",
            "name": "model",
            "required": false,
            "schema": {
              "description": "Model from the rating plate; retained for identification.",
              "type": "string"
            }
          },
          {
            "in": "query",
            "name": "serial",
            "required": false,
            "schema": {
              "description": "Rating-plate serial, supported nomenclature only.",
              "type": "string"
            }
          },
          {
            "in": "query",
            "name": "format_confirmed",
            "required": false,
            "schema": {
              "description": "True only after confirming this model/era uses the documented serial format.",
              "type": "boolean"
            }
          },
          {
            "in": "query",
            "name": "century",
            "required": false,
            "schema": {
              "description": "Maker/dealer-confirmed century; never inferred from age.",
              "enum": [
                1900,
                2000
              ],
              "type": "integer"
            }
          },
          {
            "in": "query",
            "name": "manufacture_date",
            "required": false,
            "schema": {
              "description": "Optional maker-confirmed YYYY-MM-DD manufacture date; overrides serial decoding, not installation date.",
              "type": "string"
            }
          },
          {
            "in": "query",
            "name": "repair_quote",
            "required": false,
            "schema": {
              "description": "Your own comparable repair quote in dollars; pair with replacement_quote.",
              "minimum": 0,
              "type": "number"
            }
          },
          {
            "in": "query",
            "name": "replacement_quote",
            "required": false,
            "schema": {
              "description": "Your own comparable replacement quote in dollars; pair with repair_quote.",
              "exclusiveMinimum": 0,
              "type": "number"
            }
          }
        ],
        "responses": {
          "200": {
            "content": {
              "application/json": {
                "schema": {
                  "additionalProperties": true,
                  "properties": {
                    "link": {
                      "examples": [
                        "https://apitoolcalls.com/furnace-age/?utm_source=api&utm_medium=api"
                      ],
                      "format": "uri",
                      "type": "string"
                    },
                    "via": {
                      "const": "API Tool Calls",
                      "type": "string"
                    }
                  },
                  "required": [
                    "via",
                    "link"
                  ],
                  "type": "object"
                }
              }
            },
            "description": "Successful tool result with attribution."
          },
          "400": {
            "content": {
              "application/json": {
                "schema": {
                  "properties": {
                    "error": {
                      "properties": {
                        "code": {
                          "type": "integer"
                        },
                        "message": {
                          "type": "string"
                        }
                      },
                      "required": [
                        "message"
                      ],
                      "type": "object"
                    }
                  },
                  "required": [
                    "error"
                  ],
                  "type": "object"
                }
              }
            },
            "description": "Invalid tool arguments."
          },
          "429": {
            "content": {
              "application/json": {
                "schema": {
                  "properties": {
                    "error": {
                      "properties": {
                        "code": {
                          "type": "integer"
                        },
                        "message": {
                          "type": "string"
                        }
                      },
                      "required": [
                        "message"
                      ],
                      "type": "object"
                    }
                  },
                  "required": [
                    "error"
                  ],
                  "type": "object"
                }
              }
            },
            "description": "Free call limit reached; try again after the limit resets."
          }
        }
      }
    },
    "/api/kitchen-remodel-cost": {
      "get": {
        "description": "Estimate a kitchen remodel budget from kitchen size and finishes. Size and scope return a national planning estimate range rounded to the nearest 100 dollars, with no published typical figure, two separate dated reference cards and sources. The result has no line items or labor/material split: the published bands include both, and no public source we trust splits them for a typical kitchen. Pure arithmetic, no network or model.",
        "operationId": "kitchen_remodel_cost",
        "parameters": [
          {
            "in": "query",
            "name": "area_sqft",
            "required": false,
            "schema": {
              "description": "Kitchen floor area in square feet, 20–1,000. Use area OR length and width.",
              "maximum": 1000,
              "minimum": 20,
              "type": "number"
            }
          },
          {
            "in": "query",
            "name": "length_ft",
            "required": false,
            "schema": {
              "description": "Kitchen length in feet; requires width_ft instead of area_sqft. Product must be 20–1,000 sq ft.",
              "exclusiveMinimum": 0,
              "type": "number"
            }
          },
          {
            "in": "query",
            "name": "width_ft",
            "required": false,
            "schema": {
              "description": "Kitchen width in feet; requires length_ft instead of area_sqft. Product must be 20–1,000 sq ft.",
              "exclusiveMinimum": 0,
              "type": "number"
            }
          },
          {
            "in": "query",
            "name": "scope",
            "required": true,
            "schema": {
              "description": "partial: may include DIY work; full: same layout; layout_change: layout changes / high-end. Bands include labor and materials.",
              "enum": [
                "partial",
                "full",
                "layout_change"
              ],
              "type": "string"
            }
          }
        ],
        "responses": {
          "200": {
            "content": {
              "application/json": {
                "schema": {
                  "additionalProperties": true,
                  "properties": {
                    "link": {
                      "examples": [
                        "https://apitoolcalls.com/kitchen-remodel-cost/?utm_source=api&utm_medium=api"
                      ],
                      "format": "uri",
                      "type": "string"
                    },
                    "via": {
                      "const": "API Tool Calls",
                      "type": "string"
                    }
                  },
                  "required": [
                    "via",
                    "link"
                  ],
                  "type": "object"
                }
              }
            },
            "description": "Successful tool result with attribution."
          },
          "400": {
            "content": {
              "application/json": {
                "schema": {
                  "properties": {
                    "error": {
                      "properties": {
                        "code": {
                          "type": "integer"
                        },
                        "message": {
                          "type": "string"
                        }
                      },
                      "required": [
                        "message"
                      ],
                      "type": "object"
                    }
                  },
                  "required": [
                    "error"
                  ],
                  "type": "object"
                }
              }
            },
            "description": "Invalid tool arguments."
          },
          "429": {
            "content": {
              "application/json": {
                "schema": {
                  "properties": {
                    "error": {
                      "properties": {
                        "code": {
                          "type": "integer"
                        },
                        "message": {
                          "type": "string"
                        }
                      },
                      "required": [
                        "message"
                      ],
                      "type": "object"
                    }
                  },
                  "required": [
                    "error"
                  ],
                  "type": "object"
                }
              }
            },
            "description": "Free call limit reached; try again after the limit resets."
          }
        }
      }
    },
    "/api/markdown": {
      "get": {
        "description": "Read one public HTML page as clean Markdown with title, headings, lists, tables and absolute links. No logins, paywalls or JavaScript rendering; 2 MB HTML limit.",
        "operationId": "page_to_markdown",
        "parameters": [
          {
            "in": "query",
            "name": "url",
            "required": true,
            "schema": {
              "description": "Public http or https page URL.",
              "type": "string"
            }
          }
        ],
        "responses": {
          "200": {
            "content": {
              "application/json": {
                "schema": {
                  "additionalProperties": true,
                  "properties": {
                    "link": {
                      "examples": [
                        "https://apitoolcalls.com/markdown/?utm_source=api&utm_medium=api"
                      ],
                      "format": "uri",
                      "type": "string"
                    },
                    "via": {
                      "const": "API Tool Calls",
                      "type": "string"
                    }
                  },
                  "required": [
                    "via",
                    "link"
                  ],
                  "type": "object"
                }
              }
            },
            "description": "Successful tool result with attribution."
          },
          "400": {
            "content": {
              "application/json": {
                "schema": {
                  "properties": {
                    "error": {
                      "properties": {
                        "code": {
                          "type": "integer"
                        },
                        "message": {
                          "type": "string"
                        }
                      },
                      "required": [
                        "message"
                      ],
                      "type": "object"
                    }
                  },
                  "required": [
                    "error"
                  ],
                  "type": "object"
                }
              }
            },
            "description": "Invalid tool arguments."
          },
          "429": {
            "content": {
              "application/json": {
                "schema": {
                  "properties": {
                    "error": {
                      "properties": {
                        "code": {
                          "type": "integer"
                        },
                        "message": {
                          "type": "string"
                        }
                      },
                      "required": [
                        "message"
                      ],
                      "type": "object"
                    }
                  },
                  "required": [
                    "error"
                  ],
                  "type": "object"
                }
              }
            },
            "description": "Free call limit reached; try again after the limit resets."
          }
        }
      }
    },
    "/api/page-check": {
      "get": {
        "description": "Check whether one public HTML page shows content. Returns working, suspect or broken, findings with reasons and bounded snippets, status, final URL and text length. No JavaScript rendering; 10 seconds overall, 2 MB HTML. Public HTTP/HTTPS ports 80/443 only.",
        "operationId": "page_check",
        "parameters": [
          {
            "in": "query",
            "name": "url",
            "required": true,
            "schema": {
              "description": "Public http or https page URL.",
              "type": "string"
            }
          }
        ],
        "responses": {
          "200": {
            "content": {
              "application/json": {
                "schema": {
                  "additionalProperties": true,
                  "properties": {
                    "link": {
                      "examples": [
                        "https://apitoolcalls.com/page-checker/?utm_source=api&utm_medium=api"
                      ],
                      "format": "uri",
                      "type": "string"
                    },
                    "via": {
                      "const": "API Tool Calls",
                      "type": "string"
                    }
                  },
                  "required": [
                    "via",
                    "link"
                  ],
                  "type": "object"
                }
              }
            },
            "description": "Successful tool result with attribution."
          },
          "400": {
            "content": {
              "application/json": {
                "schema": {
                  "properties": {
                    "error": {
                      "properties": {
                        "code": {
                          "type": "integer"
                        },
                        "message": {
                          "type": "string"
                        }
                      },
                      "required": [
                        "message"
                      ],
                      "type": "object"
                    }
                  },
                  "required": [
                    "error"
                  ],
                  "type": "object"
                }
              }
            },
            "description": "Invalid tool arguments."
          },
          "429": {
            "content": {
              "application/json": {
                "schema": {
                  "properties": {
                    "error": {
                      "properties": {
                        "code": {
                          "type": "integer"
                        },
                        "message": {
                          "type": "string"
                        }
                      },
                      "required": [
                        "message"
                      ],
                      "type": "object"
                    }
                  },
                  "required": [
                    "error"
                  ],
                  "type": "object"
                }
              }
            },
            "description": "Free call limit reached; try again after the limit resets."
          }
        }
      }
    },
    "/api/pickleball-court-cost": {
      "get": {
        "description": "Check whether a pickleball court fits a space and show public court project costs. Returns rulebook footprints and one-court fit in either orientation, separate cost cards, and unpriced scope. Cost cards are public city project and planning figures, not a price for this court. Pure rules and Decimal, no network, model or clock. Web and MCP share the free daily allowance.",
        "operationId": "pickleball_court_cost",
        "parameters": [
          {
            "in": "query",
            "name": "courts",
            "required": false,
            "schema": {
              "description": "Court count; omitted uses 1 for math, marked assumed.",
              "maximum": 4,
              "minimum": 1,
              "type": "integer"
            }
          },
          {
            "in": "query",
            "name": "size",
            "required": false,
            "schema": {
              "description": "Omit when unknown.",
              "enum": [
                "minimum",
                "recommended"
              ],
              "type": "string"
            }
          },
          {
            "in": "query",
            "name": "base",
            "required": false,
            "schema": {
              "description": "Omit when unknown.",
              "enum": [
                "new_concrete",
                "new_asphalt",
                "existing_slab"
              ],
              "type": "string"
            }
          },
          {
            "in": "query",
            "name": "finish",
            "required": false,
            "schema": {
              "description": "Omit when unknown.",
              "enum": [
                "acrylic",
                "tiles"
              ],
              "type": "string"
            }
          },
          {
            "in": "query",
            "name": "fence",
            "required": false,
            "schema": {
              "description": "Omit when unknown.",
              "enum": [
                "yes",
                "no"
              ],
              "type": "string"
            }
          },
          {
            "in": "query",
            "name": "lights",
            "required": false,
            "schema": {
              "description": "Omit when unknown.",
              "enum": [
                "yes",
                "no"
              ],
              "type": "string"
            }
          },
          {
            "in": "query",
            "name": "space_length_ft",
            "required": false,
            "schema": {
              "description": "Open, level space in feet; provide both length and width or neither.",
              "maximum": 1000,
              "minimum": 1,
              "type": "number"
            }
          },
          {
            "in": "query",
            "name": "space_width_ft",
            "required": false,
            "schema": {
              "description": "Open, level space in feet; provide both length and width or neither.",
              "maximum": 1000,
              "minimum": 1,
              "type": "number"
            }
          }
        ],
        "responses": {
          "200": {
            "content": {
              "application/json": {
                "schema": {
                  "additionalProperties": true,
                  "properties": {
                    "link": {
                      "examples": [
                        "https://apitoolcalls.com/pickleball-court-cost/?utm_source=api&utm_medium=api"
                      ],
                      "format": "uri",
                      "type": "string"
                    },
                    "via": {
                      "const": "API Tool Calls",
                      "type": "string"
                    }
                  },
                  "required": [
                    "via",
                    "link"
                  ],
                  "type": "object"
                }
              }
            },
            "description": "Successful tool result with attribution."
          },
          "400": {
            "content": {
              "application/json": {
                "schema": {
                  "properties": {
                    "error": {
                      "properties": {
                        "code": {
                          "type": "integer"
                        },
                        "message": {
                          "type": "string"
                        }
                      },
                      "required": [
                        "message"
                      ],
                      "type": "object"
                    }
                  },
                  "required": [
                    "error"
                  ],
                  "type": "object"
                }
              }
            },
            "description": "Invalid tool arguments."
          },
          "429": {
            "content": {
              "application/json": {
                "schema": {
                  "properties": {
                    "error": {
                      "properties": {
                        "code": {
                          "type": "integer"
                        },
                        "message": {
                          "type": "string"
                        }
                      },
                      "required": [
                        "message"
                      ],
                      "type": "object"
                    }
                  },
                  "required": [
                    "error"
                  ],
                  "type": "object"
                }
              }
            },
            "description": "Free call limit reached; try again after the limit resets."
          }
        }
      }
    },
    "/api/pole-barn-cost": {
      "get": {
        "description": "Estimate pole barn construction costs for given dimensions, optionally finished as living space. Returns national construction ranges for the building only, with no published typical figure. Site work/slab/doors/height/permits are not priced. use=residential adds the separate living-space build-out band with an open top and a combined planning estimate. Includes an unpriced checklist, two separate unscaled reference cards and dated sources. Pure arithmetic, no network or model.",
        "operationId": "pole_barn_cost",
        "parameters": [
          {
            "in": "query",
            "name": "width",
            "required": true,
            "schema": {
              "description": "Required width in feet; footprint must be 100–10,000 sq ft.",
              "maximum": 200,
              "minimum": 8,
              "type": "number"
            }
          },
          {
            "in": "query",
            "name": "length",
            "required": true,
            "schema": {
              "description": "Required length in feet; footprint must be 100–10,000 sq ft.",
              "maximum": 200,
              "minimum": 8,
              "type": "number"
            }
          },
          {
            "in": "query",
            "name": "use",
            "required": false,
            "schema": {
              "default": "shell",
              "description": "shell: building only. residential: add the separate living-space build-out band.",
              "enum": [
                "shell",
                "residential"
              ],
              "type": "string"
            }
          }
        ],
        "responses": {
          "200": {
            "content": {
              "application/json": {
                "schema": {
                  "additionalProperties": true,
                  "properties": {
                    "link": {
                      "examples": [
                        "https://apitoolcalls.com/pole-barn-cost/?utm_source=api&utm_medium=api"
                      ],
                      "format": "uri",
                      "type": "string"
                    },
                    "via": {
                      "const": "API Tool Calls",
                      "type": "string"
                    }
                  },
                  "required": [
                    "via",
                    "link"
                  ],
                  "type": "object"
                }
              }
            },
            "description": "Successful tool result with attribution."
          },
          "400": {
            "content": {
              "application/json": {
                "schema": {
                  "properties": {
                    "error": {
                      "properties": {
                        "code": {
                          "type": "integer"
                        },
                        "message": {
                          "type": "string"
                        }
                      },
                      "required": [
                        "message"
                      ],
                      "type": "object"
                    }
                  },
                  "required": [
                    "error"
                  ],
                  "type": "object"
                }
              }
            },
            "description": "Invalid tool arguments."
          },
          "429": {
            "content": {
              "application/json": {
                "schema": {
                  "properties": {
                    "error": {
                      "properties": {
                        "code": {
                          "type": "integer"
                        },
                        "message": {
                          "type": "string"
                        }
                      },
                      "required": [
                        "message"
                      ],
                      "type": "object"
                    }
                  },
                  "required": [
                    "error"
                  ],
                  "type": "object"
                }
              }
            },
            "description": "Free call limit reached; try again after the limit resets."
          }
        }
      }
    },
    "/api/proofread": {
      "post": {
        "description": "Fix spelling, grammar, punctuation and word choice while keeping meaning and voice. Text goes to a language model: with no key, a small shared daily allowance (Google Gemini); with an X-OpenRouter-Key header, the caller's OpenRouter key.",
        "operationId": "proofread",
        "parameters": [
          {
            "description": "Needs the caller's OpenRouter key in the X-OpenRouter-Key header.",
            "in": "header",
            "name": "X-OpenRouter-Key",
            "required": true,
            "schema": {
              "maxLength": 200,
              "minLength": 1,
              "type": "string"
            }
          }
        ],
        "requestBody": {
          "content": {
            "application/json": {
              "schema": {
                "additionalProperties": false,
                "properties": {
                  "text": {
                    "description": "Text to proofread, at most 2,000 words.",
                    "maxLength": 15000,
                    "minLength": 1,
                    "type": "string"
                  }
                },
                "required": [
                  "text"
                ],
                "type": "object"
              }
            }
          },
          "required": true
        },
        "responses": {
          "200": {
            "content": {
              "application/json": {
                "schema": {
                  "additionalProperties": true,
                  "properties": {
                    "link": {
                      "examples": [
                        "https://apitoolcalls.com/proofreader/?utm_source=api&utm_medium=api"
                      ],
                      "format": "uri",
                      "type": "string"
                    },
                    "via": {
                      "const": "API Tool Calls",
                      "type": "string"
                    }
                  },
                  "required": [
                    "via",
                    "link"
                  ],
                  "type": "object"
                }
              }
            },
            "description": "Successful tool result with attribution."
          },
          "400": {
            "content": {
              "application/json": {
                "schema": {
                  "properties": {
                    "error": {
                      "properties": {
                        "code": {
                          "type": "integer"
                        },
                        "message": {
                          "type": "string"
                        }
                      },
                      "required": [
                        "message"
                      ],
                      "type": "object"
                    }
                  },
                  "required": [
                    "error"
                  ],
                  "type": "object"
                }
              }
            },
            "description": "Invalid tool arguments."
          },
          "401": {
            "content": {
              "application/json": {
                "schema": {
                  "properties": {
                    "error": {
                      "properties": {
                        "code": {
                          "type": "integer"
                        },
                        "message": {
                          "type": "string"
                        }
                      },
                      "required": [
                        "message"
                      ],
                      "type": "object"
                    }
                  },
                  "required": [
                    "error"
                  ],
                  "type": "object"
                }
              }
            },
            "description": "OpenRouter key missing or rejected."
          },
          "429": {
            "content": {
              "application/json": {
                "schema": {
                  "properties": {
                    "error": {
                      "properties": {
                        "code": {
                          "type": "integer"
                        },
                        "message": {
                          "type": "string"
                        }
                      },
                      "required": [
                        "message"
                      ],
                      "type": "object"
                    }
                  },
                  "required": [
                    "error"
                  ],
                  "type": "object"
                }
              }
            },
            "description": "Free call limit reached; try again after the limit resets."
          }
        }
      }
    },
    "/api/recall-check": {
      "get": {
        "description": "Search local U.S. CPSC data for up to 10 recall notices that may match — check the notice. updated_at is when this local copy of CPSC data was last refreshed (UTC, ISO 8601), not a recall date; each match's date is its notice date. May not cover every batch or country; read the notice. No CPSC endorsement.",
        "operationId": "recall_check",
        "parameters": [
          {
            "in": "query",
            "name": "query",
            "required": true,
            "schema": {
              "description": "Product name, brand, model number or UPC.",
              "maxLength": 500,
              "minLength": 1,
              "type": "string"
            }
          }
        ],
        "responses": {
          "200": {
            "content": {
              "application/json": {
                "schema": {
                  "additionalProperties": true,
                  "properties": {
                    "link": {
                      "examples": [
                        "https://apitoolcalls.com/recall-check/?utm_source=api&utm_medium=api"
                      ],
                      "format": "uri",
                      "type": "string"
                    },
                    "via": {
                      "const": "API Tool Calls",
                      "type": "string"
                    }
                  },
                  "required": [
                    "via",
                    "link"
                  ],
                  "type": "object"
                }
              }
            },
            "description": "Successful tool result with attribution."
          },
          "400": {
            "content": {
              "application/json": {
                "schema": {
                  "properties": {
                    "error": {
                      "properties": {
                        "code": {
                          "type": "integer"
                        },
                        "message": {
                          "type": "string"
                        }
                      },
                      "required": [
                        "message"
                      ],
                      "type": "object"
                    }
                  },
                  "required": [
                    "error"
                  ],
                  "type": "object"
                }
              }
            },
            "description": "Invalid tool arguments."
          },
          "429": {
            "content": {
              "application/json": {
                "schema": {
                  "properties": {
                    "error": {
                      "properties": {
                        "code": {
                          "type": "integer"
                        },
                        "message": {
                          "type": "string"
                        }
                      },
                      "required": [
                        "message"
                      ],
                      "type": "object"
                    }
                  },
                  "required": [
                    "error"
                  ],
                  "type": "object"
                }
              }
            },
            "description": "Free call limit reached; try again after the limit resets."
          }
        }
      }
    },
    "/api/resume": {
      "post": {
        "description": "Compare résumé skills with Columbus, Ohio job postings, or with one pasted job description. Résumé is not stored.",
        "operationId": "resume_gap",
        "requestBody": {
          "content": {
            "application/json": {
              "schema": {
                "examples": [
                  {
                    "job_ad": "Data analyst. Required: SQL, Python and Tableau.",
                    "resume_text": "Data analyst with SQL and Excel experience building weekly reports."
                  }
                ],
                "properties": {
                  "family": {
                    "description": "Job family for the Columbus postings check; required unless job_ad is given.",
                    "enum": [
                      "data analyst",
                      "software engineer",
                      "project manager"
                    ],
                    "type": "string"
                  },
                  "job_ad": {
                    "description": "Plain text of one job description; lists the skills it names that the résumé shows and does not show.",
                    "maxLength": 60000,
                    "minLength": 1,
                    "type": "string"
                  },
                  "resume_text": {
                    "description": "Plain text of the résumé.",
                    "maxLength": 50000,
                    "minLength": 50,
                    "type": "string"
                  }
                },
                "required": [
                  "resume_text"
                ],
                "type": "object"
              }
            }
          },
          "required": true
        },
        "responses": {
          "200": {
            "content": {
              "application/json": {
                "schema": {
                  "additionalProperties": true,
                  "properties": {
                    "link": {
                      "examples": [
                        "https://apitoolcalls.com/resume/?utm_source=api&utm_medium=api"
                      ],
                      "format": "uri",
                      "type": "string"
                    },
                    "via": {
                      "const": "API Tool Calls",
                      "type": "string"
                    }
                  },
                  "required": [
                    "via",
                    "link"
                  ],
                  "type": "object"
                }
              }
            },
            "description": "Successful tool result with attribution."
          },
          "400": {
            "content": {
              "application/json": {
                "schema": {
                  "properties": {
                    "error": {
                      "properties": {
                        "code": {
                          "type": "integer"
                        },
                        "message": {
                          "type": "string"
                        }
                      },
                      "required": [
                        "message"
                      ],
                      "type": "object"
                    }
                  },
                  "required": [
                    "error"
                  ],
                  "type": "object"
                }
              }
            },
            "description": "Invalid tool arguments."
          },
          "429": {
            "content": {
              "application/json": {
                "schema": {
                  "properties": {
                    "error": {
                      "properties": {
                        "code": {
                          "type": "integer"
                        },
                        "message": {
                          "type": "string"
                        }
                      },
                      "required": [
                        "message"
                      ],
                      "type": "object"
                    }
                  },
                  "required": [
                    "error"
                  ],
                  "type": "object"
                }
              }
            },
            "description": "Free call limit reached; try again after the limit resets."
          }
        }
      }
    },
    "/api/roof_replacement_cost": {
      "get": {
        "description": "Estimate sloped roof area and roofing squares from a measured footprint and pitch. Calculates optional shingle purchase allowance, historical asphalt installation and matched removal scenarios, verified historical standing-seam bid endpoints, and a benchmark subtotal with your separately quoted extras; missing local prices remain get a local quote.",
        "operationId": "roof_replacement_cost",
        "parameters": [
          {
            "in": "query",
            "name": "footprint_sqft",
            "required": false,
            "schema": {
              "description": "Horizontal roof projection including overhangs, in square feet for footprint_sqft, feet for length_ft/width_ft. Provide footprint OR both dimensions.",
              "exclusiveMinimum": 0,
              "type": "number"
            }
          },
          {
            "in": "query",
            "name": "length_ft",
            "required": false,
            "schema": {
              "description": "Horizontal roof projection including overhangs, in square feet for footprint_sqft, feet for length_ft/width_ft. Provide footprint OR both dimensions.",
              "exclusiveMinimum": 0,
              "type": "number"
            }
          },
          {
            "in": "query",
            "name": "width_ft",
            "required": false,
            "schema": {
              "description": "Horizontal roof projection including overhangs, in square feet for footprint_sqft, feet for length_ft/width_ft. Provide footprint OR both dimensions.",
              "exclusiveMinimum": 0,
              "type": "number"
            }
          },
          {
            "in": "query",
            "name": "pitch",
            "required": true,
            "schema": {
              "description": "Rise p in inches per 12 inches horizontal run; geometry only.",
              "minimum": 0,
              "type": "number"
            }
          },
          {
            "in": "query",
            "name": "material",
            "required": true,
            "schema": {
              "enum": [
                "asphalt",
                "standing_seam",
                "tile"
              ],
              "type": "string"
            }
          },
          {
            "in": "query",
            "name": "layers",
            "required": false,
            "schema": {
              "description": "Asphalt removal layers; 0 means no removal. Metal rates do not vary with layers; only 0 or 1 supported.",
              "enum": [
                0,
                1,
                2,
                3
              ],
              "type": "integer"
            }
          },
          {
            "in": "query",
            "name": "waste_percent",
            "required": false,
            "schema": {
              "description": "Optional asphalt purchase allowance only. Not applied to installed bid rates. No sourced midpoint/default.",
              "maximum": 15,
              "minimum": 10,
              "type": "number"
            }
          },
          {
            "in": "query",
            "name": "quoted_extras",
            "required": false,
            "schema": {
              "description": "Your own total dollars quote for separate items excluded from the installation/removal scope; no assumed surcharge.",
              "minimum": 0,
              "type": "number"
            }
          }
        ],
        "responses": {
          "200": {
            "content": {
              "application/json": {
                "schema": {
                  "additionalProperties": true,
                  "properties": {
                    "link": {
                      "examples": [
                        "https://apitoolcalls.com/roof-replacement-cost/?utm_source=api&utm_medium=api"
                      ],
                      "format": "uri",
                      "type": "string"
                    },
                    "via": {
                      "const": "API Tool Calls",
                      "type": "string"
                    }
                  },
                  "required": [
                    "via",
                    "link"
                  ],
                  "type": "object"
                }
              }
            },
            "description": "Successful tool result with attribution."
          },
          "400": {
            "content": {
              "application/json": {
                "schema": {
                  "properties": {
                    "error": {
                      "properties": {
                        "code": {
                          "type": "integer"
                        },
                        "message": {
                          "type": "string"
                        }
                      },
                      "required": [
                        "message"
                      ],
                      "type": "object"
                    }
                  },
                  "required": [
                    "error"
                  ],
                  "type": "object"
                }
              }
            },
            "description": "Invalid tool arguments."
          },
          "429": {
            "content": {
              "application/json": {
                "schema": {
                  "properties": {
                    "error": {
                      "properties": {
                        "code": {
                          "type": "integer"
                        },
                        "message": {
                          "type": "string"
                        }
                      },
                      "required": [
                        "message"
                      ],
                      "type": "object"
                    }
                  },
                  "required": [
                    "error"
                  ],
                  "type": "object"
                }
              }
            },
            "description": "Free call limit reached; try again after the limit resets."
          }
        }
      }
    },
    "/api/run-loop": {
      "post": {
        "description": "Make walking/running loops that start and end at one point, each within 3% of the target distance. Returns Google Maps links and an encoded polyline. Routes and map data © OpenStreetMap contributors (ODbL); each result credits the routing service that made it.",
        "operationId": "make_run_loop",
        "requestBody": {
          "content": {
            "application/json": {
              "schema": {
                "additionalProperties": false,
                "properties": {
                  "avoid_crime": {
                    "default": false,
                    "description": "Steer round blocks with more reported crime than the start (city police reports, last 12 months; San Francisco and Seattle for now). Not a guarantee.",
                    "type": "boolean"
                  },
                  "count": {
                    "default": 3,
                    "maximum": 3,
                    "minimum": 1,
                    "type": "integer"
                  },
                  "direction": {
                    "default": "any",
                    "enum": [
                      "any",
                      "n",
                      "e",
                      "s",
                      "w"
                    ],
                    "type": "string"
                  },
                  "distance_km": {
                    "maximum": 42.2,
                    "minimum": 1,
                    "type": "number"
                  },
                  "prefer": {
                    "default": [],
                    "items": {
                      "enum": [
                        "quiet",
                        "trails",
                        "flat"
                      ],
                      "type": "string"
                    },
                    "maxItems": 3,
                    "type": "array",
                    "uniqueItems": true
                  },
                  "start": {
                    "oneOf": [
                      {
                        "minLength": 1,
                        "type": "string"
                      },
                      {
                        "additionalProperties": false,
                        "properties": {
                          "lat": {
                            "maximum": 90,
                            "minimum": -90,
                            "type": "number"
                          },
                          "lon": {
                            "maximum": 180,
                            "minimum": -180,
                            "type": "number"
                          }
                        },
                        "required": [
                          "lat",
                          "lon"
                        ],
                        "type": "object"
                      }
                    ]
                  },
                  "stops": {
                    "items": {
                      "additionalProperties": false,
                      "properties": {
                        "lat": {
                          "maximum": 90,
                          "minimum": -90,
                          "type": "number"
                        },
                        "lon": {
                          "maximum": 180,
                          "minimum": -180,
                          "type": "number"
                        }
                      },
                      "required": [
                        "lat",
                        "lon"
                      ],
                      "type": "object"
                    },
                    "maxItems": 9,
                    "minItems": 1,
                    "type": "array"
                  },
                  "via": {
                    "oneOf": [
                      {
                        "minLength": 1,
                        "type": "string"
                      },
                      {
                        "additionalProperties": false,
                        "properties": {
                          "lat": {
                            "maximum": 90,
                            "minimum": -90,
                            "type": "number"
                          },
                          "lon": {
                            "maximum": 180,
                            "minimum": -180,
                            "type": "number"
                          }
                        },
                        "required": [
                          "lat",
                          "lon"
                        ],
                        "type": "object"
                      }
                    ]
                  }
                },
                "required": [
                  "start",
                  "distance_km"
                ],
                "type": "object"
              }
            }
          },
          "required": true
        },
        "responses": {
          "200": {
            "content": {
              "application/json": {
                "schema": {
                  "additionalProperties": true,
                  "properties": {
                    "link": {
                      "examples": [
                        "https://apitoolcalls.com/run-loop/?utm_source=api&utm_medium=api"
                      ],
                      "format": "uri",
                      "type": "string"
                    },
                    "via": {
                      "const": "API Tool Calls",
                      "type": "string"
                    }
                  },
                  "required": [
                    "via",
                    "link"
                  ],
                  "type": "object"
                }
              }
            },
            "description": "Successful tool result with attribution."
          },
          "400": {
            "content": {
              "application/json": {
                "schema": {
                  "properties": {
                    "error": {
                      "properties": {
                        "code": {
                          "type": "integer"
                        },
                        "message": {
                          "type": "string"
                        }
                      },
                      "required": [
                        "message"
                      ],
                      "type": "object"
                    }
                  },
                  "required": [
                    "error"
                  ],
                  "type": "object"
                }
              }
            },
            "description": "Invalid tool arguments."
          },
          "429": {
            "content": {
              "application/json": {
                "schema": {
                  "properties": {
                    "error": {
                      "properties": {
                        "code": {
                          "type": "integer"
                        },
                        "message": {
                          "type": "string"
                        }
                      },
                      "required": [
                        "message"
                      ],
                      "type": "object"
                    }
                  },
                  "required": [
                    "error"
                  ],
                  "type": "object"
                }
              }
            },
            "description": "Free call limit reached; try again after the limit resets."
          }
        }
      }
    },
    "/api/seo-check": {
      "get": {
        "description": "Check one public HTML page with fixed SEO rules. Returns schema 1, score, strengths, ranked fixes and facts. No JavaScript rendering; 10 seconds overall, 2 MB HTML and at most 20 links. Public HTTP/HTTPS ports 80/443 only.",
        "operationId": "seo_check",
        "parameters": [
          {
            "in": "query",
            "name": "url",
            "required": true,
            "schema": {
              "description": "Public http or https page URL.",
              "type": "string"
            }
          }
        ],
        "responses": {
          "200": {
            "content": {
              "application/json": {
                "schema": {
                  "additionalProperties": true,
                  "properties": {
                    "link": {
                      "examples": [
                        "https://apitoolcalls.com/seo-checker/?utm_source=api&utm_medium=api"
                      ],
                      "format": "uri",
                      "type": "string"
                    },
                    "via": {
                      "const": "API Tool Calls",
                      "type": "string"
                    }
                  },
                  "required": [
                    "via",
                    "link"
                  ],
                  "type": "object"
                }
              }
            },
            "description": "Successful tool result with attribution."
          },
          "400": {
            "content": {
              "application/json": {
                "schema": {
                  "properties": {
                    "error": {
                      "properties": {
                        "code": {
                          "type": "integer"
                        },
                        "message": {
                          "type": "string"
                        }
                      },
                      "required": [
                        "message"
                      ],
                      "type": "object"
                    }
                  },
                  "required": [
                    "error"
                  ],
                  "type": "object"
                }
              }
            },
            "description": "Invalid tool arguments."
          },
          "429": {
            "content": {
              "application/json": {
                "schema": {
                  "properties": {
                    "error": {
                      "properties": {
                        "code": {
                          "type": "integer"
                        },
                        "message": {
                          "type": "string"
                        }
                      },
                      "required": [
                        "message"
                      ],
                      "type": "object"
                    }
                  },
                  "required": [
                    "error"
                  ],
                  "type": "object"
                }
              }
            },
            "description": "Free call limit reached; try again after the limit resets."
          }
        }
      }
    },
    "/api/transcript": {
      "get": {
        "description": "Read public YouTube captions as timestamped plain text. Captions only, no video or audio.",
        "operationId": "get_transcript",
        "parameters": [
          {
            "in": "query",
            "name": "url",
            "required": true,
            "schema": {
              "description": "YouTube video URL or an 11-character video id.",
              "type": "string"
            }
          },
          {
            "in": "query",
            "name": "lang",
            "required": false,
            "schema": {
              "default": "en",
              "description": "Preferred caption language; falls back to English, then any available track.",
              "type": "string"
            }
          }
        ],
        "responses": {
          "200": {
            "content": {
              "application/json": {
                "schema": {
                  "additionalProperties": true,
                  "properties": {
                    "link": {
                      "examples": [
                        "https://apitoolcalls.com/transcript/?utm_source=api&utm_medium=api"
                      ],
                      "format": "uri",
                      "type": "string"
                    },
                    "via": {
                      "const": "API Tool Calls",
                      "type": "string"
                    }
                  },
                  "required": [
                    "via",
                    "link"
                  ],
                  "type": "object"
                }
              }
            },
            "description": "Successful tool result with attribution."
          },
          "400": {
            "content": {
              "application/json": {
                "schema": {
                  "properties": {
                    "error": {
                      "properties": {
                        "code": {
                          "type": "integer"
                        },
                        "message": {
                          "type": "string"
                        }
                      },
                      "required": [
                        "message"
                      ],
                      "type": "object"
                    }
                  },
                  "required": [
                    "error"
                  ],
                  "type": "object"
                }
              }
            },
            "description": "Invalid tool arguments."
          },
          "429": {
            "content": {
              "application/json": {
                "schema": {
                  "properties": {
                    "error": {
                      "properties": {
                        "code": {
                          "type": "integer"
                        },
                        "message": {
                          "type": "string"
                        }
                      },
                      "required": [
                        "message"
                      ],
                      "type": "object"
                    }
                  },
                  "required": [
                    "error"
                  ],
                  "type": "object"
                }
              }
            },
            "description": "Free call limit reached; try again after the limit resets."
          }
        }
      }
    },
    "/api/water-softener-size": {
      "get": {
        "description": "Size a water softener from household water use and tested hardness, with yearly salt cost. Gallons per person per day is required (no national default used), for softened water only. Iron is optional; unknown when absent, and changes the setting per EcoPure's clear-water ferrous iron rule (5 gpg per ppm); other makers differ. Returns grains per day, working capacity before reserve, optional paired model ratings, three idealized EP42 test-rating examples, notes, assumptions and dated primary sources. Costs are salt only. Pure Decimal arithmetic, no network or model.",
        "operationId": "water_softener_size",
        "parameters": [
          {
            "in": "query",
            "name": "hardness",
            "required": true,
            "schema": {
              "description": "Required measured hardness; after conversion 0 < gpg <= 100.",
              "exclusiveMinimum": 0,
              "type": "number"
            }
          },
          {
            "in": "query",
            "name": "unit",
            "required": false,
            "schema": {
              "default": "gpg",
              "description": "gpg or mg/L; divide mg/L by 17.1 (W1).",
              "enum": [
                "gpg",
                "mg_l"
              ],
              "type": "string"
            }
          },
          {
            "in": "query",
            "name": "people",
            "required": true,
            "schema": {
              "description": "Required whole household size.",
              "maximum": 20,
              "minimum": 1,
              "type": "integer"
            }
          },
          {
            "in": "query",
            "name": "gallons",
            "required": true,
            "schema": {
              "description": "Required softened gallons per person per day; no national default used. Exclude bypassing outdoor taps.",
              "maximum": 300,
              "minimum": 10,
              "type": "number"
            }
          },
          {
            "in": "query",
            "name": "iron",
            "required": false,
            "schema": {
              "description": "Optional dissolved clear-water ferrous iron in ppm; absent means unknown. EcoPure adds 5 gpg per ppm (W4); other makers differ.",
              "maximum": 20,
              "minimum": 0,
              "type": "number"
            }
          },
          {
            "in": "query",
            "name": "interval",
            "required": false,
            "schema": {
              "description": "Optional target days between regenerations.",
              "maximum": 60,
              "minimum": 1,
              "type": "number"
            }
          },
          {
            "in": "query",
            "name": "capacity",
            "required": false,
            "schema": {
              "description": "Your manual's grains per regeneration; requires salt_lb.",
              "maximum": 200000,
              "minimum": 1000,
              "type": "number"
            }
          },
          {
            "in": "query",
            "name": "salt",
            "required": false,
            "schema": {
              "description": "Your manual's lb salt at capacity_grains; requires capacity_grains.",
              "maximum": 50,
              "minimum": 0.5,
              "type": "number"
            }
          },
          {
            "in": "query",
            "name": "bag_price",
            "required": false,
            "schema": {
              "default": 8.97,
              "description": "Price per bag; one store's price (Fleet Farm, observed 2 Oct 2026); enter yours.",
              "maximum": 200,
              "minimum": 0.01,
              "type": "number"
            }
          },
          {
            "in": "query",
            "name": "bag_lb",
            "required": false,
            "schema": {
              "default": 40,
              "description": "Bag weight in lb.",
              "maximum": 100,
              "minimum": 1,
              "type": "number"
            }
          }
        ],
        "responses": {
          "200": {
            "content": {
              "application/json": {
                "schema": {
                  "additionalProperties": true,
                  "properties": {
                    "link": {
                      "examples": [
                        "https://apitoolcalls.com/water-softener-size/?utm_source=api&utm_medium=api"
                      ],
                      "format": "uri",
                      "type": "string"
                    },
                    "via": {
                      "const": "API Tool Calls",
                      "type": "string"
                    }
                  },
                  "required": [
                    "via",
                    "link"
                  ],
                  "type": "object"
                }
              }
            },
            "description": "Successful tool result with attribution."
          },
          "400": {
            "content": {
              "application/json": {
                "schema": {
                  "properties": {
                    "error": {
                      "properties": {
                        "code": {
                          "type": "integer"
                        },
                        "message": {
                          "type": "string"
                        }
                      },
                      "required": [
                        "message"
                      ],
                      "type": "object"
                    }
                  },
                  "required": [
                    "error"
                  ],
                  "type": "object"
                }
              }
            },
            "description": "Invalid tool arguments."
          },
          "429": {
            "content": {
              "application/json": {
                "schema": {
                  "properties": {
                    "error": {
                      "properties": {
                        "code": {
                          "type": "integer"
                        },
                        "message": {
                          "type": "string"
                        }
                      },
                      "required": [
                        "message"
                      ],
                      "type": "object"
                    }
                  },
                  "required": [
                    "error"
                  ],
                  "type": "object"
                }
              }
            },
            "description": "Free call limit reached; try again after the limit resets."
          }
        }
      }
    },
    "/api/wheelchair-ramp": {
      "get": {
        "description": "Plan wheelchair ramp length from entrance rise. Returns the minimum horizontal run under ADA 2010 §405.2, cited width, landing, rise-per-run and handrail dimensions, and separate historical HUD accessibility cost cards with missing price cells visible. This is a planning guide, not a code inspection.",
        "operationId": "wheelchair_ramp",
        "parameters": [
          {
            "in": "query",
            "name": "rise_inches",
            "required": true,
            "schema": {
              "description": "Entrance rise in inches; minimum horizontal run excludes landings and door maneuvering space.",
              "exclusiveMinimum": 0,
              "maximum": 1000000000.0,
              "type": "number"
            }
          }
        ],
        "responses": {
          "200": {
            "content": {
              "application/json": {
                "schema": {
                  "additionalProperties": true,
                  "properties": {
                    "link": {
                      "examples": [
                        "https://apitoolcalls.com/wheelchair-ramp-calculator/?utm_source=api&utm_medium=api"
                      ],
                      "format": "uri",
                      "type": "string"
                    },
                    "via": {
                      "const": "API Tool Calls",
                      "type": "string"
                    }
                  },
                  "required": [
                    "via",
                    "link"
                  ],
                  "type": "object"
                }
              }
            },
            "description": "Successful tool result with attribution."
          },
          "400": {
            "content": {
              "application/json": {
                "schema": {
                  "properties": {
                    "error": {
                      "properties": {
                        "code": {
                          "type": "integer"
                        },
                        "message": {
                          "type": "string"
                        }
                      },
                      "required": [
                        "message"
                      ],
                      "type": "object"
                    }
                  },
                  "required": [
                    "error"
                  ],
                  "type": "object"
                }
              }
            },
            "description": "Invalid tool arguments."
          },
          "429": {
            "content": {
              "application/json": {
                "schema": {
                  "properties": {
                    "error": {
                      "properties": {
                        "code": {
                          "type": "integer"
                        },
                        "message": {
                          "type": "string"
                        }
                      },
                      "required": [
                        "message"
                      ],
                      "type": "object"
                    }
                  },
                  "required": [
                    "error"
                  ],
                  "type": "object"
                }
              }
            },
            "description": "Free call limit reached; try again after the limit resets."
          }
        }
      }
    },
    "/api/yard-drainage": {
      "get": {
        "description": "Find likely causes of water pooling in a yard, fix options, who does them and dated public cost estimates. Returns likely causes to investigate, not a diagnosis, with explainable observed-code rules, safety escalations, options and who does them. Prices are dated public planning estimates, with distinct scopes and source years; no 2026 price adjustment. Omit unknown groups; [] means none observed. Optional numbers price only agreed areas, designed storage or counted downspout sets; the soil check screens root-zone drainage. No network or model. Web and MCP share the free daily allowance.",
        "operationId": "yard_drainage_cause",
        "parameters": [
          {
            "allowEmptyValue": true,
            "description": "Omit for unknown; [] means none observed. foundation: At the foundation; lawn_low_spot: A lawn low spot; slope_bottom: At the bottom of a slope; whole_yard: Across the whole yard Send comma-separated codes; an empty value means none observed.",
            "explode": false,
            "in": "query",
            "name": "where",
            "required": false,
            "schema": {
              "description": "Omit for unknown; [] means none observed. foundation: At the foundation; lawn_low_spot: A lawn low spot; slope_bottom: At the bottom of a slope; whole_yard: Across the whole yard",
              "items": {
                "enum": [
                  "foundation",
                  "lawn_low_spot",
                  "slope_bottom",
                  "whole_yard"
                ],
                "type": "string"
              },
              "maxItems": 4,
              "type": "array",
              "uniqueItems": true
            },
            "style": "form"
          },
          {
            "allowEmptyValue": true,
            "description": "Omit for unknown; [] means none observed. after_rain: After rain; seasonal: Seasonally; dry_weather: In dry weather Send comma-separated codes; an empty value means none observed.",
            "explode": false,
            "in": "query",
            "name": "timing",
            "required": false,
            "schema": {
              "description": "Omit for unknown; [] means none observed. after_rain: After rain; seasonal: Seasonally; dry_weather: In dry weather",
              "items": {
                "enum": [
                  "after_rain",
                  "seasonal",
                  "dry_weather"
                ],
                "type": "string"
              },
              "maxItems": 3,
              "type": "array",
              "uniqueItems": true
            },
            "style": "form"
          },
          {
            "allowEmptyValue": true,
            "description": "Omit for unknown; [] means none observed. overflowing: Overflowing gutters; leaking: Leaking gutters; discharge_near_foundation: Downspouts discharge near the foundation Send comma-separated codes; an empty value means none observed.",
            "explode": false,
            "in": "query",
            "name": "gutters",
            "required": false,
            "schema": {
              "description": "Omit for unknown; [] means none observed. overflowing: Overflowing gutters; leaking: Leaking gutters; discharge_near_foundation: Downspouts discharge near the foundation",
              "items": {
                "enum": [
                  "overflowing",
                  "leaking",
                  "discharge_near_foundation"
                ],
                "type": "string"
              },
              "maxItems": 3,
              "type": "array",
              "uniqueItems": true
            },
            "style": "form"
          },
          {
            "allowEmptyValue": true,
            "description": "Omit for unknown; [] means none observed. slopes_toward_house: Ground slopes toward the house; settled_low_spot: A settled low spot; blocked_swale: A blocked swale; new_hard_surface: A new hard surface Send comma-separated codes; an empty value means none observed.",
            "explode": false,
            "in": "query",
            "name": "grading",
            "required": false,
            "schema": {
              "description": "Omit for unknown; [] means none observed. slopes_toward_house: Ground slopes toward the house; settled_low_spot: A settled low spot; blocked_swale: A blocked swale; new_hard_surface: A new hard surface",
              "items": {
                "enum": [
                  "slopes_toward_house",
                  "settled_low_spot",
                  "blocked_swale",
                  "new_hard_surface"
                ],
                "type": "string"
              },
              "maxItems": 4,
              "type": "array",
              "uniqueItems": true
            },
            "style": "form"
          },
          {
            "allowEmptyValue": true,
            "description": "Omit for unknown; [] means none observed. clay: Clay soil; compacted: Compacted soil Send comma-separated codes; an empty value means none observed.",
            "explode": false,
            "in": "query",
            "name": "soil",
            "required": false,
            "schema": {
              "description": "Omit for unknown; [] means none observed. clay: Clay soil; compacted: Compacted soil",
              "items": {
                "enum": [
                  "clay",
                  "compacted"
                ],
                "type": "string"
              },
              "maxItems": 2,
              "type": "array",
              "uniqueItems": true
            },
            "style": "form"
          },
          {
            "allowEmptyValue": true,
            "description": "Omit for unknown; [] means none observed. flow_from_higher_ground: Flow from higher ground; new_nearby_hard_surface: A new nearby hard surface Send comma-separated codes; an empty value means none observed.",
            "explode": false,
            "in": "query",
            "name": "boundary",
            "required": false,
            "schema": {
              "description": "Omit for unknown; [] means none observed. flow_from_higher_ground: Flow from higher ground; new_nearby_hard_surface: A new nearby hard surface",
              "items": {
                "enum": [
                  "flow_from_higher_ground",
                  "new_nearby_hard_surface"
                ],
                "type": "string"
              },
              "maxItems": 2,
              "type": "array",
              "uniqueItems": true
            },
            "style": "form"
          },
          {
            "allowEmptyValue": true,
            "description": "Omit for unknown; [] means none observed. seepage: Seepage; saturated_below_surface: Saturated below the surface; seasonal_high_water: Seasonal high water Send comma-separated codes; an empty value means none observed.",
            "explode": false,
            "in": "query",
            "name": "groundwater",
            "required": false,
            "schema": {
              "description": "Omit for unknown; [] means none observed. seepage: Seepage; saturated_below_surface: Saturated below the surface; seasonal_high_water: Seasonal high water",
              "items": {
                "enum": [
                  "seepage",
                  "saturated_below_surface",
                  "seasonal_high_water"
                ],
                "type": "string"
              },
              "maxItems": 3,
              "type": "array",
              "uniqueItems": true
            },
            "style": "form"
          },
          {
            "allowEmptyValue": true,
            "description": "Omit for unknown; [] means none observed. lower_outlet: A working lower outlet; utilities_in_area: Utilities in the area; septic_or_well_nearby: A septic system or well nearby; water_entering_house: Water entering the house Send comma-separated codes; an empty value means none observed.",
            "explode": false,
            "in": "query",
            "name": "site",
            "required": false,
            "schema": {
              "description": "Omit for unknown; [] means none observed. lower_outlet: A working lower outlet; utilities_in_area: Utilities in the area; septic_or_well_nearby: A septic system or well nearby; water_entering_house: Water entering the house",
              "items": {
                "enum": [
                  "lower_outlet",
                  "utilities_in_area",
                  "septic_or_well_nearby",
                  "water_entering_house"
                ],
                "type": "string"
              },
              "maxItems": 4,
              "type": "array",
              "uniqueItems": true
            },
            "style": "form"
          },
          {
            "in": "query",
            "name": "drop",
            "required": false,
            "schema": {
              "description": "Inches dropped in 15 minutes after pre-wetting and refilling the hole; Iowa State's informal root-zone check, not a dry-well design test.",
              "maximum": 20,
              "minimum": 0,
              "type": "number"
            }
          },
          {
            "in": "query",
            "name": "downspouts",
            "required": false,
            "schema": {
              "description": "Whole number of elbow-plus-extension sets, hardware only.",
              "maximum": 20,
              "minimum": 1,
              "type": "integer"
            }
          },
          {
            "in": "query",
            "name": "dry_well",
            "required": false,
            "schema": {
              "description": "Designed storage from a designer; never sized from this questionnaire.",
              "maximum": 2000,
              "minimum": 1,
              "type": "number"
            }
          },
          {
            "in": "query",
            "name": "rain_garden",
            "required": false,
            "schema": {
              "description": "Agreed garden area; never computed from roof area.",
              "maximum": 5000,
              "minimum": 10,
              "type": "number"
            }
          }
        ],
        "responses": {
          "200": {
            "content": {
              "application/json": {
                "schema": {
                  "additionalProperties": true,
                  "properties": {
                    "link": {
                      "examples": [
                        "https://apitoolcalls.com/yard-drainage/?utm_source=api&utm_medium=api"
                      ],
                      "format": "uri",
                      "type": "string"
                    },
                    "via": {
                      "const": "API Tool Calls",
                      "type": "string"
                    }
                  },
                  "required": [
                    "via",
                    "link"
                  ],
                  "type": "object"
                }
              }
            },
            "description": "Successful tool result with attribution."
          },
          "400": {
            "content": {
              "application/json": {
                "schema": {
                  "properties": {
                    "error": {
                      "properties": {
                        "code": {
                          "type": "integer"
                        },
                        "message": {
                          "type": "string"
                        }
                      },
                      "required": [
                        "message"
                      ],
                      "type": "object"
                    }
                  },
                  "required": [
                    "error"
                  ],
                  "type": "object"
                }
              }
            },
            "description": "Invalid tool arguments."
          },
          "429": {
            "content": {
              "application/json": {
                "schema": {
                  "properties": {
                    "error": {
                      "properties": {
                        "code": {
                          "type": "integer"
                        },
                        "message": {
                          "type": "string"
                        }
                      },
                      "required": [
                        "message"
                      ],
                      "type": "object"
                    }
                  },
                  "required": [
                    "error"
                  ],
                  "type": "object"
                }
              }
            },
            "description": "Free call limit reached; try again after the limit resets."
          }
        }
      }
    }
  },
  "servers": [
    {
      "url": "https://apitoolcalls.com"
    }
  ]
}
