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
| Status | Condition |
401 | Missing or invalid API key |
403 | Your subscription does not include API access |
404 | Requested resource not found |
405 | HTTP method not allowed (API is read-only) |
429 | Rate limit exceeded — slow down and retry |
500 | Internal 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:
| Parameter | Type | Description |
page | int | Page number, 1-based. Defaults to 1. |
per_page | int | Results per page. Defaults vary by endpoint (see below). Maximum 100. |
Default per_page by Endpoint
| Endpoint | Default | Max |
/api/v1/tires/search | 20 | 100 |
/api/v1/tires/catalog | 30 | 100 |
/api/v1/tire-patterns/catalog | 24 | 100 |
/api/v1/rebate | 30 | 100 |
Paginated Response Fields
| Field | Type | Description |
current_page | int | The page number returned |
data | array | Results for the current page |
from | int? | 1-based index of the first result in this page |
last_page | int | Total number of pages |
per_page | int | Number of results per page |
to | int? | 1-based index of the last result in this page |
total | int | Total number of results across all pages |
Iterating Pages
Fetch page 1, check last_page, then request subsequent pages:
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
| Endpoint | Description |
| Tires | Search tires by size, browse with faceted filters, get tire details |
| Tire Makes | List all tire makes (manufacturers) |
| Tire Categories | List all tire categories for filtering |
| Tire Patterns | List tire patterns by make, browse with faceted filters, get pattern details |
| Vehicle Fitments | Look up tire fitments by year/make/model/trim |
| Rebates | Browse 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.
| Resource | URL | Description |
| Swagger UI | https://app.tireweblibrary.com/api/swagger | Interactive documentation with “Try it out” for every endpoint |
| OpenAPI JSON | https://app.tireweblibrary.com/api/swagger/v1/swagger.json | Machine-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
Search tire sizes by dimensional attributes. Returns paginated results with basic tire information.
Query Parameters
| Parameter | Type | Required | Default | Description |
width | string | No | — | Tire width in mm (e.g. 205) |
aspect_ratio | string | No | — | Aspect ratio (e.g. 65) |
rim_size | string | No | — | Rim diameter in inches (e.g. 15) |
load_rating | string | No | — | Load rating code (e.g. 97) |
speed_rating | string | No | — | Speed rating code (e.g. H) |
exclude_category | string[] | No | [] | Exclude tires in these categories. Repeat for multiple: ?exclude_category=OTR/Construction, Earthmover&exclude_category=Industrial |
page | int | No | 1 | Page number (1-based) |
per_page | int | No | 20 | Results 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
| Field | Type | Description |
id | long | Unique tire size identifier |
name | string | Tire size name (e.g. "205/65R15") |
item_number | string? | Item number / SKU |
tire_model_id | long | ID of the tire pattern |
tire_make_id | long | ID of the tire make |
width | string? | Tire width in mm |
aspect_ratio | string? | Aspect ratio |
rim_size | string? | Rim diameter in inches |
load_rating | string? | Load rating code |
speed_rating | string? | Speed rating code |
make_name | string? | Make name (e.g. "Michelin") |
model_name | string? | Pattern name (e.g. "Defender T+H") |
season | string? | Season classification |
category | string? | Tire category |
warranty | string? | Warranty mileage |
ply_rating | string? | Ply rating |
load_range | string? | Load range (e.g. "SL") |
utqg | string? | UTQG rating (e.g. "820 A B") |
tread_depth | string? | Tread depth (32nds of an inch) |
weight | string? | Tire weight (lbs) |
make_image | string? | URL to make logo image |
terrain | string? | Terrain classification |
studdable | bool? | Studdable tire |
three_pmsf | bool | Three-Peak Mountain Snowflake certification |
run_flat | bool | Run-flat tire |
mud_and_snow | bool | M+S rated |
thumbnail_image | string? | URL to tire thumbnail image |
Error Responses
| Status | Condition |
401 | Missing or invalid API key |
Related Endpoints
- Tire Makes — get make IDs and names for the
tire_make_id field
- Tire Patterns — get pattern details for the
tire_model_id field
- Tire Categories — reference list of category values for the
exclude_category filter
Browse 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
| Parameter | Type | Required | Default | Description |
search | string | No | — | Free-text search |
make_name | string[] | No | [] | Filter by make. Repeat for multiple: ?make_name=Michelin&make_name=Bridgestone |
width | string[] | No | [] | Filter by width |
aspect_ratio | string[] | No | [] | Filter by aspect ratio |
rim_size | string[] | No | [] | Filter by rim size |
speed_rating | string[] | No | [] | Filter by speed rating |
load_rating | string[] | No | [] | Filter by load rating |
ply_rating | string[] | No | [] | Filter by ply rating |
load_range | string[] | No | [] | Filter by load range |
utqg | string[] | No | [] | Filter by UTQG |
warranty | string[] | No | [] | Filter by warranty |
item_number | string[] | No | [] | Filter by item number |
season | string[] | No | [] | Filter by season |
terrain | string[] | No | [] | Filter by terrain |
category | string[] | No | [] | Filter by category |
exclude_category | string[] | No | [] | Exclude tires in these categories. Repeat for multiple: ?exclude_category=OTR/Construction, Earthmover&exclude_category=Industrial |
three_pmsf | bool | No | — | Three-Peak Mountain Snowflake |
run_flat | bool | No | — | Run-flat tires only |
mud_and_snow | bool | No | — | M+S rated only |
studdable | bool | No | — | Studdable only |
sort | string | No | — | Sort key (e.g. name_asc) |
page | int | No | 1 | Page number |
per_page | int | No | 30 | Results 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
| Field | Type | Description |
results | object | Paginated tire results (same fields as Search Tires) |
facets | object | Available filter values for building interactive UIs |
facets.make_name | string[] | Distinct make names in the result set |
facets.width | string[] | Distinct widths |
facets.aspect_ratio | string[] | Distinct aspect ratios |
facets.rim_size | string[] | Distinct rim sizes |
facets.speed_rating | string[] | Distinct speed ratings |
facets.load_rating | string[] | Distinct load ratings |
facets.ply_rating | string[] | Distinct ply ratings |
facets.load_range | string[] | Distinct load ranges |
facets.utqg | string[] | Distinct UTQG ratings |
facets.warranty | string[] | Distinct warranty values |
facets.season | string[] | Distinct seasons |
facets.terrain | string[] | Distinct terrain values |
facets.category | string[] | Distinct categories |
Error Responses
| Status | Condition |
401 | Missing or invalid API key |
Related Endpoints
- Tire Makes — get make names for the
make_name filter
- Tire Categories — reference list of category values for the
category and exclude_category filters
Get Tire by ID
Get the full specification sheet for a single tire size, including dimensions, performance ratings, images, rebates, and vehicle fitments.
Path Parameters
| Parameter | Type | Description |
id | long | Tire size ID (obtained from search or catalog endpoints) |
Query Parameters
| Parameter | Type | Required | Default | Description |
rebate_status | string | No | — (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
| Field | Type | Description |
id | long | Unique tire size identifier |
name | string | Tire size name (e.g. "205/65R15") |
item_number | string? | Item number / SKU |
width | string? | Tire width in mm |
aspect_ratio | string? | Aspect ratio |
rim_size | string? | Rim diameter in inches |
load_rating | string? | Load rating code |
speed_rating | string? | Speed rating code |
price | string? | List price |
load_capacity_dual | string? | Load capacity for dual fitment (lbs) |
load_capacity_single | string? | Load capacity for single fitment (lbs) |
max_inflation_pressure | string? | Maximum inflation pressure (PSI) |
revolutions_per_mile | string? | Revolutions per mile |
rolling_circumference | string? | Rolling circumference (inches) |
diameter_overall | string? | Overall diameter (inches) |
sidewall | string? | Sidewall height (inches) |
section_width | string? | Section width (inches) |
weight | string? | Tire weight (lbs) |
warranty | string? | Warranty mileage |
utqg | string? | UTQG rating (e.g. "820 A B") |
ply_rating | string? | Ply rating |
load_range | string? | Load range (e.g. "SL") |
tread_depth | string? | Tread depth (32nds of an inch) |
category | string? | Tire category |
season | string? | Season classification |
terrain | string? | Terrain classification |
studdable | bool? | Studdable tire |
three_pmsf | bool | Three-Peak Mountain Snowflake certification |
run_flat | bool | Run-flat tire |
mud_and_snow | bool | M+S rated |
thumbnail_image | string? | URL to tire thumbnail image |
tire_make | object? | Nested make object with id, name, image_url, dot_reg_url |
tire_model | object? | Nested pattern object with id, name, image_url, image_360_url, image_360_thumbnail_url, video_url, manufacturer_url, features, benefits, description, three_pmsf |
rebates | array | Applicable rebates with id, name, description, start_date, end_date, global, status |
fitments_grouped | object? | Vehicle fitments grouped by year and trim. Each item has trim (string) and years (string) |
Error Responses
| Status | Condition |
401 | Missing or invalid API key |
404 | Tire 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
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
| Field | Type | Description |
id | long | Unique tire make identifier |
name | string | Make name (e.g. "Michelin") |
image_url | string? | URL to the make's logo/brand image |
dot_reg_url | string? | URL to DOT registration information |
Error Responses
| Status | Condition |
401 | Missing or invalid API key |
Related Endpoints
- Tire Patterns — use
id as the make_id parameter to list patterns for a make
- Tires — use
name as the make_name filter in catalog endpoints
- Rebates — filter rebates by
make_name on the list endpoint
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
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
| Field | Type | Description |
(element) | string | Category 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
| Status | Condition |
401 | Missing or invalid API key |
Related Endpoints
- Tires — use category values with
category and exclude_category filters
- Tire Patterns — use category values with
category and exclude_category filters
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
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
Temporary Spare
| Category |
Temporary Spare |
Temporary Spare, Temporary/Compact Spare |
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
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
| Parameter | Type | Required | Default | Description |
make_id | long | Yes | — | Tire make ID from /api/v1/tire-makes |
search | string | No | — | Free-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
| Field | Type | Description |
id | long | Unique tire pattern identifier |
name | string | Pattern name (e.g. "CrossClimate 2") |
description | string? | Pattern description, if available |
image_url | string? | Pattern image URL; falls back to a size thumbnail if no pattern image exists |
size_count | int | Number of tire sizes available for this pattern |
Error Responses
| Status | Condition |
401 | Missing or invalid API key |
400 | make_id is missing or invalid |
404 | Tire make with the given make_id does not exist |
Related Endpoints
Browse 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
| Parameter | Type | Required | Default | Description |
search | string | No | — | Free-text search |
make_name | string[] | No | [] | Filter by make. Repeat for multiple values. |
category | string[] | No | [] | Filter by category. Repeat for multiple values: ?category=Passenger Car&category=Light Truck |
exclude_category | string[] | No | [] | Exclude patterns in these categories. Repeat for multiple: ?exclude_category=Industrial&exclude_category=Commercial Truck/Bus |
page | int | No | 1 | Page number |
per_page | int | No | 24 | Results 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
| Field | Type | Description |
id | long | Unique pattern identifier |
name | string | Pattern name |
description | string? | Pattern description |
image_url | string? | Pattern image URL |
make_name | string? | Make name (e.g. "Michelin") |
make_image | string? | Make logo image URL |
size_count | int | Number of tire sizes available |
facets.make_name | string[] | Distinct make names in the result set |
facets.category | string[] | Distinct categories in the result set |
Error Responses
| Status | Condition |
401 | Missing or invalid API key |
Related Endpoints
- Tire Makes — get make names for the
make_name filter
- Tire Categories — reference list of category values for the
category and exclude_category filters
- Tires — search for specific tire sizes by dimensional attributes
Get Tire Pattern by ID
Get full detail for a single tire pattern, including all its available sizes and applicable rebates.
Path Parameters
| Parameter | Type | Description |
id | long | Tire pattern ID |
Query Parameters
| Parameter | Type | Required | Default | Description |
rebate_status | string | No | — (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
| Field | Type | Description |
id | long | Unique pattern identifier |
name | string | Pattern name |
image_url | string? | Pattern image URL |
image_360_url | string? | 360-degree image URL |
image_360_thumbnail_url | string? | 360-degree image thumbnail URL |
video_url | string? | Promotional video URL |
manufacturer_url | string? | Manufacturer product page URL |
benefits | string? | Pattern benefits |
description | string? | Pattern description |
features | string? | Pattern features |
three_pmsf | bool | Three-Peak Mountain Snowflake certification |
tire_make | object? | Nested make object with id, name, image_url, dot_reg_url |
tire_sizes | array | Available tire sizes with id, name, item_number, three_pmsf, season, terrain, studdable, category, run_flat, mud_and_snow |
rebates | array | Applicable rebates with id, name, description, start_date, end_date, global, status |
Error Responses
| Status | Condition |
401 | Missing or invalid API key |
404 | Tire pattern with the given ID does not exist |
Related Endpoints
- Tires — get full specifications for a tire size within this pattern
- Vehicle Fitments — look up vehicles that fit the tire sizes in this pattern
- Rebates — get full rebate details for rebates returned in the response
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
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
| Parameter | Type | Required | Default | Description |
year | string | No | — | Vehicle year (e.g. 2024). Omit to get available years. |
make | string | No | — | Vehicle make (e.g. Toyota). Requires year. |
model | string | No | — | Vehicle model (e.g. Camry). Requires year + make. |
trim | string | No | — | Vehicle 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
| Field | Type | Description |
endpoint | string | Current drill-down level: year, make, model, trim, or fitment |
options | string[]? | Available choices for the next drill-down parameter |
fitments | array? | Tire fitment results (only present when endpoint is fitment) |
fitments[].name | string | Vehicle description (year, make, model, trim) |
fitments[].position | string? | Tire position (e.g. "Front/Rear") |
fitments[].width | string? | Tire width in mm |
fitments[].aspect_ratio | string? | Aspect ratio |
fitments[].rim_size | string? | Rim diameter in inches |
fitments[].load_rating | string? | Load rating code |
fitments[].speed_rating | string? | Speed rating code |
Error Responses
| Status | Condition |
401 | Missing or invalid API key |
Related Endpoints
- Tires — search for specific tire sizes by dimensional attributes from the fitment results
- Tire Patterns — browse tire patterns for the makes and models found
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
List rebates with optional filters for date range, status, and make. Returns paginated results.
Query Parameters
| Parameter | Type | Required | Default | Description |
start_date | date | No | — | Filter by start date (e.g. 2025-03-01) |
end_date | date | No | — | Filter by end date (e.g. 2025-05-31) |
global | string | No | — | true/1 for global rebates only, false/0 for non-global |
status | string | No | — | One of: Active, Upcoming, Expired |
sort_by_key | string | No | — | Sort field: start_date, end_date, name |
sort_by_order | string | No | — | Sort direction: asc or desc |
page | int | No | 1 | Page number |
per_page | int | No | 30 | Results per page (max 100) |
make_name | string | No | — | Filter 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
| Field | Type | Description |
id | long | Unique rebate identifier |
name | string | Rebate name |
start_date | string | Rebate start date (ISO 8601) |
end_date | string | Rebate end date (ISO 8601) |
global | bool | Whether the rebate applies to all makes |
status | string | Rebate status: Active, Upcoming, or Expired |
Error Responses
| Status | Condition |
401 | Missing or invalid API key |
Related Endpoints
- Tire Makes — get make names for the
make_name filter
- Tire Patterns — browse patterns associated with rebate line items
Get Rebate by ID
Get full detail for a single rebate including line items (amounts, quantities, spend requirements) and associated tire patterns.
Path Parameters
| Parameter | Type | Description |
id | long | Rebate 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
| Field | Type | Description |
id | long | Unique rebate identifier |
name | string | Rebate name |
description | string? | Rebate description |
image_url | string? | Rebate image URL (vertical) |
image_horizontal_url | string? | Rebate image URL (horizontal) |
image_preview_url | string? | Rebate preview image URL |
form_url | string? | URL to the rebate claim form |
start_date | string | Rebate start date (ISO 8601) |
end_date | string | Rebate end date (ISO 8601) |
global | bool | Whether the rebate applies to all makes |
status | string | Rebate status: Active, Upcoming, or Expired |
rebate_items | array | Line items with amounts, quantities, and qualifying tire patterns |
rebate_items[].id | long | Rebate item identifier |
rebate_items[].amount | decimal? | Primary rebate amount |
rebate_items[].amount_reason | string? | Description of how the primary amount is paid |
rebate_items[].amount_two | decimal? | Secondary rebate amount (e.g. for select sizes) |
rebate_items[].amount_two_reason | string? | Description of how the secondary amount is paid |
rebate_items[].quantity_required | int? | Number of tires required to qualify |
rebate_items[].quantity_limit | int? | Maximum number of submissions allowed |
rebate_items[].spend_min | decimal? | Minimum spend to qualify |
rebate_items[].spend_max | decimal? | Maximum spend to qualify |
rebate_items[].tire_patterns | array | Qualifying tire patterns with id, name, description, image_url |
Error Responses
| Status | Condition |
401 | Missing or invalid API key |
404 | Rebate with the given ID does not exist |
Related Endpoints
- Tire Patterns — get full pattern details for the tire patterns in
rebate_items[].tire_patterns
- Tires — search for tire sizes that qualify for a rebate
- Tire Makes — filter rebates by
make_name on the list endpoint