POST /api/spinny/listings/search
Price: 10 credits
Search Spinny used-car listings in a city or across India by make or model, price, year, kilometres, fuel, body type, transmission, colour, seats, owners, stock status, category, features, registration state and hub: price with taxes and discount, EMI and loan rate, year, km, owners, RTO, hub, status flags and photos
Pass a returned id to spinny/listings for specifications and features, or to spinny/listings/inspection for the inspection report. Make, model and hub aliases come from spinny/models and spinny/hubs.
access-token string requiredtimeout integer — Max scrapping execution timeout (in seconds) (default: 300; min: 20; max: 1500)city string nullable — Spinny city alias; all of India when omitted (examples: "delhi-ncr", "mumbai", "bangalore")makes array nullable — Make slugs (examples: ["maruti-suzuki"], ["hyundai","tata"])models array nullable — Model slugs (examples: ["creta"], ["swift","i20"])price_min integer nullable — Minimum price in rupees (min: 0)price_max integer nullable — Maximum price in rupees (min: 1)year_min integer nullable — Earliest model year (min: 1990; max: 2100)km_max integer nullable — Maximum kilometres driven (min: 1)fuel array nullable — Fuel types (one of: "petrol", "diesel", "cng", "electric", "hybrid")body_type array nullable — Body types (one of: "hatchback", "sedan", "suv", "muv")transmission string nullable — Transmission (one of: "automatic", "manual")color array nullable — Exterior colours (one of: "white", "silver", "grey", "black", "violet", "purple", "blue", "green", "beige", "yellow", "golden", "bronze", "brown", "orange", "wine", "maroon", "red")seats array nullable — Seating capacities (one of: "4", "5", "6-plus")owners array nullable — Owner countsavailability array nullable — Stock status (one of: "available", "booked", "in-refurb", "waitlist-open")category array nullable — Spinny car categories (one of: "assured-plus", "assured", "budget", "luxury", "assured-electric", "luxury-electric")lifestyle array nullable — Lifestyle categories (one of: "value", "feature-packed", "family", "adventure", "commuter", "luxury")features array nullable — Safety and comfort features the car has (one of: "airbags", "fog-lamps", "hill-hold-control", "five_star_ncap,four_star_ncap", "sunroof", "wireless-phone-charging", "air-purifier", "touch-screen-infotainment", "apple-car-play", "parking-sensors", "rear-camera", "360-degree-view-camera", "keyless-start", "cruise-control", "driver-seat-adjustment", "power-windows")rto array nullable — Registration state codes (examples: ["dl"], ["hr","up"])hubs array nullable — Hub aliases (examples: ["delhi-dwarka-sector-21-taj-vivanta-hub"])sort string — Result order; sorting by price or discount needs a city (default: "relevance"; one of: "relevance", "price_asc", "price_desc", "emi_asc", "km_asc", "year_desc", "newest", "discount_desc")count integer required — Max number of results (min: 1; max: 5000)@type string (default: "SpinnyListing")id string requiredurl string nullablemake string nullablemodel string nullablevariant string nullableyear integer nullableregistration_year integer nullablekm_driven integer nullablefuel_type string nullabletransmission string nullabletransmission_type string nullablebody_type string nullablecolor string nullableowner_count integer nullablerto string nullablecurrency string (default: "INR")price number nullableprice_with_taxes number nullableprice_without_gst number nullableprice_without_tax number nullabletax_percent number nullablebase_price number nullableoriginal_price number nullableoriginal_price_without_tax number nullableoriginal_base_price number nullablediscount number nullablediscount_name string nullablediscount_ends_at integer nullablediscount_starts_at integer nullablediscount_sale_type string nullablediscounted_price number nullablediscounted_price_without_gst number nullablediscounted_car_price number nullablediscounted_tcs number nullableemi_monthly number nullableemi_monthly_before_offer number nullableloan_interest_rate number nullableloan_interest_rate_before_offer number nullableloan_amount number nullableloan_amount_min number nullableloan_amount_max number nullableloan_tenure_years number nullableloan_tenure_years_min number nullableloan_tenure_years_max number nullableloan_to_value_max_percent number nullablehas_loan_offer boolean nullableloan_offer_savings number nullabletoken_amount number nullabletoken_amount_max number nullableexchange_bonus number nullablecategory string nullableprocurement_category string nullableis_max_certified boolean nullableis_sold boolean nullableis_booked boolean nullableis_upcoming boolean nullableis_on_hold boolean nullablehold_ends_at integer nullableis_unpublished boolean nullablehas_home_test_drive boolean nullablehas_360_view boolean nullableshortlist_count integer nullablecity string nullablehub_id string nullablehub_name string nullableimage string nullableimages array (default: [])highlights array (default: [])@type string (default: "SpinnyHighlight")detail string nullableshort_title string nullabletag string nullablestrength string nullableprice_breakdown array (default: [])@type string (default: "SpinnyPriceItem")name string requiredlabel string nullableamount number nullabledescription string nullableinsurance object nullable@type string (default: "SpinnyInsurance")third_party_premium number nullablethird_party_insurer string nullablepersonal_accident_cover number nullablepersonal_accident_insurer string nullablepremium_total number nullablegst number nullablegst_percent number nullabletotal number nullablecomponents array (default: [])@type string (default: "SpinnyPriceComponent")name string requiredlabel string nullableamount number nullabledescription string nullableinsurance object nullable (see schema SpinnyInsurance)price_summary array (default: [])@type string (default: "SpinnyPriceItem")name string requiredlabel string nullableamount number nullabledescription string nullableinsurance object nullable@type string (default: "SpinnyInsurance")third_party_premium number nullablethird_party_insurer string nullablepersonal_accident_cover number nullablepersonal_accident_insurer string nullablepremium_total number nullablegst number nullablegst_percent number nullabletotal number nullablecomponents array (default: [])@type string (default: "SpinnyPriceComponent")name string requiredlabel string nullableamount number nullabledescription string nullableinsurance object nullable (see schema SpinnyInsurance)price_summary_without_tax array (default: [])@type string (default: "SpinnyPriceItem")name string requiredlabel string nullableamount number nullabledescription string nullableinsurance object nullable@type string (default: "SpinnyInsurance")third_party_premium number nullablethird_party_insurer string nullablepersonal_accident_cover number nullablepersonal_accident_insurer string nullablepremium_total number nullablegst number nullablegst_percent number nullabletotal number nullablecomponents array (default: [])@type string (default: "SpinnyPriceComponent")name string requiredlabel string nullableamount number nullabledescription string nullableinsurance object nullable (see schema SpinnyInsurance)is_fixed_price boolean nullableis_assured_plus boolean nullablestatus_tag string nullableseller_type string nullableis_waitlist_open boolean nullablewaitlist_slots_free integer nullablewaitlist_slots_max integer nullablewaitlist_slots_held integer nullablehas_showroom_visit boolean nullablepublished_at integer nullablehub_locality string nullablehub_type string nullable422 — The request body did not validate Check the fields against this schema. A URN with the wrong prefix is the most common cause.408 — The request ran past its time limit Raise `timeout` in the request body, up to the maximum this endpoint documents. Lowering `count` or turning off the `with_*` flags also helps, because less work finishes sooner.412 — Spinny has no city under that alias Retrying will not help: either the entity does not exist, or the input points at a different one.429 — Too many requests: a rate limit or a usage window is exhausted When the response carries an X-Retry-After header, wait that many seconds and retry: the same number is in the body as `detail.retry_after`, and the limit clears once that window passes. The message in the body names the limit that was hit.500 — Something broke on our side Retrying will not help. If it keeps happening, send us the X-Request-ID from the response headers.529 — Rate limit reached, or the endpoint is overloaded Wait at least 30 seconds, then retry.X-Error — Error message text (present only on error)X-Request-ID — Unique request identifierX-Execution-Time — Execution time in secondsX-Result-Count — How many records the body carries. 0 means an empty result, which is a normal answer and not by itself an error. A non-zero count can come back together with X-Error when the failure happened partway through — read this header and X-Error independently.X-Total-Available-Results — How many records exist for this query, when the endpoint can say. On a `dry_run` request this is the answer and the body is empty. It saturates: the endpoint's documented maximum means 'at least that many', any smaller number is exact.X-Warning — Present when the request body carried keys this endpoint does not document. They were ignored, so any filter you meant to apply through them did not apply. Check the spelling against this schema and retry.X-Retry-After — Seconds to wait before retrying. Present only on 429.