Getting Started

Welcome to the Tire Library API. This API provides read-only access to our tire catalog, vehicle fitment data, and rebate information.

Authentication

All API requests must include your company's API key via the x-api-key header:

x-api-key: tl_live_your_key
API keys are per-company. Generate and manage your keys from the Billing page in your Tire Library account. Only users with billing permissions can create or revoke keys.
Never expose your API key in client-side code. The x-api-key header should only be sent from your backend server. If you’re building a web or mobile app, route API requests through your own server-side proxy rather than calling the Tire Library API directly from the browser or app. This prevents your key from being visible in network requests.

Quick Start

curl -H "x-api-key: tl_live_your_key" \
  "https://app.tireweblibrary.com/api/v1/tires/search?width=205&aspect_ratio=65&rim_size=15"
const response = await fetch(
  "https://app.tireweblibrary.com/api/v1/tires/search?width=205&aspect_ratio=65&rim_size=15",
  { headers: { "x-api-key": "tl_live_your_key" } }
);
const data = await response.json();
import requests

response = requests.get(
    "https://app.tireweblibrary.com/api/v1/tires/search",
    params={"width": "205", "aspect_ratio": "65", "rim_size": "15"},
    headers={"x-api-key": "tl_live_your_key"},
)
data = response.json()

Rate Limits

API requests are limited to 200 requests per minute per API key by default. Exceeding this limit returns a 429 Too Many Requests response.

Need a higher limit? Contact us to request a per-key rate limit override.

Read-Only Access

API keys only support GET requests. POST, PUT, PATCH, and DELETE requests will receive a 405 Method Not Allowed response.

Error Responses

StatusCondition
401Missing or invalid API key
403Your subscription does not include API access
404Requested resource not found
405HTTP method not allowed (API is read-only)
429Rate limit exceeded — slow down and retry
500Internal server error

Base URL & Versioning

All endpoints are versioned via the URL path. The current version is v1:

https://app.tireweblibrary.com/api/v1/

Every request must include the version segment. Requests without a version (e.g. /api/tires/search) will return a 400 error with the message Unsupported API version.

Why versioned URLs? Versioning in the URL path ensures that if we introduce breaking changes in a future version (e.g. /api/v2/), your existing integration on /api/v1/ will continue to work unchanged.

Response Format

All responses are JSON with snake_case property names. All string filter values are case-insensitive — for example, make_name=Michelin and make_name=MICHELIN produce the same results. Paginated endpoints return a standard envelope:

{
  "current_page": 1,
  "data": [ ... ],
  "from": 1,
  "last_page": 5,
  "per_page": 20,
  "to": 20,
  "total": 100
}

Pagination

Several endpoints return paginated results. Control pagination with two query parameters:

ParameterTypeDescription
pageintPage number, 1-based. Defaults to 1.
per_pageintResults per page. Defaults vary by endpoint (see below). Maximum 100.

Default per_page by Endpoint

EndpointDefaultMax
/api/v1/tires/search20100
/api/v1/tires/catalog30100
/api/v1/tire-patterns/catalog24100
/api/v1/rebate30100

Paginated Response Fields

FieldTypeDescription
current_pageintThe page number returned
dataarrayResults for the current page
fromint?1-based index of the first result in this page
last_pageintTotal number of pages
per_pageintNumber of results per page
toint?1-based index of the last result in this page
totalintTotal number of results across all pages

Iterating Pages

Fetch page 1, check last_page, then request subsequent pages:

# Fetch first page
curl -H "x-api-key: tl_live_your_key" \
  "https://app.tireweblibrary.com/api/v1/tires/search?width=205&per_page=100&page=1"

# Fetch subsequent pages by incrementing the page parameter
let page = 1;
let allResults = [];

while (true) {
  const res = await fetch(
    `https://app.tireweblibrary.com/api/v1/tires/search?width=205&per_page=100&page=${page}`,
    { headers: { "x-api-key": "tl_live_your_key" } }
  );
  const data = await res.json();
  allResults.push(...data.data);

  if (page >= data.last_page) break;
  page++;
}
import requests

all_results = []
page = 1

while True:
    response = requests.get(
        "https://app.tireweblibrary.com/api/v1/tires/search",
        params={"width": "205", "per_page": 100, "page": page},
        headers={"x-api-key": "tl_live_your_key"},
    )
    data = response.json()
    all_results.extend(data["data"])

    if page >= data["last_page"]:
        break
    page += 1
Tip: Use per_page=100 to minimize the number of requests when fetching large result sets. Requesting pages beyond last_page returns an empty data array.

Available Endpoints

EndpointDescription
TiresSearch tires by size, browse with faceted filters, get tire details
Tire MakesList all tire makes (manufacturers)
Tire CategoriesList all tire categories for filtering
Tire PatternsList tire patterns by make, browse with faceted filters, get pattern details
Vehicle FitmentsLook up tire fitments by year/make/model/trim
RebatesBrowse available rebates and rebate details

OpenAPI Specification

The API provides a machine-readable OpenAPI 3.0 specification (also known as Swagger). You can use it to generate client SDKs, import into API tools, or explore the API interactively.

ResourceURLDescription
Swagger UIhttps://app.tireweblibrary.com/api/swaggerInteractive documentation with “Try it out” for every endpoint
OpenAPI JSONhttps://app.tireweblibrary.com/api/swagger/v1/swagger.jsonMachine-readable spec for code generation and tooling

Using the OpenAPI Spec

Import into API tools: Load the JSON URL into Postman, Insomnia, or Hoppscotch to get a pre-configured collection of all endpoints.

Generate client SDKs: Use OpenAPI Generator to create type-safe clients in your language:

# Install the generator CLI
npm install @openapitools/openapi-generator-cli -g

# Generate a TypeScript client
openapi-generator-cli generate \
  -i https://app.tireweblibrary.com/api/swagger/v1/swagger.json \
  -g typescript-axios \
  -o ./tire-library-client
// Install via npx (no global install needed)
// npx @openapitools/openapi-generator-cli generate \
//   -i https://app.tireweblibrary.com/api/swagger/v1/swagger.json \
//   -g javascript \
//   -o ./tire-library-client
# Generate a Python client
# npx @openapitools/openapi-generator-cli generate \
#   -i https://app.tireweblibrary.com/api/swagger/v1/swagger.json \
#   -g python \
#   -o ./tire-library-client
Authentication in Swagger UI: Click the Authorize button in Swagger UI and enter your API key to test any endpoint directly from the browser.

Tires

Three endpoints for discovering and inspecting tires: a simple dimensional search, a full faceted catalog browser, and a detail endpoint for individual tire sizes.

Case-insensitive filtering. String filter values such as make_name, category, season, terrain, and exclude_category are case-insensitive — for example, make_name=Michelin and make_name=MICHELIN produce the same results.

Search Tires

GET /api/v1/tires/search

Search tire sizes by dimensional attributes. Returns paginated results with basic tire information.

Query Parameters

ParameterTypeRequiredDefaultDescription
widthstringNoTire width in mm (e.g. 205)
aspect_ratiostringNoAspect ratio (e.g. 65)
rim_sizestringNoRim diameter in inches (e.g. 15)
load_ratingstringNoLoad rating code (e.g. 97)
speed_ratingstringNoSpeed rating code (e.g. H)
exclude_categorystring[]No[]Exclude tires in these categories. Repeat for multiple: ?exclude_category=OTR/Construction, Earthmover&exclude_category=Industrial
pageintNo1Page number (1-based)
per_pageintNo20Results per page (max 100)

Code Examples

curl -H "x-api-key: tl_live_your_key" \
  "https://app.tireweblibrary.com/api/v1/tires/search?width=205&aspect_ratio=65&rim_size=15"
const response = await fetch(
  "https://app.tireweblibrary.com/api/v1/tires/search?width=205&aspect_ratio=65&rim_size=15",
  { headers: { "x-api-key": "tl_live_your_key" } }
);
const data = await response.json();
import requests

response = requests.get(
    "https://app.tireweblibrary.com/api/v1/tires/search",
    params={"width": "205", "aspect_ratio": "65", "rim_size": "15"},
    headers={"x-api-key": "tl_live_your_key"},
)
data = response.json()

Response

{
  "current_page": 1,
  "data": [
    {
      "id": 12345,
      "name": "205/65R15",
      "item_number": "12345",
      "tire_model_id": 678,
      "tire_make_id": 90,
      "width": "205",
      "aspect_ratio": "65",
      "rim_size": "15",
      "load_rating": "97",
      "speed_rating": "H",
      "make_name": "Michelin",
      "model_name": "Defender T+H",
      "season": "All Season",
      "category": "Passenger",
      "three_pmsf": false,
      "run_flat": false,
      "mud_and_snow": true,
      "thumbnail_image": "https://..."
    }
  ],
  "from": 1,
  "last_page": 3,
  "per_page": 20,
  "to": 20,
  "total": 55
}

Response Fields

FieldTypeDescription
idlongUnique tire size identifier
namestringTire size name (e.g. "205/65R15")
item_numberstring?Item number / SKU
tire_model_idlongID of the tire pattern
tire_make_idlongID of the tire make
widthstring?Tire width in mm
aspect_ratiostring?Aspect ratio
rim_sizestring?Rim diameter in inches
load_ratingstring?Load rating code
speed_ratingstring?Speed rating code
make_namestring?Make name (e.g. "Michelin")
model_namestring?Pattern name (e.g. "Defender T+H")
seasonstring?Season classification
categorystring?Tire category
warrantystring?Warranty mileage
ply_ratingstring?Ply rating
load_rangestring?Load range (e.g. "SL")
utqgstring?UTQG rating (e.g. "820 A B")
tread_depthstring?Tread depth (32nds of an inch)
weightstring?Tire weight (lbs)
make_imagestring?URL to make logo image
terrainstring?Terrain classification
studdablebool?Studdable tire
three_pmsfboolThree-Peak Mountain Snowflake certification
run_flatboolRun-flat tire
mud_and_snowboolM+S rated
thumbnail_imagestring?URL to tire thumbnail image

Error Responses

StatusCondition
401Missing or invalid API key

Related Endpoints


Browse Catalog

GET /api/v1/tires/catalog

Full-featured faceted catalog browser. Returns matching tires along with available facet values for building interactive filters. Most parameters accept multiple values — repeat the query parameter for each value.

Query Parameters

ParameterTypeRequiredDefaultDescription
searchstringNoFree-text search
make_namestring[]No[]Filter by make. Repeat for multiple: ?make_name=Michelin&make_name=Bridgestone
widthstring[]No[]Filter by width
aspect_ratiostring[]No[]Filter by aspect ratio
rim_sizestring[]No[]Filter by rim size
speed_ratingstring[]No[]Filter by speed rating
load_ratingstring[]No[]Filter by load rating
ply_ratingstring[]No[]Filter by ply rating
load_rangestring[]No[]Filter by load range
utqgstring[]No[]Filter by UTQG
warrantystring[]No[]Filter by warranty
item_numberstring[]No[]Filter by item number
seasonstring[]No[]Filter by season
terrainstring[]No[]Filter by terrain
categorystring[]No[]Filter by category
exclude_categorystring[]No[]Exclude tires in these categories. Repeat for multiple: ?exclude_category=OTR/Construction, Earthmover&exclude_category=Industrial
three_pmsfboolNoThree-Peak Mountain Snowflake
run_flatboolNoRun-flat tires only
mud_and_snowboolNoM+S rated only
studdableboolNoStuddable only
sortstringNoSort key (e.g. name_asc)
pageintNo1Page number
per_pageintNo30Results per page (max 100)

Code Examples

curl -H "x-api-key: tl_live_your_key" \
  "https://app.tireweblibrary.com/api/v1/tires/catalog?make_name=Michelin&per_page=30"
const response = await fetch(
  "https://app.tireweblibrary.com/api/v1/tires/catalog?make_name=Michelin&per_page=30",
  { headers: { "x-api-key": "tl_live_your_key" } }
);
const data = await response.json();
import requests

response = requests.get(
    "https://app.tireweblibrary.com/api/v1/tires/catalog",
    params={"make_name": "Michelin", "per_page": 30},
    headers={"x-api-key": "tl_live_your_key"},
)
data = response.json()

Response

{
  "results": {
    "current_page": 1,
    "data": [
      {
        "id": 12345,
        "name": "205/65R15",
        "item_number": "12345",
        "tire_model_id": 678,
        "tire_make_id": 90,
        "width": "205",
        "aspect_ratio": "65",
        "rim_size": "15",
        "load_rating": "97",
        "speed_rating": "H",
        "make_name": "Michelin",
        "model_name": "Defender T+H",
        "season": "All Season",
        "category": "Passenger",
        "warranty": "90000",
        "ply_rating": "4",
        "load_range": "SL",
        "utqg": "820 A B",
        "tread_depth": "9.5",
        "weight": "22",
        "make_image": "https://...",
        "terrain": "Highway",
        "studdable": false,
        "three_pmsf": false,
        "run_flat": false,
        "mud_and_snow": true,
        "thumbnail_image": "https://..."
      }
    ],
    "from": 1,
    "last_page": 5,
    "per_page": 30,
    "to": 30,
    "total": 150
  },
  "facets": {
    "make_name": ["Michelin", "Bridgestone", "Goodyear", "..."],
    "width": ["155", "165", "175", "185", "195", "205", "..."],
    "aspect_ratio": ["40", "45", "50", "55", "60", "65", "..."],
    "rim_size": ["14", "15", "16", "17", "18", "..."],
    "speed_rating": ["H", "V", "W", "Y", "..."],
    "load_rating": ["93", "97", "101", "..."],
    "ply_rating": ["4", "6", "8", "..."],
    "load_range": ["SL", "XL", "E", "..."],
    "utqg": ["820 A B", "740 A A", "..."],
    "warranty": ["90000", "80000", "60000", "..."],
    "season": ["All Season", "Winter", "Summer", "..."],
    "terrain": ["Highway", "All-Terrain", "Mud-Terrain", "..."],
    "category": ["Passenger", "Light Truck", "..."]
  }
}

Response Fields

FieldTypeDescription
resultsobjectPaginated tire results (same fields as Search Tires)
facetsobjectAvailable filter values for building interactive UIs
facets.make_namestring[]Distinct make names in the result set
facets.widthstring[]Distinct widths
facets.aspect_ratiostring[]Distinct aspect ratios
facets.rim_sizestring[]Distinct rim sizes
facets.speed_ratingstring[]Distinct speed ratings
facets.load_ratingstring[]Distinct load ratings
facets.ply_ratingstring[]Distinct ply ratings
facets.load_rangestring[]Distinct load ranges
facets.utqgstring[]Distinct UTQG ratings
facets.warrantystring[]Distinct warranty values
facets.seasonstring[]Distinct seasons
facets.terrainstring[]Distinct terrain values
facets.categorystring[]Distinct categories

Error Responses

StatusCondition
401Missing or invalid API key

Related Endpoints


Get Tire by ID

GET /api/v1/tires/{id}

Get the full specification sheet for a single tire size, including dimensions, performance ratings, images, rebates, and vehicle fitments.

Path Parameters

ParameterTypeDescription
idlongTire size ID (obtained from search or catalog endpoints)

Query Parameters

ParameterTypeRequiredDefaultDescription
rebate_statusstringNo— (returns all)Filter rebates by status: Active, Upcoming, or Expired. Without this parameter, all rebates are returned.

Code Examples

curl -H "x-api-key: tl_live_your_key" \
  "https://app.tireweblibrary.com/api/v1/tires/12345"

# Only include active rebates
curl -H "x-api-key: tl_live_your_key" \
  "https://app.tireweblibrary.com/api/v1/tires/12345?rebate_status=Active"
const response = await fetch(
  "https://app.tireweblibrary.com/api/v1/tires/12345",
  { headers: { "x-api-key": "tl_live_your_key" } }
);
const tire = await response.json();

// Only include active rebates
const response2 = await fetch(
  "https://app.tireweblibrary.com/api/v1/tires/12345?rebate_status=Active",
  { headers: { "x-api-key": "tl_live_your_key" } }
);
const tire2 = await response2.json();
import requests

response = requests.get(
    "https://app.tireweblibrary.com/api/v1/tires/12345",
    headers={"x-api-key": "tl_live_your_key"},
)
tire = response.json()

# Only include active rebates
response = requests.get(
    "https://app.tireweblibrary.com/api/v1/tires/12345",
    params={"rebate_status": "Active"},
    headers={"x-api-key": "tl_live_your_key"},
)
tire = response.json()

Response

{
  "id": 12345,
  "name": "205/65R15",
  "item_number": "12345",
  "width": "205",
  "aspect_ratio": "65",
  "rim_size": "15",
  "load_rating": "97",
  "speed_rating": "H",
  "price": "129.99",
  "load_capacity_dual": "1709",
  "load_capacity_single": "1609",
  "max_inflation_pressure": "44",
  "revolutions_per_mile": "775",
  "rolling_circumference": "81.8",
  "diameter_overall": "25.5",
  "sidewall": "5.3",
  "section_width": "8.5",
  "weight": "22",
  "warranty": "90000",
  "utqg": "820 A B",
  "ply_rating": "4",
  "load_range": "SL",
  "tread_depth": "9.5",
  "category": "Passenger",
  "season": "All Season",
  "terrain": "Highway",
  "studdable": false,
  "three_pmsf": false,
  "run_flat": false,
  "mud_and_snow": true,
  "thumbnail_image": "https://...",
  "tire_make": {
    "id": 90,
    "name": "Michelin",
    "image_url": "https://...",
    "dot_reg_url": "https://..."
  },
  "tire_model": {
    "id": 678,
    "name": "Defender T+H",
    "image_url": "https://...",
    "image_360_url": "https://...",
    "image_360_thumbnail_url": "https://...",
    "video_url": "https://...",
    "manufacturer_url": "https://...",
    "features": "Extended tread life...",
    "benefits": "All-season confidence...",
    "description": "...",
    "three_pmsf": false
  },
  "rebates": [
    {
      "id": 10,
      "name": "Spring Rebate",
      "description": "Save on select Michelin tires",
      "start_date": "2025-03-01",
      "end_date": "2025-05-31",
      "global": false,
      "status": "Active"
    }
  ],
  "fitments_grouped": {
    "2024": {
      "SE": [
        { "trim": "SE", "years": "2023, 2024" }
      ]
    }
  }
}

Response Fields

FieldTypeDescription
idlongUnique tire size identifier
namestringTire size name (e.g. "205/65R15")
item_numberstring?Item number / SKU
widthstring?Tire width in mm
aspect_ratiostring?Aspect ratio
rim_sizestring?Rim diameter in inches
load_ratingstring?Load rating code
speed_ratingstring?Speed rating code
pricestring?List price
load_capacity_dualstring?Load capacity for dual fitment (lbs)
load_capacity_singlestring?Load capacity for single fitment (lbs)
max_inflation_pressurestring?Maximum inflation pressure (PSI)
revolutions_per_milestring?Revolutions per mile
rolling_circumferencestring?Rolling circumference (inches)
diameter_overallstring?Overall diameter (inches)
sidewallstring?Sidewall height (inches)
section_widthstring?Section width (inches)
weightstring?Tire weight (lbs)
warrantystring?Warranty mileage
utqgstring?UTQG rating (e.g. "820 A B")
ply_ratingstring?Ply rating
load_rangestring?Load range (e.g. "SL")
tread_depthstring?Tread depth (32nds of an inch)
categorystring?Tire category
seasonstring?Season classification
terrainstring?Terrain classification
studdablebool?Studdable tire
three_pmsfboolThree-Peak Mountain Snowflake certification
run_flatboolRun-flat tire
mud_and_snowboolM+S rated
thumbnail_imagestring?URL to tire thumbnail image
tire_makeobject?Nested make object with id, name, image_url, dot_reg_url
tire_modelobject?Nested pattern object with id, name, image_url, image_360_url, image_360_thumbnail_url, video_url, manufacturer_url, features, benefits, description, three_pmsf
rebatesarrayApplicable rebates with id, name, description, start_date, end_date, global, status
fitments_groupedobject?Vehicle fitments grouped by year and trim. Each item has trim (string) and years (string)

Error Responses

StatusCondition
401Missing or invalid API key
404Tire with the given ID does not exist

Related Endpoints

Compare & Export not available. The /api/v1/tires/compare and /api/v1/tires/compare-export endpoints require a logged-in web session and are not available via API keys.

Tire Makes

List all tire makes (manufacturers) in the catalog. Returns the make ID, name, logo image, and DOT registration URL for each make.

Case-insensitive filtering. Make names are stored in uppercase and are case-insensitive as filter values — for example, make_name=Michelin and make_name=MICHELIN produce the same results.

List Tire Makes

GET /api/v1/tire-makes

Returns all tire makes sorted alphabetically by name. No pagination — the dataset is small enough to return in a single request.

Code Examples

curl -H "x-api-key: tl_live_your_key" \
  "https://app.tireweblibrary.com/api/v1/tire-makes"
const response = await fetch(
  "https://app.tireweblibrary.com/api/v1/tire-makes",
  { headers: { "x-api-key": "tl_live_your_key" } }
);
const makes = await response.json();
import requests

response = requests.get(
    "https://app.tireweblibrary.com/api/v1/tire-makes",
    headers={"x-api-key": "tl_live_your_key"},
)
makes = response.json()

Response

[
  {
    "id": 90,
    "name": "Michelin",
    "image_url": "https://...",
    "dot_reg_url": "https://..."
  },
  {
    "id": 42,
    "name": "Bridgestone",
    "image_url": "https://...",
    "dot_reg_url": null
  }
]

Response Fields

FieldTypeDescription
idlongUnique tire make identifier
namestringMake name (e.g. "Michelin")
image_urlstring?URL to the make's logo/brand image
dot_reg_urlstring?URL to DOT registration information

Error Responses

StatusCondition
401Missing or invalid API key

Related Endpoints


Common Make Names

The catalog contains 650+ makes. The most commonly used makes are:

Common Make Names
MICHELIN
BRIDGESTONE
GOODYEAR
CONTINENTAL
PIRELLI
HANKOOK
KUMHO
NITTO
COOPER
FIRESTONE
Full list: Use GET /api/v1/tire-makes to retrieve all 650+ makes with their IDs, logos, and DOT registration URLs.

Tire Categories

List all tire categories in the catalog. Categories classify tires by application (e.g. “Passenger Car”, “Commercial Truck/Bus”, “Agricultural”). Use these values with the category and exclude_category filters on search and catalog endpoints.

Case-insensitive filtering. Category values are case-insensitive as filter values — for example, category=Passenger Car and category=passenger car produce the same results.

List Tire Categories

GET /api/v1/tire-categories

Returns all tire categories sorted by tire count (most common first). No pagination — the dataset is small enough to return in a single request.

Code Examples

curl -H "x-api-key: tl_live_your_key" \
  "https://app.tireweblibrary.com/api/v1/tire-categories"
const response = await fetch(
  "https://app.tireweblibrary.com/api/v1/tire-categories",
  { headers: { "x-api-key": "tl_live_your_key" } }
);
const categories = await response.json();
import requests

response = requests.get(
    "https://app.tireweblibrary.com/api/v1/tire-categories",
    headers={"x-api-key": "tl_live_your_key"},
)
categories = response.json()

Response

Returns a flat JSON array of category strings, ordered by tire count descending.

[
  "Commercial Truck/Bus",
  "Passenger Car",
  "Passenger Light Truck/SUV, Light Truck",
  "Agricultural, Lawn & Garden/Golf",
  "Trailer, Special Trailer (ST)",
  "Passenger Car, CAR, Performance, UHP",
  "OTR/Construction, Earthmover",
  "..."
]

Response Fields

FieldTypeDescription
(element)stringCategory string for use as category or exclude_category filter values
Note: Categories are exact-match strings. exclude_category=Passenger Car excludes only tires with the exact category “Passenger Car” — it does not exclude “Passenger Car, Performance, Touring”. To exclude multiple categories, repeat the parameter for each value.

Error Responses

StatusCondition
401Missing or invalid API key

Related Endpoints


Category Reference

The complete list of 70 tire categories, grouped by application.

Passenger Car

Category
Passenger Car
Passenger Car, CAR
Passenger Car, CAR, Classic/Vintage
Passenger Car, CAR, Classic/Vintage, Performance, Touring
Passenger Car, CAR, Competition/Racing
Passenger Car, CAR, Competition/Racing, Performance
Passenger Car, CAR, Competition/Racing, Performance, UHP
Passenger Car, CAR, Performance
Passenger Car, CAR, Performance, HP
Passenger Car, CAR, Performance, HP, Touring
Passenger Car, CAR, Performance, Touring
Passenger Car, CAR, Performance, UHP
Passenger Car, CAR, Performance, UHP, HP
Passenger Car, CAR, SUV/CUV
Passenger Car, CAR, SUV/CUV, Performance
Passenger Car, CAR, SUV/CUV, Performance, HP
Passenger Car, CAR, SUV/CUV, Performance, Touring
Passenger Car, CAR, SUV/CUV, Performance, UHP
Passenger Car, Performance
Passenger Car, Performance, HP
Passenger Car, Performance, Touring
Passenger Car, Performance, UHP
Passenger Car, SUV/CUV
Passenger Car, SUV/CUV, Performance
Passenger Car, SUV/CUV, Performance, HP
Passenger Car, SUV/CUV, Performance, HP, Touring
Passenger Car, SUV/CUV, Performance, Touring
Passenger Car, SUV/CUV, Performance, UHP

Passenger Light Truck/SUV

Category
Passenger Light Truck/SUV
Passenger Light Truck/SUV, Light Truck
Passenger Light Truck/SUV, Light Truck, SUV
Passenger Light Truck/SUV, SUV

Commercial

Category
Commercial Light Truck/Van
Commercial Light Truck/Van, Commercial Light Truck
Commercial Light Truck/Van, Commercial Van
Commercial Truck/Bus
Commercial Truck/Bus, Bus/Coach
Commercial Truck/Bus, Bus/Coach, Service/Application, Regional Service, Long Haul
Commercial Truck/Bus, Medium-Duty Truck
Commercial Truck/Bus, Medium-Duty Truck, Service/Application
Commercial Truck/Bus, Service/Application
Commercial Truck/Bus, Service/Application, Long Haul
Commercial Truck/Bus, Service/Application, Mixed-S
Commercial Truck/Bus, Service/Application, Regional Service
Commercial Truck/Bus, Service/Application, Regional Service, Long Haul
Commercial Truck/Bus, Service/Application, Regional Service, Mixed-S
Commercial Truck/Bus, Service/Application, Urban/P

Agricultural

Category
Agricultural
Agricultural, Forestry/Logging
Agricultural, Front Tractor
Agricultural, High Flotation
Agricultural, Implement
Agricultural, Lawn & Garden/Golf
Agricultural, Rear Tractor
Agricultural, Tractor

OTR/Construction

Category
OTR/Construction
OTR/Construction, Compactor
OTR/Construction, Earthmover
OTR/Construction, Loader/Dozer/Grader

Industrial

Category
Industrial

Sport ATV/UTV

Category
Sport ATV/UTV
Sport ATV/UTV, Sport ATV
Sport ATV/UTV, Sport UTV/SXS
Sport ATV/UTV, Sport UTV/SXS, Sport ATV

Trailer

Category
Trailer
Trailer, Special Trailer (ST)

Motorcycle

Category
Motorcycle

Temporary Spare

Category
Temporary Spare
Temporary Spare, Temporary/Compact Spare

Undefined

Category
Undefined

Tire Patterns

Three endpoints for discovering tire patterns: list patterns for a specific make, browse with faceted filters, or get full details for a single pattern.

Case-insensitive filtering. String filter values such as make_name and search are case-insensitive — for example, make_name=Michelin and make_name=MICHELIN produce the same results.

List Tire Patterns by Make

GET /api/v1/tire-patterns

Returns all tire patterns for a given make, sorted alphabetically by name. No pagination — the dataset is small enough to return in a single request. The make_id parameter is required. Optionally filter patterns by name using the search parameter.

Query Parameters

ParameterTypeRequiredDefaultDescription
make_idlongYesTire make ID from /api/v1/tire-makes
searchstringNoFree-text search to filter pattern names

Code Examples

curl -H "x-api-key: tl_live_your_key" \
  "https://app.tireweblibrary.com/api/v1/tire-patterns?make_id=90"

# Filter patterns by name
curl -H "x-api-key: tl_live_your_key" \
  "https://app.tireweblibrary.com/api/v1/tire-patterns?make_id=90&search=alpin"
const response = await fetch(
  "https://app.tireweblibrary.com/api/v1/tire-patterns?make_id=90",
  { headers: { "x-api-key": "tl_live_your_key" } }
);
const patterns = await response.json();

// Filter patterns by name
const filtered = await fetch(
  "https://app.tireweblibrary.com/api/v1/tire-patterns?make_id=90&search=alpin",
  { headers: { "x-api-key": "tl_live_your_key" } }
);
const matches = await filtered.json();
import requests

response = requests.get(
    "https://app.tireweblibrary.com/api/v1/tire-patterns",
    params={"make_id": 90},
    headers={"x-api-key": "tl_live_your_key"},
)
patterns = response.json()

# Filter patterns by name
response = requests.get(
    "https://app.tireweblibrary.com/api/v1/tire-patterns",
    params={"make_id": 90, "search": "alpin"},
    headers={"x-api-key": "tl_live_your_key"},
)
matches = response.json()

Response

[
  {
    "id": 42,
    "name": "Alpin 6",
    "description": "Winter tire for passenger cars",
    "image_url": "https://...",
    "size_count": 34
  },
  {
    "id": 43,
    "name": "CrossClimate 2",
    "description": "All-season tire with winter certification",
    "image_url": "https://...",
    "size_count": 89
  }
]

Response Fields

FieldTypeDescription
idlongUnique tire pattern identifier
namestringPattern name (e.g. "CrossClimate 2")
descriptionstring?Pattern description, if available
image_urlstring?Pattern image URL; falls back to a size thumbnail if no pattern image exists
size_countintNumber of tire sizes available for this pattern

Error Responses

StatusCondition
401Missing or invalid API key
400make_id is missing or invalid
404Tire make with the given make_id does not exist

Related Endpoints


Browse Catalog

GET /api/v1/tire-patterns/catalog

Browse tire patterns with optional filtering by make name and free-text search. Returns paginated results with facets for building interactive filters.

Query Parameters

ParameterTypeRequiredDefaultDescription
searchstringNoFree-text search
make_namestring[]No[]Filter by make. Repeat for multiple values.
categorystring[]No[]Filter by category. Repeat for multiple values: ?category=Passenger Car&category=Light Truck
exclude_categorystring[]No[]Exclude patterns in these categories. Repeat for multiple: ?exclude_category=Industrial&exclude_category=Commercial Truck/Bus
pageintNo1Page number
per_pageintNo24Results per page (max 100)

Code Examples

curl -H "x-api-key: tl_live_your_key" \
  "https://app.tireweblibrary.com/api/v1/tire-patterns/catalog?make_name=Michelin"
const response = await fetch(
  "https://app.tireweblibrary.com/api/v1/tire-patterns/catalog?make_name=Michelin",
  { headers: { "x-api-key": "tl_live_your_key" } }
);
const data = await response.json();
import requests

response = requests.get(
    "https://app.tireweblibrary.com/api/v1/tire-patterns/catalog",
    params={"make_name": "Michelin"},
    headers={"x-api-key": "tl_live_your_key"},
)
data = response.json()

Response

{
  "results": {
    "current_page": 1,
    "data": [
      {
        "id": 678,
        "name": "Defender T+H",
        "description": "All-season tire...",
        "image_url": "https://...",
        "make_name": "Michelin",
        "make_image": "https://...",
        "size_count": 42
      }
    ],
    "from": 1,
    "last_page": 4,
    "per_page": 24,
    "to": 24,
    "total": 85
  },
  "facets": {
    "make_name": ["Michelin", "Bridgestone", "Goodyear", "..."],
    "category": ["Passenger Car", "Light Truck", "Commercial Truck/Bus", "..."]
  }
}

Response Fields

FieldTypeDescription
idlongUnique pattern identifier
namestringPattern name
descriptionstring?Pattern description
image_urlstring?Pattern image URL
make_namestring?Make name (e.g. "Michelin")
make_imagestring?Make logo image URL
size_countintNumber of tire sizes available
facets.make_namestring[]Distinct make names in the result set
facets.categorystring[]Distinct categories in the result set

Error Responses

StatusCondition
401Missing or invalid API key

Related Endpoints


Get Tire Pattern by ID

GET /api/v1/tire-patterns/{id}

Get full detail for a single tire pattern, including all its available sizes and applicable rebates.

Path Parameters

ParameterTypeDescription
idlongTire pattern ID

Query Parameters

ParameterTypeRequiredDefaultDescription
rebate_statusstringNo— (returns all)Filter rebates by status: Active, Upcoming, or Expired. Without this parameter, all rebates are returned.

Code Examples

curl -H "x-api-key: tl_live_your_key" \
  "https://app.tireweblibrary.com/api/v1/tire-patterns/678"

# Only include active rebates
curl -H "x-api-key: tl_live_your_key" \
  "https://app.tireweblibrary.com/api/v1/tire-patterns/678?rebate_status=Active"
const response = await fetch(
  "https://app.tireweblibrary.com/api/v1/tire-patterns/678",
  { headers: { "x-api-key": "tl_live_your_key" } }
);
const pattern = await response.json();

// Only include active rebates
const response2 = await fetch(
  "https://app.tireweblibrary.com/api/v1/tire-patterns/678?rebate_status=Active",
  { headers: { "x-api-key": "tl_live_your_key" } }
);
const pattern2 = await response2.json();
import requests

response = requests.get(
    "https://app.tireweblibrary.com/api/v1/tire-patterns/678",
    headers={"x-api-key": "tl_live_your_key"},
)
pattern = response.json()

# Only include active rebates
response = requests.get(
    "https://app.tireweblibrary.com/api/v1/tire-patterns/678",
    params={"rebate_status": "Active"},
    headers={"x-api-key": "tl_live_your_key"},
)
pattern = response.json()

Response

{
  "id": 678,
  "name": "Defender T+H",
  "image_url": "https://...",
  "image_360_url": "https://...",
  "image_360_thumbnail_url": "https://...",
  "video_url": "https://...",
  "manufacturer_url": "https://...",
  "benefits": "All-season confidence...",
  "description": "The Michelin Defender...",
  "features": "IntelliSipe Technology...",
  "three_pmsf": false,
  "tire_make": {
    "id": 90,
    "name": "Michelin",
    "image_url": "https://...",
    "dot_reg_url": "https://..."
  },
  "tire_sizes": [
    {
      "id": 12345,
      "name": "205/65R15",
      "item_number": "12345",
      "three_pmsf": false,
      "season": "All Season",
      "terrain": "Highway",
      "studdable": false,
      "category": "Passenger",
      "run_flat": false,
      "mud_and_snow": true
    }
  ],
  "rebates": [
    {
      "id": 10,
      "name": "Spring Rebate",
      "description": "Save on select Michelin tires",
      "start_date": "2025-03-01",
      "end_date": "2025-05-31",
      "global": false,
      "status": "Active"
    }
  ]
}

Response Fields

FieldTypeDescription
idlongUnique pattern identifier
namestringPattern name
image_urlstring?Pattern image URL
image_360_urlstring?360-degree image URL
image_360_thumbnail_urlstring?360-degree image thumbnail URL
video_urlstring?Promotional video URL
manufacturer_urlstring?Manufacturer product page URL
benefitsstring?Pattern benefits
descriptionstring?Pattern description
featuresstring?Pattern features
three_pmsfboolThree-Peak Mountain Snowflake certification
tire_makeobject?Nested make object with id, name, image_url, dot_reg_url
tire_sizesarrayAvailable tire sizes with id, name, item_number, three_pmsf, season, terrain, studdable, category, run_flat, mud_and_snow
rebatesarrayApplicable rebates with id, name, description, start_date, end_date, global, status

Error Responses

StatusCondition
401Missing or invalid API key
404Tire pattern with the given ID does not exist

Related Endpoints

Vehicle Fitments

Look up tire fitments for a specific vehicle. Supports a cascading selector pattern — pass parameters incrementally to drill down from year to make to model to trim.

Case-insensitive filtering. String filter values such as make, model, and trim are case-insensitive — for example, make=Toyota and make=TOYOTA produce the same results.
Cascading drill-down. The response endpoint field tells you which level you reached: year, make, model, trim, or fitment. Omit any parameter to discover valid values for the next one.

Vehicle Lookup

GET /api/v1/vehicle/lookup

Pass year to get available makes. Add make to get models. Add model to get trims. Add trim to get tire fitment results. Omit all parameters to get available years.

Query Parameters

ParameterTypeRequiredDefaultDescription
yearstringNoVehicle year (e.g. 2024). Omit to get available years.
makestringNoVehicle make (e.g. Toyota). Requires year.
modelstringNoVehicle model (e.g. Camry). Requires year + make.
trimstringNoVehicle trim (e.g. SE). Requires year + make + model.

Code Examples

Step 1 — Get available years:

curl -H "x-api-key: tl_live_your_key" \
  "https://app.tireweblibrary.com/api/v1/vehicle/lookup"
const response = await fetch(
  "https://app.tireweblibrary.com/api/v1/vehicle/lookup",
  { headers: { "x-api-key": "tl_live_your_key" } }
);
const years = await response.json();
import requests

response = requests.get(
    "https://app.tireweblibrary.com/api/v1/vehicle/lookup",
    headers={"x-api-key": "tl_live_your_key"},
)
years = response.json()

Step 2 — Get makes for a year:

curl -H "x-api-key: tl_live_your_key" \
  "https://app.tireweblibrary.com/api/v1/vehicle/lookup?year=2024"
const response = await fetch(
  "https://app.tireweblibrary.com/api/v1/vehicle/lookup?year=2024",
  { headers: { "x-api-key": "tl_live_your_key" } }
);
const data = await response.json();
import requests

response = requests.get(
    "https://app.tireweblibrary.com/api/v1/vehicle/lookup",
    params={"year": "2024"},
    headers={"x-api-key": "tl_live_your_key"},
)
data = response.json()

Step 3 — Get fitments (full drill-down):

curl -H "x-api-key: tl_live_your_key" \
  "https://app.tireweblibrary.com/api/v1/vehicle/lookup?year=2024&make=Toyota&model=Camry&trim=SE"
const response = await fetch(
  "https://app.tireweblibrary.com/api/v1/vehicle/lookup?year=2024&make=Toyota&model=Camry&trim=SE",
  { headers: { "x-api-key": "tl_live_your_key" } }
);
const fitments = await response.json();
import requests

response = requests.get(
    "https://app.tireweblibrary.com/api/v1/vehicle/lookup",
    params={"year": "2024", "make": "Toyota", "model": "Camry", "trim": "SE"},
    headers={"x-api-key": "tl_live_your_key"},
)
fitments = response.json()

Response

{
  "endpoint": "year",
  "options": ["2024", "2023", "2022", "2021", "2020", "..."],
  "fitments": null
}
{
  "endpoint": "make",
  "options": ["Acura", "Audi", "BMW", "Buick", "Toyota", "..."],
  "fitments": null
}
{
  "endpoint": "fitment",
  "options": null,
  "fitments": [
    {
      "name": "2024 Toyota Camry SE",
      "position": "Front/Rear",
      "width": "205",
      "aspect_ratio": "65",
      "rim_size": "16",
      "load_rating": "94",
      "speed_rating": "V"
    },
    {
      "name": "2024 Toyota Camry SE",
      "position": "Front/Rear",
      "width": "215",
      "aspect_ratio": "55",
      "rim_size": "17",
      "load_rating": "94",
      "speed_rating": "V"
    }
  ]
}

Response Fields

FieldTypeDescription
endpointstringCurrent drill-down level: year, make, model, trim, or fitment
optionsstring[]?Available choices for the next drill-down parameter
fitmentsarray?Tire fitment results (only present when endpoint is fitment)
fitments[].namestringVehicle description (year, make, model, trim)
fitments[].positionstring?Tire position (e.g. "Front/Rear")
fitments[].widthstring?Tire width in mm
fitments[].aspect_ratiostring?Aspect ratio
fitments[].rim_sizestring?Rim diameter in inches
fitments[].load_ratingstring?Load rating code
fitments[].speed_ratingstring?Speed rating code

Error Responses

StatusCondition
401Missing or invalid API key

Related Endpoints

Rebates

Browse available tire rebates and get detailed rebate information including line items and associated tire patterns.

Case-insensitive filtering. String filter values such as make_name and status are case-insensitive — for example, status=active and status=Active produce the same results.

List Rebates

GET /api/v1/rebate

List rebates with optional filters for date range, status, and make. Returns paginated results.

Query Parameters

ParameterTypeRequiredDefaultDescription
start_datedateNoFilter by start date (e.g. 2025-03-01)
end_datedateNoFilter by end date (e.g. 2025-05-31)
globalstringNotrue/1 for global rebates only, false/0 for non-global
statusstringNoOne of: Active, Upcoming, Expired
sort_by_keystringNoSort field: start_date, end_date, name
sort_by_orderstringNoSort direction: asc or desc
pageintNo1Page number
per_pageintNo30Results per page (max 100)
make_namestringNoFilter by tire make name

Code Examples

curl -H "x-api-key: tl_live_your_key" \
  "https://app.tireweblibrary.com/api/v1/rebate?status=Active"
const response = await fetch(
  "https://app.tireweblibrary.com/api/v1/rebate?status=Active",
  { headers: { "x-api-key": "tl_live_your_key" } }
);
const data = await response.json();
import requests

response = requests.get(
    "https://app.tireweblibrary.com/api/v1/rebate",
    params={"status": "Active"},
    headers={"x-api-key": "tl_live_your_key"},
)
data = response.json()

Response

{
  "current_page": 1,
  "data": [
    {
      "id": 10,
      "name": "Spring Rebate",
      "start_date": "2025-03-01",
      "end_date": "2025-05-31",
      "global": true,
      "status": "Active"
    }
  ],
  "from": 1,
  "last_page": 1,
  "per_page": 30,
  "to": 12,
  "total": 12
}

Response Fields

FieldTypeDescription
idlongUnique rebate identifier
namestringRebate name
start_datestringRebate start date (ISO 8601)
end_datestringRebate end date (ISO 8601)
globalboolWhether the rebate applies to all makes
statusstringRebate status: Active, Upcoming, or Expired

Error Responses

StatusCondition
401Missing or invalid API key

Related Endpoints


Get Rebate by ID

GET /api/v1/rebate/{id}

Get full detail for a single rebate including line items (amounts, quantities, spend requirements) and associated tire patterns.

Path Parameters

ParameterTypeDescription
idlongRebate ID

Code Examples

curl -H "x-api-key: tl_live_your_key" \
  "https://app.tireweblibrary.com/api/v1/rebate/10"
const response = await fetch(
  "https://app.tireweblibrary.com/api/v1/rebate/10",
  { headers: { "x-api-key": "tl_live_your_key" } }
);
const rebate = await response.json();
import requests

response = requests.get(
    "https://app.tireweblibrary.com/api/v1/rebate/10",
    headers={"x-api-key": "tl_live_your_key"},
)
rebate = response.json()

Response

{
  "id": 10,
  "name": "Spring Rebate",
  "description": "Save on select tires this spring.",
  "image_url": "https://...",
  "image_horizontal_url": "https://...",
  "image_preview_url": "https://...",
  "form_url": "https://...",
  "start_date": "2025-03-01",
  "end_date": "2025-05-31",
  "global": true,
  "status": "Active",
  "rebate_items": [
    {
      "id": 25,
      "amount": 70.00,
      "amount_reason": "Prepaid Card",
      "amount_two": 100.00,
      "amount_two_reason": "Prepaid Card (select sizes)",
      "quantity_required": 4,
      "quantity_limit": null,
      "spend_min": null,
      "spend_max": null,
      "tire_patterns": [
        {
          "id": 678,
          "name": "Defender T+H",
          "description": "All-season tire...",
          "image_url": "https://..."
        }
      ]
    }
  ]
}

Response Fields

FieldTypeDescription
idlongUnique rebate identifier
namestringRebate name
descriptionstring?Rebate description
image_urlstring?Rebate image URL (vertical)
image_horizontal_urlstring?Rebate image URL (horizontal)
image_preview_urlstring?Rebate preview image URL
form_urlstring?URL to the rebate claim form
start_datestringRebate start date (ISO 8601)
end_datestringRebate end date (ISO 8601)
globalboolWhether the rebate applies to all makes
statusstringRebate status: Active, Upcoming, or Expired
rebate_itemsarrayLine items with amounts, quantities, and qualifying tire patterns
rebate_items[].idlongRebate item identifier
rebate_items[].amountdecimal?Primary rebate amount
rebate_items[].amount_reasonstring?Description of how the primary amount is paid
rebate_items[].amount_twodecimal?Secondary rebate amount (e.g. for select sizes)
rebate_items[].amount_two_reasonstring?Description of how the secondary amount is paid
rebate_items[].quantity_requiredint?Number of tires required to qualify
rebate_items[].quantity_limitint?Maximum number of submissions allowed
rebate_items[].spend_mindecimal?Minimum spend to qualify
rebate_items[].spend_maxdecimal?Maximum spend to qualify
rebate_items[].tire_patternsarrayQualifying tire patterns with id, name, description, image_url

Error Responses

StatusCondition
401Missing or invalid API key
404Rebate with the given ID does not exist

Related Endpoints