Kia APIkia.ca ↗
Access current Kia Canada vehicle deals, financing rates, MSRP pricing, EV incentives, and trim specs for all Canadian provinces via the kia.ca API.
What is the Kia API?
The Kia Canada API exposes current vehicle offers and detailed trim specifications from kia.ca across all 13 Canadian provinces and territories through 2 endpoints. The get_offers endpoint returns a full list of active models with MSRP, financing terms, bonus incentives, vehicle images, and build-and-price URLs for a given province, while get_offer_details adds engine specs, dimensions, and available colours at the individual model level.
curl -X GET 'https://api.parse.bot/scraper/e7c7f2d5-ecd8-4e53-b1c3-9fd88f3c25af/get_offers?province=AB' \ -H 'X-API-Key: $PARSE_API_KEY'
Typed, relational, agent-ready
A generated client with real types, enums, and the links between objects — the structure a flat JSON response can't carry. Autocompletes in your editor and reads cleanly to coding agents.
- Fully typed · autocompletes
- Objects link to objects
- Typed errors & pagination
Typed Python client. Set up the SDK in your uv project, then pull this API’s typed client:
uv add parse-sdk uv run parse init uv run parse add --marketplace kia-ca-api
uv run parse add --marketplace pulls a pinned snapshot of this canonical API — it won’t change underneath you. To customize it, subscribe and swap to your own copy.
"""Walkthrough: Kia Canada Vehicle Offers API — browse offers, drill into details."""
from parse_apis.kia_canada_vehicle_offers_api import KiaCanada, Province, ModelNotFound
client = KiaCanada()
# List all current offers for Ontario — limit caps total items iterated.
for offer in client.offers.list(province=Province.ON, limit=5):
print(offer.model_name, offer.model_year, offer.offer_description)
for trim in offer.trims[:2]:
print(f" {trim.trim_name}: ${trim.msrp:,.0f} MSRP")
# Drill into one model's full details (engine, dimensions, colours).
detail = client.offers.get(model_name="Sportage", province=Province.ON)
print(detail.model_name, detail.model_year, detail.vehicle_url)
if detail.financing:
print(f" Financing: {detail.financing.apr_rate}% for {detail.financing.term_months} months")
for td in detail.trims:
print(f" {td.trim_name}: {td.body_type}, colours: {td.available_colours[:3]}")
# Typed error handling: catch ModelNotFound for an invalid model name.
try:
client.offers.get(model_name="NonExistentModel", province=Province.BC)
except ModelNotFound as exc:
print(f"Model not found: {exc.model}")
print("exercised: offers.list / offers.get / ModelNotFound")
Get all current vehicle offers and deals from Kia Canada for a specific province. Returns all available models with MSRP, financing info, bonus/incentive details, image URLs, and build-and-price links. The full offer catalog is returned in a single response (no pagination). Each offer includes one or more trim levels with province-specific pricing.
| Param | Type | Description |
|---|---|---|
| province | string | Canadian province code for province-specific pricing and rebates. |
{
"type": "object",
"fields": {
"offers": "array of offer summary objects with model_name, model_year, trim, financing, trims (with MSRP/pricing), vehicle_image, vehicle_url, build_and_price_url",
"province": "string — the province code used for the request",
"total_offers": "integer — number of offers returned"
}
}About the Kia API
Offer Coverage by Province
The get_offers endpoint accepts a single optional province parameter — any of the 13 Canadian province/territory codes from AB to YT — and returns an array of offer objects. Each object includes model_name, model_year, trim, a trims array with per-trim MSRP and pricing breakdowns, financing data (APR and term), vehicle_image URLs, vehicle_url for the model overview page, and a build_and_price_url. The total_offers integer tells you how many active deals exist for that market at the time of the call.
Detailed Trim and Spec Data
The get_offer_details endpoint takes a required model string (e.g., 'EV9', 'Sportage', 'Sorento PHEV') and the same optional province code. It returns a trims array where each entry includes extended specs: engine, dimensions, other_details, and available_colours. The response also carries the featured trim and trim_code, financing object or null, and links including build_and_price_url. If the model name does not match any current offer, the endpoint returns a stale_input signal rather than an empty result.
EV and PHEV Incentive Data
Financing and bonus/incentive fields are populated where Kia Canada publishes them, which means EV and PHEV models (Niro EV, EV6, EV9, Sorento PHEV) often carry additional incentive detail in the financing and trim-level pricing fields. Because offers differ by province — especially for EV rebates — passing the correct province code is important for accurate data.
Freshness and Scope
Data reflects the offers currently listed on kia.ca/offers. Kia Canada updates promotions on a monthly cycle, so the content is current but point-in-time. The API covers new-vehicle retail offers only; it does not include dealer inventory, used vehicles, or fleet/commercial programs.
The Kia API is a managed, monitored endpoint for kia.ca — not a raw scraper you maintain. Every endpoint is automatically health-checked on a schedule, and when kia.ca changes and a check fails, the API is automatically queued for repair and re-verified. It is built to keep working as the site underneath it changes.
This isn't an official kia.ca API — it's an independent, maintained REST wrapper over public data. Where the source has no official API (or only a limited one), Parse gives you a stable contract over a source that never promised one, and keeps it current. Need a new endpoint or field? You can revise it yourself in plain English and the agent rebuilds it against the live site in minutes — contributing the change back to the shared API is free.
Will this API break when the source site changes?+
Is this an official API from the source site?+
Can I fix or extend this API myself if I need a new endpoint or field?+
What happens if I call an endpoint that has an issue?+
- Build a Kia Canada deal-tracker that alerts users when APR rates or MSRP drop for a specific model in their province.
- Populate a side-by-side trim comparison table using
get_offer_detailsengine and dimension fields for models like Sportage and Seltos. - Aggregate EV incentive data across provinces for Niro EV and EV9 to help buyers identify the best-value region.
- Feed build-and-price URLs into a car-shopping app so users can jump directly from a deal listing to the Kia configurator.
- Monitor monthly offer cycles by storing
total_offersand financing terms fromget_offersto surface promotional patterns. - Display available trim colours and specs in a dealership lead-generation form using the
available_coloursfield fromget_offer_details. - Compare financing term lengths and APR rates across all current Kia models for a given province using a single
get_offerscall.
| Tier | Price | Credits/month | Rate limit |
|---|---|---|---|
| Free | $0/mo | 100 | 5 req/min |
| Hobby | $30/mo | 1,000 | 20 req/min |
| Developer | $100/mo | 5,000 | 100 req/min |
One credit = one API call regardless of which marketplace API you call. Exceeding the rate limit returns a 429 response. Authenticate with the X-API-Key header.
Does Kia Canada provide an official public developer API for offer data?+
What does `get_offer_details` return that `get_offers` does not?+
get_offer_details returns extended per-trim specs inside the trims array: engine, dimensions, other_details, and available_colours. The get_offers endpoint returns a leaner object useful for listing all active deals, while get_offer_details is the right call when you need full spec sheets for a single model.What happens if I pass an unrecognized model name to `get_offer_details`?+
stale_input signal when the model string does not match any model currently in the active offers list. This means the model name must reflect a currently promoted vehicle — for example 'EV9' or 'Carnival' — not a past or regional-only model.