{
  "openapi": "3.1.0",
  "info": {
    "title": "CarRentalList public API",
    "version": "1.0.0",
    "summary": "Read-only catalog of independent exotic and luxury car rental companies in the United States.",
    "description": "Prices are the daily rates each company publishes on its own website, read by our scraper; they are never estimated (no published price: null, shown as \"Contact for Price\"). Only independent rental companies are listed, no national chains or peer-to-peer platforms.\n\nAll endpoints are GET, need no key, answer JSON with `Access-Control-Allow-Origin: *` and are cached for up to 5 minutes. No edge rate limit is enforced yet; be polite (at most 2 requests per second); responses are edge-cached. /api/companies and /api/vehicles return the whole list unless `limit` is given. Use of the data is subject to the terms at https://carrentallist.com/terms; please link back to the company pages on carrentallist.com when you republish.",
    "termsOfService": "https://carrentallist.com/terms",
    "contact": {
      "name": "CarRentalList support",
      "email": "support@carrentallist.com",
      "url": "https://carrentallist.com/contact"
    },
    "license": {
      "name": "CarRentalList terms of use",
      "url": "https://carrentallist.com/terms"
    }
  },
  "servers": [
    {
      "url": "https://carrentallist.com"
    }
  ],
  "externalDocs": {
    "description": "Directory and data notes for AI agents",
    "url": "https://carrentallist.com/llms.txt"
  },
  "tags": [
    {
      "name": "catalog",
      "description": "Companies, vehicles, prices and news"
    }
  ],
  "paths": {
    "/api/companies": {
      "get": {
        "operationId": "listCompanies",
        "summary": "Listed companies with the makes and cities of their active vehicles",
        "description": "Ranked by fleet; with `state`, the companies with an active vehicle in that state (listing tier first, then in-state fleet), each with in_state_count.",
        "tags": [
          "catalog"
        ],
        "parameters": [
          {
            "name": "state",
            "in": "query",
            "required": false,
            "description": "Two-letter state code (FL, CA, ...): only vehicles in that state, or of a company based there when the vehicle has no state.",
            "schema": {
              "type": "string",
              "pattern": "^[A-Z]{2}$"
            },
            "example": "FL"
          },
          {
            "name": "limit",
            "in": "query",
            "required": false,
            "description": "Page size, 1-500. Without it the full list is returned (backward compatible). The answer then carries X-Total-Count and, when more rows follow, Link: <...>; rel=\"next\".",
            "schema": {
              "type": "integer",
              "minimum": 1,
              "maximum": 500
            }
          },
          {
            "name": "offset",
            "in": "query",
            "required": false,
            "description": "Rows to skip before the page (default 0).",
            "schema": {
              "type": "integer",
              "minimum": 0,
              "default": 0
            }
          },
          {
            "name": "fields",
            "in": "query",
            "required": false,
            "description": "Comma-separated subset of the row keys to return. Allowed: id, name, website, phone, location, cities, brands, vehicle_count, rating, reviews, created_at, state, instagram, twitter, facebook, youtube, tiktok, linkedin, email, hours_of_operation, description, social_score, instagram_followers, facebook_followers, has_membership, membership_type, membership_url, slug, specializations, active_vehicle_count, in_state_count, brands_count. An unknown key is a 400.",
            "schema": {
              "type": "string"
            },
            "example": "id,name,slug"
          }
        ],
        "responses": {
          "200": {
            "description": "OK",
            "headers": {
              "X-Total-Count": {
                "$ref": "#/components/headers/X-Total-Count"
              },
              "Link": {
                "$ref": "#/components/headers/Link"
              }
            },
            "content": {
              "application/json": {
                "schema": {
                  "type": "array",
                  "items": {
                    "$ref": "#/components/schemas/Company"
                  }
                },
                "example": [
                  {
                    "id": 1,
                    "name": "Example Exotics",
                    "website": "https://example.com/",
                    "phone": "(305) 200-0000",
                    "location": "Miami",
                    "cities": "Miami",
                    "brands": "Lamborghini,Ferrari",
                    "vehicle_count": 12,
                    "rating": 4.8,
                    "reviews": 12,
                    "created_at": "2026-01-01T00:00:00.000Z",
                    "state": "FL",
                    "instagram": "exampleexotics",
                    "twitter": null,
                    "facebook": null,
                    "youtube": null,
                    "tiktok": null,
                    "linkedin": null,
                    "email": "info@example.com",
                    "hours_of_operation": "Mon-Sun 9am-6pm",
                    "description": "Example Exotics rents exotic cars in Miami, FL.",
                    "social_score": 12,
                    "instagram_followers": 1200,
                    "facebook_followers": null,
                    "has_membership": false,
                    "membership_type": null,
                    "membership_url": null,
                    "slug": "example-exotics",
                    "specializations": [
                      "Exotic"
                    ],
                    "active_vehicle_count": 12,
                    "brands_count": 2
                  }
                ]
              }
            }
          },
          "400": {
            "$ref": "#/components/responses/BadRequest"
          },
          "503": {
            "$ref": "#/components/responses/Unavailable"
          }
        }
      }
    },
    "/api/companies/{slug}": {
      "get": {
        "operationId": "getCompany",
        "summary": "One listed company by slug",
        "description": "Same shape as a /api/companies row (nationwide). 404 {\"error\":\"Company not found\"} for an unknown slug or a company without active vehicles.",
        "tags": [
          "catalog"
        ],
        "parameters": [
          {
            "name": "slug",
            "in": "path",
            "required": true,
            "description": "Company slug, as in /company/{slug}.",
            "schema": {
              "type": "string",
              "pattern": "^[a-z0-9]+(?:-[a-z0-9]+)*$"
            },
            "example": "example-exotics"
          }
        ],
        "responses": {
          "200": {
            "description": "OK",
            "headers": {},
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/Company"
                },
                "example": {
                  "id": 1,
                  "name": "Example Exotics",
                  "website": "https://example.com/",
                  "phone": "(305) 200-0000",
                  "location": "Miami",
                  "cities": "Miami",
                  "brands": "Lamborghini,Ferrari",
                  "vehicle_count": 12,
                  "rating": 4.8,
                  "reviews": 12,
                  "created_at": "2026-01-01T00:00:00.000Z",
                  "state": "FL",
                  "instagram": "exampleexotics",
                  "twitter": null,
                  "facebook": null,
                  "youtube": null,
                  "tiktok": null,
                  "linkedin": null,
                  "email": "info@example.com",
                  "hours_of_operation": "Mon-Sun 9am-6pm",
                  "description": "Example Exotics rents exotic cars in Miami, FL.",
                  "social_score": 12,
                  "instagram_followers": 1200,
                  "facebook_followers": null,
                  "has_membership": false,
                  "membership_type": null,
                  "membership_url": null,
                  "slug": "example-exotics",
                  "specializations": [
                    "Exotic"
                  ],
                  "active_vehicle_count": 12,
                  "brands_count": 2
                }
              }
            }
          },
          "404": {
            "$ref": "#/components/responses/NotFound"
          },
          "503": {
            "$ref": "#/components/responses/Unavailable"
          }
        }
      }
    },
    "/api/vehicles": {
      "get": {
        "operationId": "listVehicles",
        "summary": "Active vehicles with their company, ordered by make and model",
        "tags": [
          "catalog"
        ],
        "parameters": [
          {
            "name": "make",
            "in": "query",
            "required": false,
            "description": "Exact make (\"Lamborghini\").",
            "schema": {
              "type": "string"
            },
            "example": "Lamborghini"
          },
          {
            "name": "location",
            "in": "query",
            "required": false,
            "description": "Case-insensitive substring of the vehicle's city, or of the company's city when the vehicle has none.",
            "schema": {
              "type": "string"
            },
            "example": "Miami"
          },
          {
            "name": "company_id",
            "in": "query",
            "required": false,
            "description": "Vehicles of one company (positive integer; anything else is a 400).",
            "schema": {
              "type": "integer",
              "minimum": 1
            }
          },
          {
            "name": "state",
            "in": "query",
            "required": false,
            "description": "Two-letter state code (FL, CA, ...): only vehicles in that state, or of a company based there when the vehicle has no state.",
            "schema": {
              "type": "string",
              "pattern": "^[A-Z]{2}$"
            },
            "example": "FL"
          },
          {
            "name": "limit",
            "in": "query",
            "required": false,
            "description": "Page size, 1-500. Without it the full list is returned (backward compatible). The answer then carries X-Total-Count and, when more rows follow, Link: <...>; rel=\"next\".",
            "schema": {
              "type": "integer",
              "minimum": 1,
              "maximum": 500
            }
          },
          {
            "name": "offset",
            "in": "query",
            "required": false,
            "description": "Rows to skip before the page (default 0).",
            "schema": {
              "type": "integer",
              "minimum": 0,
              "default": 0
            }
          },
          {
            "name": "fields",
            "in": "query",
            "required": false,
            "description": "Comma-separated subset of the row keys to return. Allowed: id, company_id, make, model, full_name, model_normalized, year, color, price, image_url, listing_url, location, state, image_fallback_url, image_fallback_alt, image_cached_url, image_fallback_cached_url, company_name, website, phone, company_location. An unknown key is a 400.",
            "schema": {
              "type": "string"
            },
            "example": "id,name,slug"
          }
        ],
        "responses": {
          "200": {
            "description": "OK",
            "headers": {
              "X-Total-Count": {
                "$ref": "#/components/headers/X-Total-Count"
              },
              "Link": {
                "$ref": "#/components/headers/Link"
              }
            },
            "content": {
              "application/json": {
                "schema": {
                  "type": "array",
                  "items": {
                    "$ref": "#/components/schemas/Vehicle"
                  }
                },
                "example": [
                  {
                    "id": 1,
                    "company_id": 1,
                    "make": "Lamborghini",
                    "model": "Huracan EVO",
                    "full_name": "Lamborghini Huracan EVO",
                    "model_normalized": "Huracan",
                    "year": null,
                    "color": null,
                    "price": "999",
                    "image_url": "https://example.com/cars/huracan-evo.jpg",
                    "listing_url": "https://example.com/cars/huracan-evo",
                    "location": "Miami",
                    "state": "FL",
                    "image_fallback_url": null,
                    "image_fallback_alt": null,
                    "image_cached_url": null,
                    "image_fallback_cached_url": null,
                    "company_name": "Example Exotics",
                    "website": "https://example.com/",
                    "phone": "(305) 200-0000",
                    "company_location": "Miami"
                  }
                ]
              }
            }
          },
          "400": {
            "$ref": "#/components/responses/BadRequest"
          },
          "503": {
            "$ref": "#/components/responses/Unavailable"
          }
        }
      }
    },
    "/api/makes": {
      "get": {
        "operationId": "listMakes",
        "summary": "Active vehicle count per make, most first",
        "tags": [
          "catalog"
        ],
        "parameters": [
          {
            "name": "state",
            "in": "query",
            "required": false,
            "description": "Two-letter state code (FL, CA, ...): only vehicles in that state, or of a company based there when the vehicle has no state.",
            "schema": {
              "type": "string",
              "pattern": "^[A-Z]{2}$"
            },
            "example": "FL"
          },
          {
            "name": "location",
            "in": "query",
            "required": false,
            "description": "Exact vehicle city.",
            "schema": {
              "type": "string"
            }
          }
        ],
        "responses": {
          "200": {
            "description": "OK",
            "headers": {},
            "content": {
              "application/json": {
                "schema": {
                  "type": "array",
                  "items": {
                    "type": "object",
                    "properties": {
                      "make": {
                        "type": "string"
                      },
                      "count": {
                        "type": "integer"
                      }
                    },
                    "required": [
                      "make",
                      "count"
                    ]
                  }
                },
                "example": [
                  {
                    "make": "Lamborghini",
                    "count": 12
                  }
                ]
              }
            }
          },
          "503": {
            "$ref": "#/components/responses/Unavailable"
          }
        }
      }
    },
    "/api/models": {
      "get": {
        "operationId": "listModels",
        "summary": "Active vehicle count per make and model, most first",
        "tags": [
          "catalog"
        ],
        "parameters": [
          {
            "name": "make",
            "in": "query",
            "required": false,
            "description": "Exact make.",
            "schema": {
              "type": "string"
            }
          },
          {
            "name": "state",
            "in": "query",
            "required": false,
            "description": "Two-letter state code (FL, CA, ...): only vehicles in that state, or of a company based there when the vehicle has no state.",
            "schema": {
              "type": "string",
              "pattern": "^[A-Z]{2}$"
            },
            "example": "FL"
          },
          {
            "name": "location",
            "in": "query",
            "required": false,
            "description": "Exact vehicle city.",
            "schema": {
              "type": "string"
            }
          }
        ],
        "responses": {
          "200": {
            "description": "OK",
            "headers": {},
            "content": {
              "application/json": {
                "schema": {
                  "type": "array",
                  "items": {
                    "type": "object",
                    "properties": {
                      "make": {
                        "type": "string"
                      },
                      "model": {
                        "type": "string"
                      },
                      "count": {
                        "type": "integer"
                      }
                    },
                    "required": [
                      "make",
                      "model",
                      "count"
                    ]
                  }
                },
                "example": [
                  {
                    "make": "Lamborghini",
                    "model": "Huracan EVO",
                    "count": 12
                  }
                ]
              }
            }
          },
          "503": {
            "$ref": "#/components/responses/Unavailable"
          }
        }
      }
    },
    "/api/states": {
      "get": {
        "operationId": "listStates",
        "summary": "States the directory covers, with their configured cities",
        "tags": [
          "catalog"
        ],
        "responses": {
          "200": {
            "description": "OK",
            "headers": {},
            "content": {
              "application/json": {
                "schema": {
                  "type": "array",
                  "items": {
                    "type": "object",
                    "properties": {
                      "slug": {
                        "type": "string"
                      },
                      "code": {
                        "type": "string"
                      },
                      "name": {
                        "type": "string"
                      },
                      "active": {
                        "type": "boolean"
                      },
                      "cities": {
                        "type": "array",
                        "items": {
                          "type": "string"
                        }
                      }
                    },
                    "required": [
                      "slug",
                      "code",
                      "name",
                      "active",
                      "cities"
                    ]
                  }
                },
                "example": [
                  {
                    "slug": "florida",
                    "code": "FL",
                    "name": "Florida",
                    "active": true,
                    "cities": [
                      "Miami",
                      "Tampa"
                    ]
                  }
                ]
              }
            }
          },
          "503": {
            "$ref": "#/components/responses/Unavailable"
          }
        }
      }
    },
    "/api/cities": {
      "get": {
        "operationId": "listCities",
        "summary": "Configured cities of the covered states",
        "tags": [
          "catalog"
        ],
        "parameters": [
          {
            "name": "state",
            "in": "query",
            "required": false,
            "description": "Two-letter state code; an unknown code answers [].",
            "schema": {
              "type": "string",
              "pattern": "^[A-Z]{2}$"
            },
            "example": "FL"
          }
        ],
        "responses": {
          "200": {
            "description": "OK",
            "headers": {},
            "content": {
              "application/json": {
                "schema": {
                  "type": "array",
                  "items": {
                    "type": "object",
                    "properties": {
                      "city": {
                        "type": "string"
                      },
                      "state": {
                        "type": "string"
                      },
                      "stateName": {
                        "type": "string"
                      }
                    },
                    "required": [
                      "city",
                      "state",
                      "stateName"
                    ]
                  }
                },
                "example": [
                  {
                    "city": "Miami",
                    "state": "FL",
                    "stateName": "Florida"
                  }
                ]
              }
            }
          },
          "503": {
            "$ref": "#/components/responses/Unavailable"
          }
        }
      }
    },
    "/api/stats": {
      "get": {
        "operationId": "getStats",
        "summary": "Catalog totals: active vehicles, makes, companies, locations",
        "tags": [
          "catalog"
        ],
        "parameters": [
          {
            "name": "state",
            "in": "query",
            "required": false,
            "description": "Two-letter state code (FL, CA, ...): only vehicles in that state, or of a company based there when the vehicle has no state.",
            "schema": {
              "type": "string",
              "pattern": "^[A-Z]{2}$"
            },
            "example": "FL"
          }
        ],
        "responses": {
          "200": {
            "description": "OK",
            "headers": {},
            "content": {
              "application/json": {
                "schema": {
                  "type": "object",
                  "properties": {
                    "total_vehicles": {
                      "type": "integer"
                    },
                    "total_makes": {
                      "type": "integer"
                    },
                    "total_companies": {
                      "type": "integer"
                    },
                    "total_locations": {
                      "type": "integer"
                    }
                  },
                  "required": [
                    "total_vehicles",
                    "total_makes",
                    "total_companies",
                    "total_locations"
                  ]
                },
                "example": {
                  "total_vehicles": 120,
                  "total_makes": 12,
                  "total_companies": 12,
                  "total_locations": 6
                }
              }
            }
          },
          "503": {
            "$ref": "#/components/responses/Unavailable"
          }
        }
      }
    },
    "/api/pricing": {
      "get": {
        "operationId": "getPricing",
        "summary": "Published daily rates from 100 to 10,000 USD: range, per-make summary and every priced vehicle",
        "tags": [
          "catalog"
        ],
        "parameters": [
          {
            "name": "state",
            "in": "query",
            "required": false,
            "description": "Two-letter state code (FL, CA, ...): only vehicles in that state, or of a company based there when the vehicle has no state.",
            "schema": {
              "type": "string",
              "pattern": "^[A-Z]{2}$"
            },
            "example": "FL"
          }
        ],
        "responses": {
          "200": {
            "description": "OK",
            "headers": {},
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/Pricing"
                },
                "example": {
                  "total_with_prices": 2,
                  "min_price": 999,
                  "max_price": 1999,
                  "top_20": [
                    {
                      "id": 2,
                      "make": "Ferrari",
                      "model": "Roma",
                      "full_name": "Ferrari Roma",
                      "price": "1999",
                      "company_id": 1,
                      "price_numeric": 1999,
                      "company_name": "Example Exotics",
                      "company_website": "https://example.com/"
                    }
                  ],
                  "by_make": [
                    {
                      "make": "Ferrari",
                      "count": 1,
                      "min_price": 1999,
                      "max_price": 1999,
                      "avg_price": 1999
                    }
                  ],
                  "vehicles": [
                    {
                      "id": 2,
                      "make": "Ferrari",
                      "model": "Roma",
                      "full_name": "Ferrari Roma",
                      "price": "1999",
                      "company_id": 1,
                      "price_numeric": 1999,
                      "company_name": "Example Exotics",
                      "company_website": "https://example.com/"
                    }
                  ]
                }
              }
            }
          },
          "503": {
            "$ref": "#/components/responses/Unavailable"
          }
        }
      }
    },
    "/api/price-history": {
      "get": {
        "operationId": "getPriceHistory",
        "summary": "Logged price changes, or one vehicle's price history",
        "description": "Without vehicle_id: the 50 largest changes (by percent) in the last `days` days. With vehicle_id: that vehicle and every recorded price.",
        "tags": [
          "catalog"
        ],
        "parameters": [
          {
            "name": "vehicle_id",
            "in": "query",
            "required": false,
            "description": "One vehicle's history (positive integer; anything else is a 400).",
            "schema": {
              "type": "integer",
              "minimum": 1
            }
          },
          {
            "name": "state",
            "in": "query",
            "required": false,
            "description": "Two-letter state code (FL, CA, ...): only vehicles in that state, or of a company based there when the vehicle has no state.",
            "schema": {
              "type": "string",
              "pattern": "^[A-Z]{2}$"
            },
            "example": "FL"
          },
          {
            "name": "days",
            "in": "query",
            "required": false,
            "description": "Look-back window in days, 1-365 (default 30; out-of-range values are clamped).",
            "schema": {
              "type": "integer",
              "minimum": 1,
              "maximum": 365,
              "default": 30
            }
          }
        ],
        "responses": {
          "200": {
            "description": "OK",
            "headers": {},
            "content": {
              "application/json": {
                "schema": {
                  "oneOf": [
                    {
                      "$ref": "#/components/schemas/PriceChanges"
                    },
                    {
                      "$ref": "#/components/schemas/VehiclePriceHistory"
                    }
                  ]
                },
                "example": {
                  "period_days": 30,
                  "total_records": 12,
                  "vehicles_with_changes": 1,
                  "price_increases": 1,
                  "price_decreases": 0,
                  "changes": [
                    {
                      "vehicle_id": 1,
                      "make": "Lamborghini",
                      "model": "Huracan EVO",
                      "company": "Example Exotics",
                      "state": "FL",
                      "previous_price": 999,
                      "current_price": 1999,
                      "change": 1000,
                      "change_percent": 100.1,
                      "changed_at": "2026-01-01T00:00:00.000Z"
                    }
                  ]
                }
              }
            }
          },
          "400": {
            "$ref": "#/components/responses/BadRequest"
          },
          "503": {
            "$ref": "#/components/responses/Unavailable"
          }
        }
      }
    },
    "/api/news": {
      "get": {
        "operationId": "listNews",
        "summary": "Latest published news articles",
        "tags": [
          "catalog"
        ],
        "parameters": [
          {
            "name": "limit",
            "in": "query",
            "required": false,
            "description": "Articles to return, 1-100 (default 10; out-of-range values are clamped).",
            "schema": {
              "type": "integer",
              "minimum": 1,
              "maximum": 100,
              "default": 10
            }
          }
        ],
        "responses": {
          "200": {
            "description": "OK",
            "headers": {},
            "content": {
              "application/json": {
                "schema": {
                  "type": "array",
                  "items": {
                    "$ref": "#/components/schemas/NewsArticle"
                  }
                },
                "example": [
                  {
                    "id": 1,
                    "slug": "example-article",
                    "title": "Example article title",
                    "subtitle": "Example subtitle.",
                    "excerpt": "Example summary of the article.",
                    "generated_image_url": "https://example.com/news/example-article.webp",
                    "published_at": "2026-01-01T00:00:00.000Z",
                    "original_url": "https://example.com/source-article"
                  }
                ]
              }
            }
          },
          "503": {
            "$ref": "#/components/responses/Unavailable"
          }
        }
      }
    }
  },
  "components": {
    "schemas": {
      "Company": {
        "type": "object",
        "description": "A listed company (at least one active vehicle).",
        "properties": {
          "id": {
            "type": "integer"
          },
          "name": {
            "type": "string"
          },
          "website": {
            "type": [
              "string",
              "null"
            ],
            "description": "Company website as stored (scheme may be missing)."
          },
          "phone": {
            "type": [
              "string",
              "null"
            ],
            "description": "U.S. phone number; null unless it is a valid U.S. number (SER-653)."
          },
          "location": {
            "type": [
              "string",
              "null"
            ],
            "description": "Home city of the company."
          },
          "cities": {
            "type": "string",
            "description": "Comma-separated cities of the company's active vehicles (in the requested state when `state` is given)."
          },
          "brands": {
            "type": "string",
            "description": "Comma-separated makes of the company's active vehicles (in scope)."
          },
          "vehicle_count": {
            "type": [
              "integer",
              "null"
            ],
            "description": "Fleet size stored for the company."
          },
          "rating": {
            "type": [
              "number",
              "null"
            ],
            "description": "Google rating (1-5)."
          },
          "reviews": {
            "type": [
              "integer",
              "null"
            ],
            "description": "Number of Google reviews."
          },
          "created_at": {
            "type": [
              "string",
              "null"
            ],
            "description": "When the company was added.",
            "format": "date-time"
          },
          "state": {
            "type": [
              "string",
              "null"
            ],
            "description": "Two-letter code of the company's home state."
          },
          "instagram": {
            "type": [
              "string",
              "null"
            ],
            "description": "Instagram handle."
          },
          "twitter": {
            "type": [
              "string",
              "null"
            ],
            "description": "X/Twitter handle."
          },
          "facebook": {
            "type": [
              "string",
              "null"
            ],
            "description": "Facebook page name."
          },
          "youtube": {
            "type": [
              "string",
              "null"
            ],
            "description": "YouTube channel."
          },
          "tiktok": {
            "type": [
              "string",
              "null"
            ],
            "description": "TikTok handle."
          },
          "linkedin": {
            "type": [
              "string",
              "null"
            ],
            "description": "LinkedIn page."
          },
          "email": {
            "type": [
              "string",
              "null"
            ],
            "description": "Public contact email."
          },
          "hours_of_operation": {
            "type": [
              "string",
              "null"
            ],
            "description": "Opening hours as published."
          },
          "description": {
            "type": [
              "string",
              "null"
            ],
            "description": "Company description."
          },
          "social_score": {
            "type": [
              "number",
              "null"
            ],
            "description": "Social reach score (0-100)."
          },
          "instagram_followers": {
            "type": [
              "integer",
              "null"
            ],
            "description": "Instagram followers."
          },
          "facebook_followers": {
            "type": [
              "integer",
              "null"
            ],
            "description": "Facebook followers."
          },
          "has_membership": {
            "type": [
              "boolean",
              "null"
            ],
            "description": "Whether the company runs a membership or loyalty program."
          },
          "membership_type": {
            "type": [
              "string",
              "null"
            ],
            "description": "Membership program type."
          },
          "membership_url": {
            "type": [
              "string",
              "null"
            ],
            "description": "Membership program page."
          },
          "slug": {
            "type": "string",
            "description": "Slug of the company page https://carrentallist.com/company/{slug} and of /api/companies/{slug}."
          },
          "specializations": {
            "type": "array",
            "items": {
              "type": "string"
            },
            "description": "Fleet tags (Exotic, Luxury, Supercar, ...); [] when none."
          },
          "active_vehicle_count": {
            "type": "integer",
            "description": "Active vehicles nationwide (rows without `state` only)."
          },
          "in_state_count": {
            "type": "integer",
            "description": "Active vehicles in the requested state (rows with `state` only)."
          },
          "brands_count": {
            "type": "integer",
            "description": "Number of distinct makes in scope."
          }
        },
        "required": [
          "id",
          "name",
          "slug",
          "brands",
          "cities",
          "brands_count",
          "specializations"
        ]
      },
      "Vehicle": {
        "type": "object",
        "description": "An active vehicle with its company.",
        "properties": {
          "id": {
            "type": "integer"
          },
          "company_id": {
            "type": "integer"
          },
          "make": {
            "type": "string"
          },
          "model": {
            "type": "string"
          },
          "full_name": {
            "type": [
              "string",
              "null"
            ],
            "description": "Make and model as listed."
          },
          "model_normalized": {
            "type": [
              "string",
              "null"
            ],
            "description": "Base model name."
          },
          "year": {
            "type": [
              "integer",
              "null"
            ],
            "description": "Model year when the company publishes it."
          },
          "color": {
            "type": [
              "string",
              "null"
            ],
            "description": "Color when published."
          },
          "price": {
            "type": [
              "string",
              "null"
            ],
            "description": "Published daily rate as scraped from the company's site (digits or the site's text); null = not published, shown as \"Contact for Price\". Never an estimate."
          },
          "image_url": {
            "type": [
              "string",
              "null"
            ],
            "description": "Photo URL on the company's site."
          },
          "listing_url": {
            "type": [
              "string",
              "null"
            ],
            "description": "The vehicle's page on the company's site."
          },
          "location": {
            "type": [
              "string",
              "null"
            ],
            "description": "City of the vehicle when it differs by location."
          },
          "state": {
            "type": [
              "string",
              "null"
            ],
            "description": "Two-letter state code (the company's state when the row has none)."
          },
          "image_fallback_url": {
            "type": [
              "string",
              "null"
            ],
            "description": "Reference photo of the model when the row has no photo."
          },
          "image_fallback_alt": {
            "type": [
              "string",
              "null"
            ],
            "description": "Alt text of the reference photo."
          },
          "image_cached_url": {
            "type": [
              "string",
              "null"
            ],
            "description": "Our 640 px WebP copy of image_url, null until cached."
          },
          "image_fallback_cached_url": {
            "type": [
              "string",
              "null"
            ],
            "description": "Our 640 px WebP copy of the reference photo, null until cached."
          },
          "company_name": {
            "type": [
              "string",
              "null"
            ],
            "description": "Company name."
          },
          "website": {
            "type": [
              "string",
              "null"
            ],
            "description": "Company website."
          },
          "phone": {
            "type": [
              "string",
              "null"
            ],
            "description": "Company phone; null unless a valid U.S. number."
          },
          "company_location": {
            "type": [
              "string",
              "null"
            ],
            "description": "Company home city."
          }
        },
        "required": [
          "id",
          "company_id",
          "make",
          "model"
        ]
      },
      "Pricing": {
        "type": "object",
        "properties": {
          "total_with_prices": {
            "type": "integer"
          },
          "min_price": {
            "type": "number"
          },
          "max_price": {
            "type": "number"
          },
          "top_20": {
            "type": "array",
            "items": {
              "type": "object",
              "properties": {
                "id": {
                  "type": "integer"
                },
                "make": {
                  "type": "string"
                },
                "model": {
                  "type": "string"
                },
                "full_name": {
                  "type": [
                    "string",
                    "null"
                  ],
                  "description": "Make and model."
                },
                "price": {
                  "type": "string",
                  "description": "Published daily rate as scraped."
                },
                "company_id": {
                  "type": "integer"
                },
                "price_numeric": {
                  "type": "number",
                  "description": "The rate in USD per day, parsed from `price`."
                },
                "company_name": {
                  "type": "string"
                },
                "company_website": {
                  "type": "string",
                  "description": "Company website with https:// added when missing."
                }
              }
            },
            "description": "The 20 highest rates."
          },
          "by_make": {
            "type": "array",
            "items": {
              "type": "object",
              "properties": {
                "make": {
                  "type": "string"
                },
                "count": {
                  "type": "integer"
                },
                "min_price": {
                  "type": "number"
                },
                "max_price": {
                  "type": "number"
                },
                "avg_price": {
                  "type": "integer"
                }
              }
            }
          },
          "vehicles": {
            "type": "array",
            "items": {
              "type": "object",
              "properties": {
                "id": {
                  "type": "integer"
                },
                "make": {
                  "type": "string"
                },
                "model": {
                  "type": "string"
                },
                "full_name": {
                  "type": [
                    "string",
                    "null"
                  ],
                  "description": "Make and model."
                },
                "price": {
                  "type": "string",
                  "description": "Published daily rate as scraped."
                },
                "company_id": {
                  "type": "integer"
                },
                "price_numeric": {
                  "type": "number",
                  "description": "The rate in USD per day, parsed from `price`."
                },
                "company_name": {
                  "type": "string"
                },
                "company_website": {
                  "type": "string",
                  "description": "Company website with https:// added when missing."
                }
              }
            },
            "description": "Every priced vehicle, highest rate first."
          }
        }
      },
      "PriceChanges": {
        "type": "object",
        "properties": {
          "period_days": {
            "type": "integer"
          },
          "total_records": {
            "type": "integer"
          },
          "vehicles_with_changes": {
            "type": "integer"
          },
          "price_increases": {
            "type": "integer"
          },
          "price_decreases": {
            "type": "integer"
          },
          "changes": {
            "type": "array",
            "maxItems": 50,
            "items": {
              "type": "object",
              "properties": {
                "vehicle_id": {
                  "type": "integer"
                },
                "make": {
                  "type": "string"
                },
                "model": {
                  "type": "string"
                },
                "company": {
                  "type": [
                    "string",
                    "null"
                  ],
                  "description": "Company name."
                },
                "state": {
                  "type": [
                    "string",
                    "null"
                  ],
                  "description": "State code."
                },
                "previous_price": {
                  "type": [
                    "number",
                    "null"
                  ],
                  "description": "Previous daily rate."
                },
                "current_price": {
                  "type": [
                    "number",
                    "null"
                  ],
                  "description": "Current daily rate."
                },
                "change": {
                  "type": [
                    "number",
                    "null"
                  ],
                  "description": "Difference in USD."
                },
                "change_percent": {
                  "type": [
                    "number",
                    "null"
                  ],
                  "description": "Difference in percent."
                },
                "changed_at": {
                  "type": [
                    "string",
                    "null"
                  ],
                  "description": "When the change was recorded.",
                  "format": "date-time"
                }
              }
            }
          }
        }
      },
      "VehiclePriceHistory": {
        "type": "object",
        "properties": {
          "vehicle": {
            "type": [
              "object",
              "null"
            ],
            "description": "null for an unknown vehicle.",
            "properties": {
              "id": {
                "type": "integer"
              },
              "make": {
                "type": "string"
              },
              "model": {
                "type": "string"
              },
              "full_name": {
                "type": [
                  "string",
                  "null"
                ],
                "description": "Make and model."
              },
              "current_price": {
                "type": [
                  "string",
                  "null"
                ],
                "description": "Published daily rate."
              },
              "company": {
                "type": [
                  "string",
                  "null"
                ],
                "description": "Company name."
              }
            }
          },
          "history": {
            "type": "array",
            "items": {
              "type": "object",
              "properties": {
                "price": {
                  "type": [
                    "number",
                    "null"
                  ],
                  "description": "Recorded rate."
                },
                "price_type": {
                  "type": [
                    "string",
                    "null"
                  ],
                  "description": "daily, weekly, ..."
                },
                "date": {
                  "type": [
                    "string",
                    "null"
                  ],
                  "description": "Recorded at.",
                  "format": "date-time"
                }
              }
            }
          }
        }
      },
      "NewsArticle": {
        "type": "object",
        "properties": {
          "id": {
            "type": "integer"
          },
          "slug": {
            "type": "string",
            "description": "Article page: https://carrentallist.com/news/{slug}."
          },
          "title": {
            "type": "string"
          },
          "subtitle": {
            "type": [
              "string",
              "null"
            ],
            "description": "Subtitle."
          },
          "excerpt": {
            "type": [
              "string",
              "null"
            ],
            "description": "Summary."
          },
          "generated_image_url": {
            "type": [
              "string",
              "null"
            ],
            "description": "Cover image."
          },
          "published_at": {
            "type": [
              "string",
              "null"
            ],
            "description": "Publication time.",
            "format": "date-time"
          },
          "original_url": {
            "type": [
              "string",
              "null"
            ],
            "description": "Source article."
          }
        },
        "required": [
          "id",
          "slug",
          "title"
        ]
      },
      "Error": {
        "type": "object",
        "properties": {
          "error": {
            "type": "string"
          },
          "allowed": {
            "type": "array",
            "items": {
              "type": "string"
            }
          }
        },
        "required": [
          "error"
        ]
      }
    },
    "headers": {
      "X-Total-Count": {
        "description": "Rows matching the filters before limit/offset.",
        "schema": {
          "type": "integer"
        }
      },
      "Link": {
        "description": "RFC 8288 link to the next page (rel=\"next\") when more rows follow.",
        "schema": {
          "type": "string"
        }
      }
    },
    "responses": {
      "BadRequest": {
        "description": "Invalid parameter.",
        "content": {
          "application/json": {
            "schema": {
              "$ref": "#/components/schemas/Error"
            },
            "example": {
              "error": "limit must be an integer from 1 to 500"
            }
          }
        }
      },
      "NotFound": {
        "description": "Not found.",
        "content": {
          "application/json": {
            "schema": {
              "$ref": "#/components/schemas/Error"
            },
            "example": {
              "error": "Company not found"
            }
          }
        }
      },
      "Unavailable": {
        "description": "Catalog temporarily unavailable; retry later.",
        "content": {
          "application/json": {
            "schema": {
              "$ref": "#/components/schemas/Error"
            },
            "example": {
              "error": "Service temporarily unavailable"
            }
          }
        }
      }
    }
  }
}