> For clean Markdown of any page, append .md to the page URL. > For a complete documentation index, see https://docs.insurgateway.com/insurgateway-api/vehicle-catalog/llms.txt. > For AI client integration (Claude Code, Cursor, etc.), connect to the MCP server at https://docs.insurgateway.com/_mcp/server. # Vehicle Catalog GET https://testgatewayapi.insurapps.net/api/VehicleCatalogs ## Vehicle Catalog Araç kataloğunu (TSB araç kasko değer listesi) sayfalı döndürür. Varsayılan olarak yalnızca güncel listede yer alan aktif araçlar döner; `version` verildiğinde tam liste yerine yalnızca o sürüme ait değişiklikler (delta) döner. ### Uç Nokta (Endpoint) `GET {{baseUrl}}/api/VehicleCatalogs` *** ### Kullanım Bu servis, araç kataloğunu kendi tarafında saklayan tüketicilerin ilk tam çekimi ve sonraki delta güncellemeleri için kullanılır. **Tam çekim akışı:** 1. `Authentication Login` servisinden token alınır. 2. `GET /api/VehicleCatalogs/meta` ile `Version` okunur; eldeki sürümle aynıysa katalog değişmemiştir, çekime gerek yoktur. 3. Bu servis `page=1` ile çağrılır ve `page` değeri `Data` boş dönene ya da `Page * PageSize >= TotalCount` olana kadar artırılır. 4. Yanıttaki `Version` değeri watermark olarak saklanır. **Delta akışı (`version` parametresi):** 1. `GET /api/VehicleCatalogs/versions` ile sürüm listesi alınır. 2. Eldeki sürüm listede bulunur; sonrasındaki sürümler sırayla `?version=` ile çekilir. 3. Dönen kayıtlar `Id` ile upsert edilir. `version` verildiğinde sürüm geçmişindeki bir önceki sürümden istenen sürüme kadar olan pencerede son kez değişen kayıtlar döner. Pasifleşen kayıtlar `IsActive=false` olarak `includeDeactive` değerinden bağımsız dahil edilir. Bir kayıt sonraki bir sürümde tekrar değiştiyse yalnızca o sonraki sürümün yanıtında görünür; sürümler sırayla çekildiğinde her kayıt en fazla bir kez, güncel hâliyle gelir. > 💡 Yeni bir sürüm oluştuğunda aboneliği tanımlı platformlara `VehicleCatalogChange` push bildirimi gönderilir; bildirimdeki `Version` değeri doğrudan bu servisin `version` parametresinde kullanılır. > 💡 Sayfalar tekil `Id` anahtarına göre sıralanır; sayfalar arasında kayıt kayması ya da yinelenmesi olmaz. > ⚠️ Eski model yılları için de kasko değeri sunması gereken tüketiciler `includeDeactive=true` kullanmalıdır; aksi hâlde listeden düşmüş (15 yıldan eski) araçlar dönmez. *** ### Kimlik Doğrulama Bu uç nokta geçerli bir JWT erişim token'ı gerektirir. Token, `Authentication Login` servisinden alınır ve `Authorization` başlığında gönderilir. | Başlık | Tür | Zorunlu | Açıklama | | --------------- | ------ | ------- | ------------------------------------------ | | `Authorization` | string | ✅ | `Bearer ` biçiminde erişim token'ı. | Token'ın `Read` yetkisini taşıması gerekir. *** ### İstek Parametreleri (Query Parameters) | Parametre | Tür | Zorunlu | Min | Max | Açıklama | | ----------------- | --------------- | ------- | --- | ---------- | ----------------------------------------------------------------------------------------------------------------------- | | `page` | integer (int32) | — | 1 | 2147483647 | 1 tabanlı sayfa numarası. Varsayılan `1`; `1`'den küçük değerler sunucuda `1`'e çekilir. | | `pageSize` | integer (int32) | — | 1 | 1000 | Sayfa başına kayıt sayısı. Varsayılan ve üst sınır `1000`; aralık dışı değerler hata vermez, sunucuda `1000`'e çekilir. | | `brandCode` | integer (int32) | — | — | — | Marka kodu filtresi (bkz. `GET /api/VehicleCatalogs/brands`). Verilmezse tüm markalar döner. | | `includeDeactive` | boolean | — | — | — | `true` verildiğinde güncel listeden düşmüş pasif (`IsActive=false`) araçlar da dahil edilir. Varsayılan `false`. | | `version` | string | — | — | — | Değişiklikleri istenen katalog sürümü (bkz. `GET /api/VehicleCatalogs/versions`). Sürüm geçmişinde yoksa `400` döner. | **Örnek İstek:** ``` GET {{baseUrl}}/api/VehicleCatalogs?brandCode=9&page=1&pageSize=3 Authorization: Bearer ``` *** ### Başarılı Yanıt (200 OK) | Alan | Tür | Açıklama | | --------------- | --------------- | ----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- | | `Version` | string \| null | Yanıttaki verinin ait olduğu katalog sürümü. Tam listede son başarılı senkronun hash'i, `version` parametreli çağrıda istenen sürümün kendisidir. Katalog henüz senkronlanmadıysa `null`. | | `LatestVersion` | string \| null | Kataloğun güncel sürümü; `meta` ucundaki `Version` ile aynıdır. Delta yanıtında, işlenmesi gereken daha yeni bir sürüm kalıp kalmadığını gösterir. | | `Page` | integer | Dönen sayfa numarası (1 tabanlı). | | `PageSize` | integer | Uygulanan sayfa boyutu (sunucu üst sınıra çekmiş olabilir). | | `TotalCount` | integer (int64) | Filtreye uyan toplam kayıt sayısı (tüm sayfalar). | | `Data` | array | İstenen sayfanın araç kayıtları; `Id` anahtarına göre sıralıdır. | **`Data` nesnesi:** | Alan | Tür | Açıklama | | ----------- | -------- | ------------------------------------------------------------------------------------- | | `Id` | string | Kaydın tekil anahtarı (`{BrandCode}-{ModelCode}`). Upsert anahtarı olarak kullanılır. | | `BrandCode` | integer | TSB marka kodu. | | `BrandName` | string | Marka adı. | | `ModelCode` | integer | TSB model (tip) kodu. | | `ModelName` | string | Model adı. | | `Prices` | array | Model yılı bazında kasko değerleri. | | `IsActive` | boolean | Aracın güncel listede yer alıp almadığı. Listeden düşmüş araçlarda `false`. | | `UpdatedAt` | datetime | Kaydın son değiştiği senkron zamanı. | **`Prices` nesnesi:** | Alan | Tür | Açıklama | | ------- | --------------- | ------------------------------------ | | `Year` | integer | Model yılı. | | `Price` | integer (int64) | İlgili model yılı için kasko değeri. | **Örnek Başarılı Yanıt:** ```json { "Version": "52C958DB9124FAD5021C7AFA54F2699E0459A5B0", "LatestVersion": "52C958DB9124FAD5021C7AFA54F2699E0459A5B0", "Page": 1, "PageSize": 3, "TotalCount": 774, "Data": [ { "Id": "9-1001", "BrandCode": 9, "BrandName": "AUDI", "ModelCode": 1001, "ModelName": "S3 S TRONIC", "Prices": [ { "Year": 2012, "Price": 1530369 } ], "IsActive": true, "UpdatedAt": "2026-08-10T11:14:17.38+03:00" }, { "Id": "9-1002", "BrandCode": 9, "BrandName": "AUDI", "ModelCode": 1002, "ModelName": "A6 AVANT 3.0 TFSI QUATTRO S TRONIC", "Prices": [ { "Year": 2016, "Price": 2526015 }, { "Year": 2015, "Price": 2450234 } ], "IsActive": true, "UpdatedAt": "2026-08-10T11:14:17.38+03:00" }, { "Id": "9-1003", "BrandCode": 9, "BrandName": "AUDI", "ModelCode": 1003, "ModelName": "A6 AVANT 2.0 TDI (177) MULTITRONIC", "Prices": [ { "Year": 2016, "Price": 2038213 }, { "Year": 2015, "Price": 1977068 } ], "IsActive": true, "UpdatedAt": "2026-08-10T11:14:17.38+03:00" } ] } ``` *** ### Hatalı Yanıt (400 Bad Request) `version` parametresiyle gönderilen sürüm, sürüm geçmişinde bulunamadığında düz metin gövdeyle döner: ``` Sürüm bilgisi bulunamadı. Geçerli sürümleri versions ucundan alabilir ya da version parametresiz tam çekim yapabilirsiniz. ``` > ⚠️ Sayısal parametrelere metin gönderilmesi gibi model binding hataları da `400` döner; bu durumda gövde düz metin değil, alan bazlı hata nesnesidir. *** ### Hatalı Yanıt (401 Unauthorized) Token gönderilmediğinde, geçersiz olduğunda veya süresi dolduğunda HTTP `401 Unauthorized` döner. Yanıt gövdesi boştur. > 💡 Token'ın süresi dolduysa yanıtta `Token-Expired: true` başlığı bulunur. Bu durumda `POST /api/authentication/refreshtoken` ile yeni token alınmalıdır. Reference: https://docs.insurgateway.com/insurgateway-api/vehicle-catalog ## Authentication - `Authorization` header (bearer token, required) — Bearer authentication of the form `Bearer `, where token is your auth token. ## Servers - `https://testgatewayapi.insurapps.net` (https://testgatewayapi.insurapps.net, default) - `https://gatewayapi.insurapps.net` (https://gatewayapi.insurapps.net) ## Request ### Query parameters - `page` (integer, optional) — 1 tabanlı sayfa numarası. - `pageSize` (integer, optional) — Sayfa başına kayıt sayısı. - `brandCode` (integer, optional) — Marka kodu filtresi. ### Headers - `Authorization` (string, optional) ## Response ### 200 OK ## Examples ### 200 - Marka filtreli (brandCode=9, pageSize=3) **Response** ```json { "Version": "52C958DB9124FAD5021C7AFA54F2699E0459A5B0", "LatestVersion": "52C958DB9124FAD5021C7AFA54F2699E0459A5B0", "Page": 1, "PageSize": 3, "TotalCount": 774, "Data": [ { "Id": "9-1001", "BrandCode": 9, "BrandName": "AUDI", "ModelCode": 1001, "ModelName": "S3 S TRONIC", "Prices": [ { "Year": 2012, "Price": 1530369 } ], "IsActive": true, "UpdatedAt": "2026-08-10T11:14:17.38+03:00" }, { "Id": "9-1002", "BrandCode": 9, "BrandName": "AUDI", "ModelCode": 1002, "ModelName": "A6 AVANT 3.0 TFSI QUATTRO S TRONIC", "Prices": [ { "Year": 2016, "Price": 2526015 }, { "Year": 2015, "Price": 2450234 } ], "IsActive": true, "UpdatedAt": "2026-08-10T11:14:17.38+03:00" }, { "Id": "9-1003", "BrandCode": 9, "BrandName": "AUDI", "ModelCode": 1003, "ModelName": "A6 AVANT 2.0 TDI (177) MULTITRONIC", "Prices": [ { "Year": 2016, "Price": 2038213 }, { "Year": 2015, "Price": 1977068 } ], "IsActive": true, "UpdatedAt": "2026-08-10T11:14:17.38+03:00" } ] } ``` **SDK Code** ```python 200 - Marka filtreli (brandCode=9, pageSize=3) import requests url = "https://testgatewayapi.insurapps.net/api/VehicleCatalogs" querystring = {"page":"1","pageSize":"3","brandCode":"9"} headers = {"Authorization": "Bearer "} response = requests.get(url, headers=headers, params=querystring) print(response.json()) ``` ```javascript 200 - Marka filtreli (brandCode=9, pageSize=3) const url = 'https://testgatewayapi.insurapps.net/api/VehicleCatalogs?page=1&pageSize=3&brandCode=9'; const options = {method: 'GET', headers: {Authorization: 'Bearer '}}; try { const response = await fetch(url, options); const data = await response.json(); console.log(data); } catch (error) { console.error(error); } ``` ```go 200 - Marka filtreli (brandCode=9, pageSize=3) package main import ( "fmt" "net/http" "io" ) func main() { url := "https://testgatewayapi.insurapps.net/api/VehicleCatalogs?page=1&pageSize=3&brandCode=9" req, _ := http.NewRequest("GET", url, nil) req.Header.Add("Authorization", "Bearer ") res, _ := http.DefaultClient.Do(req) defer res.Body.Close() body, _ := io.ReadAll(res.Body) fmt.Println(res) fmt.Println(string(body)) } ``` ```ruby 200 - Marka filtreli (brandCode=9, pageSize=3) require 'uri' require 'net/http' url = URI("https://testgatewayapi.insurapps.net/api/VehicleCatalogs?page=1&pageSize=3&brandCode=9") http = Net::HTTP.new(url.host, url.port) http.use_ssl = true request = Net::HTTP::Get.new(url) request["Authorization"] = 'Bearer ' response = http.request(request) puts response.read_body ``` ```java 200 - Marka filtreli (brandCode=9, pageSize=3) import com.mashape.unirest.http.HttpResponse; import com.mashape.unirest.http.Unirest; HttpResponse response = Unirest.get("https://testgatewayapi.insurapps.net/api/VehicleCatalogs?page=1&pageSize=3&brandCode=9") .header("Authorization", "Bearer ") .asString(); ``` ```php 200 - Marka filtreli (brandCode=9, pageSize=3) request('GET', 'https://testgatewayapi.insurapps.net/api/VehicleCatalogs?page=1&pageSize=3&brandCode=9', [ 'headers' => [ 'Authorization' => 'Bearer ', ], ]); echo $response->getBody(); ``` ```csharp 200 - Marka filtreli (brandCode=9, pageSize=3) using RestSharp; var client = new RestClient("https://testgatewayapi.insurapps.net/api/VehicleCatalogs?page=1&pageSize=3&brandCode=9"); var request = new RestRequest(Method.GET); request.AddHeader("Authorization", "Bearer "); IRestResponse response = client.Execute(request); ``` ```swift 200 - Marka filtreli (brandCode=9, pageSize=3) import Foundation let headers = ["Authorization": "Bearer "] let request = NSMutableURLRequest(url: NSURL(string: "https://testgatewayapi.insurapps.net/api/VehicleCatalogs?page=1&pageSize=3&brandCode=9")! as URL, cachePolicy: .useProtocolCachePolicy, timeoutInterval: 10.0) request.httpMethod = "GET" request.allHTTPHeaderFields = headers let session = URLSession.shared let dataTask = session.dataTask(with: request as URLRequest, completionHandler: { (data, response, error) -> Void in if (error != nil) { print(error as Any) } else { let httpResponse = response as? HTTPURLResponse print(httpResponse) } }) dataTask.resume() ``` ### 200 - Sürüm bazlı delta (version) **Response** ```json { "Version": "52C958DB9124FAD5021C7AFA54F2699E0459A5B0", "LatestVersion": "52C958DB9124FAD5021C7AFA54F2699E0459A5B0", "Page": 1, "PageSize": 1000, "TotalCount": 2, "Data": [ { "Id": "9-1001", "BrandCode": 9, "BrandName": "AUDI", "ModelCode": 1001, "ModelName": "S3 S TRONIC", "Prices": [ { "Year": 2012, "Price": 1530369 } ], "IsActive": true, "UpdatedAt": "2026-08-10T11:14:17.38+03:00" }, { "Id": "9-0877", "BrandCode": 9, "BrandName": "AUDI", "ModelCode": 877, "ModelName": "A4 1.8 T", "Prices": [], "IsActive": false, "UpdatedAt": "2026-08-10T11:14:17.38+03:00" } ] } ``` **SDK Code** ```python 200 - Sürüm bazlı delta (version) import requests url = "https://testgatewayapi.insurapps.net/api/VehicleCatalogs" querystring = {"page":"1","pageSize":"3","brandCode":"9"} headers = {"Authorization": "Bearer "} response = requests.get(url, headers=headers, params=querystring) print(response.json()) ``` ```javascript 200 - Sürüm bazlı delta (version) const url = 'https://testgatewayapi.insurapps.net/api/VehicleCatalogs?page=1&pageSize=3&brandCode=9'; const options = {method: 'GET', headers: {Authorization: 'Bearer '}}; try { const response = await fetch(url, options); const data = await response.json(); console.log(data); } catch (error) { console.error(error); } ``` ```go 200 - Sürüm bazlı delta (version) package main import ( "fmt" "net/http" "io" ) func main() { url := "https://testgatewayapi.insurapps.net/api/VehicleCatalogs?page=1&pageSize=3&brandCode=9" req, _ := http.NewRequest("GET", url, nil) req.Header.Add("Authorization", "Bearer ") res, _ := http.DefaultClient.Do(req) defer res.Body.Close() body, _ := io.ReadAll(res.Body) fmt.Println(res) fmt.Println(string(body)) } ``` ```ruby 200 - Sürüm bazlı delta (version) require 'uri' require 'net/http' url = URI("https://testgatewayapi.insurapps.net/api/VehicleCatalogs?page=1&pageSize=3&brandCode=9") http = Net::HTTP.new(url.host, url.port) http.use_ssl = true request = Net::HTTP::Get.new(url) request["Authorization"] = 'Bearer ' response = http.request(request) puts response.read_body ``` ```java 200 - Sürüm bazlı delta (version) import com.mashape.unirest.http.HttpResponse; import com.mashape.unirest.http.Unirest; HttpResponse response = Unirest.get("https://testgatewayapi.insurapps.net/api/VehicleCatalogs?page=1&pageSize=3&brandCode=9") .header("Authorization", "Bearer ") .asString(); ``` ```php 200 - Sürüm bazlı delta (version) request('GET', 'https://testgatewayapi.insurapps.net/api/VehicleCatalogs?page=1&pageSize=3&brandCode=9', [ 'headers' => [ 'Authorization' => 'Bearer ', ], ]); echo $response->getBody(); ``` ```csharp 200 - Sürüm bazlı delta (version) using RestSharp; var client = new RestClient("https://testgatewayapi.insurapps.net/api/VehicleCatalogs?page=1&pageSize=3&brandCode=9"); var request = new RestRequest(Method.GET); request.AddHeader("Authorization", "Bearer "); IRestResponse response = client.Execute(request); ``` ```swift 200 - Sürüm bazlı delta (version) import Foundation let headers = ["Authorization": "Bearer "] let request = NSMutableURLRequest(url: NSURL(string: "https://testgatewayapi.insurapps.net/api/VehicleCatalogs?page=1&pageSize=3&brandCode=9")! as URL, cachePolicy: .useProtocolCachePolicy, timeoutInterval: 10.0) request.httpMethod = "GET" request.allHTTPHeaderFields = headers let session = URLSession.shared let dataTask = session.dataTask(with: request as URLRequest, completionHandler: { (data, response, error) -> Void in if (error != nil) { print(error as Any) } else { let httpResponse = response as? HTTPURLResponse print(httpResponse) } }) dataTask.resume() ```