@lap v0.3
# Machine-readable API spec. Each @endpoint block is one API call.
@api CIS Automotive API
@version 1.0
@auth ApiKey apiKey in query
@endpoints 35
@hint download_for_search
@toc getToken(2), makeSubUserKey(1), revokeSubUserKey(1), getSubUserKeys(1), getRegions(1), getBrands(1), getModels(1), getInactiveModels(1), daysToSell(1), daysSupply(1), listPrice(1), salePrice(1), salePriceHistogram(1), modelYearDist(1), topModels(1), getRegionBrandMarketShare(1), getRegionMarketShare(1), getDealers(1), getDealersByRegion(1), getDealersByID(1), regionSales(1), regionDailySales(1), vehicleHistory(1), similarSalePrice(1), valuation(1), vehicleSeen(1), vinDecode(1), listings2(1), listings(1), listingsByDate(1), listingsByRegion(1), listingsByRegionAndDate(1), listingsByZipCode(1), listingsByZipCodeAndDate(1)

@group getToken
@endpoint GET /getToken
@required {apiID: str, apiKey: str}
@returns(200) {token: str, expires: int, createdOn: int}
@errors {422}

@endpoint POST /getToken
@required {apiID: str, apiKey: str}
@returns(200) {token: str, expires: int, createdOn: int}
@errors {422}

@endgroup

@group makeSubUserKey
@endpoint POST /makeSubUserKey
@required {apiID: str, apiKey: str}
@optional {siteName: str=localhost, endPoints: [str]=*}
@returns(200) {token: str, expires: int, createdOn: int, domain: str, endPoints: [str], uuid: str}
@errors {422}

@endgroup

@group revokeSubUserKey
@endpoint PUT /revokeSubUserKey
@required {apiID: str, apiKey: str, subUserKeyUUID: str}
@returns(200) {brandName: str, modelName: str, regionName: str, condition: str, msg: str, cacheTimeLimit: int, data: any}
@errors {422}

@endgroup

@group getSubUserKeys
@endpoint GET /getSubUserKeys
@required {apiID: str, apiKey: str}
@returns(200) {brandName: str, modelName: str, regionName: str, condition: str, msg: str, cacheTimeLimit: int, data: any}
@errors {422}

@endgroup

@group getRegions
@endpoint GET /getRegions
@required {jwt: str}
@returns(200) {brandName: str, modelName: str, regionName: str, condition: str, msg: str, cacheTimeLimit: int, data: [str]}
@errors {422}

@endgroup

@group getBrands
@endpoint GET /getBrands
@required {jwt: str}
@returns(200) {brandName: str, modelName: str, regionName: str, condition: str, msg: str, cacheTimeLimit: int, data: [str]}
@errors {422}

@endgroup

@group getModels
@endpoint GET /getModels
@required {jwt: str, brandName: str}
@optional {filtered: bool=true}
@returns(200) {brandName: str, modelName: str, regionName: str, condition: str, msg: str, cacheTimeLimit: int, data: [map]}
@errors {422}

@endgroup

@group getInactiveModels
@endpoint GET /getInactiveModels
@required {jwt: str, brandName: str}
@returns(200) {brandName: str, modelName: str, regionName: str, condition: str, msg: str, cacheTimeLimit: int, data: [map]}
@errors {422}

@endgroup

@group daysToSell
@endpoint GET /daysToSell
@required {jwt: str, brandName: str}
@optional {regionName: str=REGION_STATE_CA}
@returns(200) {brandName: str, modelName: str, regionName: str, condition: str, msg: str, cacheTimeLimit: int, data: any}
@errors {422}

@endgroup

@group daysSupply
@endpoint GET /daysSupply
@required {jwt: str, brandName: str}
@optional {regionName: str=REGION_STATE_CA}
@returns(200) {brandName: str, modelName: str, regionName: str, condition: str, msg: str, cacheTimeLimit: int, data: any}
@errors {422}

@endgroup

@group listPrice
@endpoint GET /listPrice
@required {jwt: str, brandName: str}
@optional {regionName: str=REGION_STATE_CA}
@returns(200) {brandName: str, modelName: str, regionName: str, condition: str, msg: str, cacheTimeLimit: int, data: [map]}
@errors {422}

@endgroup

@group salePrice
@endpoint GET /salePrice
@required {jwt: str, brandName: str}
@optional {regionName: str=REGION_STATE_CA}
@returns(200) {brandName: str, modelName: str, regionName: str, condition: str, msg: str, cacheTimeLimit: int, data: [map]}
@errors {422}

@endgroup

@group salePriceHistogram
@endpoint GET /salePriceHistogram
@required {jwt: str, modelName: str, brandName: str}
@optional {regionName: str=REGION_STATE_CA}
@returns(200) {brandName: str, modelName: str, regionName: str, condition: str, msg: str, cacheTimeLimit: int, data: [map]}
@errors {422}

@endgroup

@group modelYearDist
@endpoint GET /modelYearDist
@required {jwt: str, modelName: str, brandName: str}
@optional {regionName: str=REGION_STATE_CA}
@returns(200) {brandName: str, modelName: str, regionName: str, condition: str, msg: str, cacheTimeLimit: int, data: [map]}
@errors {422}

@endgroup

@group topModels
@endpoint GET /topModels
@required {jwt: str}
@optional {regionName: str=REGION_STATE_CA}
@returns(200) {brandName: str, modelName: str, regionName: str, condition: str, msg: str, cacheTimeLimit: int, data: [map]}
@errors {422}

@endgroup

@group getRegionBrandMarketShare
@endpoint GET /getRegionBrandMarketShare
@required {jwt: str, brandName: str}
@optional {regionName: str=REGION_STATE_CA}
@returns(200) {brandName: str, modelName: str, regionName: str, condition: str, msg: str, cacheTimeLimit: int, data: any}
@errors {422}

@endgroup

@group getRegionMarketShare
@endpoint GET /getRegionMarketShare
@required {jwt: str}
@optional {regionName: str=REGION_STATE_CA}
@returns(200) {brandName: str, modelName: str, regionName: str, condition: str, msg: str, cacheTimeLimit: int, data: any}
@errors {422}

@endgroup

@group getDealers
@endpoint GET /getDealers
@required {jwt: str, zipCode: int}
@returns(200) {brandName: str, modelName: str, regionName: str, condition: str, msg: str, cacheTimeLimit: int, data: [map]}
@errors {422}

@endgroup

@group getDealersByRegion
@endpoint GET /getDealersByRegion
@required {jwt: str}
@optional {regionName: str=REGION_STATE_CA, page: int=1}
@returns(200) {brandName: str, modelName: str, regionName: str, condition: str, msg: str, cacheTimeLimit: int, data: map{page: int, maxPages: int, dealers: [map]}}
@errors {422}

@endgroup

@group getDealersByID
@endpoint GET /getDealersByID
@required {jwt: str, dealerID: int}
@returns(200) {brandName: str, modelName: str, regionName: str, condition: str, msg: str, cacheTimeLimit: int, data: [map]}
@errors {422}

@endgroup

@group regionSales
@endpoint GET /regionSales
@required {jwt: str, brandName: str, regionName: str, month: str(date)}
@returns(200) {brandName: str, modelName: str, regionName: str, condition: str, msg: str, cacheTimeLimit: int, data: any}
@errors {422}

@endgroup

@group regionDailySales
@endpoint GET /regionDailySales
@required {jwt: str, brandName: str, regionName: str, day: str(date)}
@returns(200) {brandName: str, modelName: str, regionName: str, condition: str, msg: str, cacheTimeLimit: int, data: any}
@errors {422}

@endgroup

@group vehicleHistory
@endpoint GET /vehicleHistory
@required {jwt: str, vin: str}
@returns(200) {brandName: str, modelName: str, regionName: str, condition: str, msg: str, cacheTimeLimit: int, data: map{vin: str, data: [map]}}
@errors {422}

@endgroup

@group similarSalePrice
@endpoint GET /similarSalePrice
@required {jwt: str, vin: str}
@optional {regionName: str=REGION_STATE_CA, daysBack: int=45, sameYear: bool=false}
@returns(200) {brandName: str, modelName: str, regionName: str, condition: str, msg: str, cacheTimeLimit: int, data: map{newSaleAvg: num, newSaleStdDev: num, newCount: int, usedSaleAvg: num, usedSaleStdDev: num, usedCount: int, milesAvg: num, milesStdDev: num, mileCount: int, daysBack: int}, startDate: str(date), endDate: str(date)}
@errors {422}

@endgroup

@group valuation
@endpoint GET /valuation
@required {jwt: str, vin: str}
@optional {dealerID: int=0, zipCode: int=0, latitude: num=0, longitude: num=0, radius: num=0, regionName: str, mileageLow: int=0, mileageHigh: int=0, startDate: str(date), endDate: str(date), daysBack: int=45, newCars: bool=false, extendedSearch: bool=false, sameYear: bool=false}
@returns(200) {brandName: str, modelName: str, regionName: str, condition: str, msg: str, cacheTimeLimit: int, data: map{newSaleAvg: num, newSaleStdDev: num, newCount: int, usedSaleAvg: num, usedSaleStdDev: num, usedCount: int, milesAvg: num, milesStdDev: num, mileCount: int, daysBack: int}, startDate: str(date), endDate: str(date)}
@errors {422}

@endgroup

@group vehicleSeen
@endpoint GET /vehicleSeen
@required {jwt: str, vin: str, afterDate: str(date)}
@returns(200) {brandName: str, modelName: str, regionName: str, condition: str, msg: str, cacheTimeLimit: int, data: bool}
@errors {422}

@endgroup

@group vinDecode
@endpoint GET /vinDecode
@required {jwt: str, vin: str}
@optional {passEmpty: bool=false, includeRecall: bool=true}
@returns(200) {brandName: str, modelName: str, regionName: str, condition: str, msg: str, cacheTimeLimit: int, data: any}
@errors {422}

@endgroup

@group listings2
@endpoint GET /listings2
@required {jwt: str}
@optional {dealerID: int=0, zipCode: int=0, latitude: num=0, longitude: num=0, radius: num=0, regionName: str, brandName: str, modelName: str, modelYear: int=0, mileageLow: int=0, mileageHigh: int=0, startDate: str(date), endDate: str(date), daysBack: int=45, page: int=1, newCars: bool=true, extendedSearch: bool=false}
@returns(200) {brandName: str, modelName: str, regionName: str, condition: str, msg: str, cacheTimeLimit: int, data: map{page: int, maxPages: int, listings: [map]}, startDate: str(date), endDate: str(date)}
@errors {422}

@endgroup

@group listings
@endpoint GET /listings
@required {jwt: str, dealerID: int}
@optional {page: int=1, newCars: bool=true}
@returns(200) {brandName: str, modelName: str, regionName: str, condition: str, msg: str, cacheTimeLimit: int, data: map{page: int, maxPages: int, listings: [map]}, startDate: str(date), endDate: str(date)}
@errors {422}

@endgroup

@group listingsByDate
@endpoint GET /listingsByDate
@required {jwt: str, dealerID: int, startDate: str(date), endDate: str(date)}
@optional {page: int=1, newCars: bool=true}
@returns(200) {brandName: str, modelName: str, regionName: str, condition: str, msg: str, cacheTimeLimit: int, data: map{page: int, maxPages: int, listings: [map]}, startDate: str(date), endDate: str(date)}
@errors {422}

@endgroup

@group listingsByRegion
@endpoint GET /listingsByRegion
@required {jwt: str, regionName: str, modelName: str}
@optional {daysBack: int=10, page: int=1, newCars: bool=true}
@returns(200) {brandName: str, modelName: str, regionName: str, condition: str, msg: str, cacheTimeLimit: int, data: map{page: int, maxPages: int, listings: [map]}, startDate: str(date), endDate: str(date)}
@errors {422}

@endgroup

@group listingsByRegionAndDate
@endpoint GET /listingsByRegionAndDate
@required {jwt: str, regionName: str, modelName: str, startDate: str(date), endDate: str(date)}
@optional {page: int=1, newCars: bool=true}
@returns(200) {brandName: str, modelName: str, regionName: str, condition: str, msg: str, cacheTimeLimit: int, data: map{page: int, maxPages: int, listings: [map]}, startDate: str(date), endDate: str(date)}
@errors {422}

@endgroup

@group listingsByZipCode
@endpoint GET /listingsByZipCode
@required {jwt: str, zipCode: int}
@optional {page: int=1, newCars: bool=true, modelName: str}
@returns(200) {brandName: str, modelName: str, regionName: str, condition: str, msg: str, cacheTimeLimit: int, data: map{page: int, maxPages: int, listings: [map]}, startDate: str(date), endDate: str(date)}
@errors {422}

@endgroup

@group listingsByZipCodeAndDate
@endpoint GET /listingsByZipCodeAndDate
@required {jwt: str, zipCode: int, startDate: str(date), endDate: str(date)}
@optional {page: int=1, newCars: bool=true, modelName: str}
@returns(200) {brandName: str, modelName: str, regionName: str, condition: str, msg: str, cacheTimeLimit: int, data: map{page: int, maxPages: int, listings: [map]}, startDate: str(date), endDate: str(date)}
@errors {422}

@endgroup

@end
