{
 "openapi": "3.1.0",
 "info": {
  "title": "STR Host Tools API",
  "version": "1.0.0",
  "description": "Free stateless calculators for short-term rental host fees. Same math as strhosttools.com. Rates are decimals (0.08 = 8%)."
 },
 "servers": [
  {
   "url": "https://strhosttools.com"
  }
 ],
 "paths": {
  "/api/vrbo-reprice": {
   "get": {
    "operationId": "vrboReprice",
    "summary": "Vrbo 12% repricer",
    "parameters": [
     {
      "name": "nightly",
      "in": "query",
      "required": false,
      "description": "Nightly rate USD",
      "schema": {
       "type": "number"
      },
      "example": 250
     },
     {
      "name": "cleaning",
      "in": "query",
      "required": false,
      "description": "Cleaning fee USD",
      "schema": {
       "type": "number"
      },
      "example": 150
     },
     {
      "name": "pet",
      "in": "query",
      "required": false,
      "description": "Pet fee USD",
      "schema": {
       "type": "number"
      },
      "example": 50
     },
     {
      "name": "nights",
      "in": "query",
      "required": false,
      "description": "Nights per stay",
      "schema": {
       "type": "number"
      },
      "example": 4
     },
     {
      "name": "old_rate",
      "in": "query",
      "required": false,
      "description": "Old Vrbo fee, 0.08, 0.05 or 0",
      "schema": {
       "type": "number"
      },
      "example": 0.08
     },
     {
      "name": "mode",
      "in": "query",
      "required": false,
      "description": "pass or absorb",
      "schema": {
       "type": "string"
      },
      "example": "pass"
     }
    ],
    "responses": {
     "200": {
      "description": "Result",
      "content": {
       "application/json": {
        "schema": {
         "type": "object"
        }
       }
      }
     },
     "400": {
      "description": "Bad input"
     }
    }
   }
  },
  "/api/airbnb-host-only": {
   "get": {
    "operationId": "airbnbHostOnly",
    "summary": "Airbnb host-only fee repricer",
    "parameters": [
     {
      "name": "price",
      "in": "query",
      "required": false,
      "description": "Price on split fee USD",
      "schema": {
       "type": "number"
      },
      "example": 100
     },
     {
      "name": "old_host_rate",
      "in": "query",
      "required": false,
      "description": "Old host fee",
      "schema": {
       "type": "number"
      },
      "example": 0.03
     },
     {
      "name": "new_rate",
      "in": "query",
      "required": false,
      "description": "New host-only fee",
      "schema": {
       "type": "number"
      },
      "example": 0.155
     },
     {
      "name": "guest_fee",
      "in": "query",
      "required": false,
      "description": "Old guest service fee, for comparison",
      "schema": {
       "type": "number"
      },
      "example": 0.141
     },
     {
      "name": "mode",
      "in": "query",
      "required": false,
      "description": "pass or absorb",
      "schema": {
       "type": "string"
      },
      "example": "pass"
     }
    ],
    "responses": {
     "200": {
      "description": "Result",
      "content": {
       "application/json": {
        "schema": {
         "type": "object"
        }
       }
      }
     },
     "400": {
      "description": "Bad input"
     }
    }
   }
  },
  "/api/price-match": {
   "get": {
    "operationId": "priceMatch",
    "summary": "Same take-home price per channel",
    "parameters": [
     {
      "name": "net",
      "in": "query",
      "required": false,
      "description": "Take-home per night USD",
      "schema": {
       "type": "number"
      },
      "example": 200
     },
     {
      "name": "direct_rate",
      "in": "query",
      "required": false,
      "description": "Direct cost",
      "schema": {
       "type": "number"
      },
      "example": 0.03
     },
     {
      "name": "airbnb_rate",
      "in": "query",
      "required": false,
      "description": "Airbnb fee",
      "schema": {
       "type": "number"
      },
      "example": 0.155
     },
     {
      "name": "vrbo_rate",
      "in": "query",
      "required": false,
      "description": "Vrbo fee",
      "schema": {
       "type": "number"
      },
      "example": 0.12
     }
    ],
    "responses": {
     "200": {
      "description": "Result",
      "content": {
       "application/json": {
        "schema": {
         "type": "object"
        }
       }
      }
     },
     "400": {
      "description": "Bad input"
     }
    }
   }
  },
  "/api/lead-window": {
   "get": {
    "operationId": "leadWindow",
    "summary": "Days from first Vrbo contact to direct booking",
    "parameters": [
     {
      "name": "first_contact",
      "in": "query",
      "required": false,
      "description": "YYYY-MM-DD",
      "schema": {
       "type": "string"
      },
      "example": "2026-10-30"
     },
     {
      "name": "booking",
      "in": "query",
      "required": false,
      "description": "YYYY-MM-DD",
      "schema": {
       "type": "string"
      },
      "example": "2026-11-12"
     },
     {
      "name": "days",
      "in": "query",
      "required": false,
      "description": "Window length",
      "schema": {
       "type": "number"
      },
      "example": 30
     }
    ],
    "responses": {
     "200": {
      "description": "Result",
      "content": {
       "application/json": {
        "schema": {
         "type": "object"
        }
       }
      }
     },
     "400": {
      "description": "Bad input"
     }
    }
   }
  }
 }
}