Skip to main content

🔌 Spinny API Reference

Complete endpoint documentation for extracting real-time automotive data from India's fastest-growing used car marketplace

API Overview
  • Base URL: https://api.carapis.com/v1/parsers/spinny
  • Authentication: Bearer token required
  • Rate Limits: 1,000 requests/day (free), 10,000 requests/day (pro)
  • Response Format: JSON
  • Timezone: Asia/Kolkata (UTC+5:30)

🔑 Authentication

All API requests require authentication using a Bearer token in the Authorization header:

Authorization: Bearer spinny_parser_sk_your_api_key_here
API Key Format

Your Spinny API key follows this pattern: spinny_parser_sk_ followed by a 32-character hexadecimal string.

📡 Endpoints

Search Vehicles

Search for vehicles with various filters and parameters.

Endpoint: GET /search

Parameters:

ParameterTypeRequiredDescriptionExample
makestringNoVehicle brand"Maruti Suzuki", "Hyundai"
modelstringNoVehicle model"Swift", "i20"
citystringNoCity name"Mumbai", "Delhi", "Bangalore"
year_minintegerNoMinimum year2018
year_maxintegerNoMaximum year2024
price_minintegerNoMinimum price (INR)300000
price_maxintegerNoMaximum price (INR)1500000
fuel_typestringNoFuel type"Petrol", "Diesel"
transmissionstringNoTransmission"Manual", "Automatic"
quality_ratingstringNoQuality rating"excellent", "good", "fair"
body_typestringNoBody type"Hatchback", "Sedan", "SUV"
limitintegerNoResults per page (max 100)25
pageintegerNoPage number1

Example Request:

curl -X GET "https://api.carapis.com/v1/parsers/spinny/search" \
-H "Authorization: Bearer spinny_parser_sk_your_api_key_here" \
-H "Content-Type: application/json" \
-G \
-d "make=Maruti Suzuki" \
-d "city=Mumbai" \
-d "year_min=2018" \
-d "limit=10"

Example Response:

{
"success": true,
"data": {
"vehicles": [
{
"id": "spinny_12345",
"title": "2019 Maruti Suzuki Swift VXI",
"price": {
"fixed_price": 650000,
"currency": "INR",
"emi_monthly": 12500,
"down_payment": 130000,
"negotiable": false
},
"specifications": {
"make": "Maruti Suzuki",
"model": "Swift",
"year": 2019,
"variant": "VXI",
"engine": "1.2L K-Series",
"transmission": "Manual",
"mileage": 25000,
"fuel_type": "Petrol",
"body_type": "Hatchback"
},
"quality_assurance": {
"inspection_score": 95,
"quality_rating": "excellent"
},
"location": {
"city": "Mumbai",
"dealer_name": "Spinny Mumbai Central"
},
"url": "https://www.spinny.com/used-cars/mumbai/maruti-suzuki-swift-vxi-2019",
"created_at": "2024-01-15T10:30:00Z"
}
],
"total_results": 1250,
"page": 1,
"limit": 10
}
}

Get Vehicle Details

Retrieve detailed information about a specific vehicle.

Endpoint: GET /vehicle/\{vehicle_id\}

Parameters:

ParameterTypeRequiredDescription
vehicle_idstringYesUnique vehicle identifier

Example Request:

curl -X GET "https://api.carapis.com/v1/parsers/spinny/vehicle/12345" \
-H "Authorization: Bearer spinny_parser_sk_your_api_key_here" \
-H "Content-Type: application/json"

Example Response:

{
"success": true,
"data": {
"vehicle": {
"id": "spinny_12345",
"title": "2019 Maruti Suzuki Swift VXI",
"price": {
"fixed_price": 650000,
"currency": "INR",
"emi_monthly": 12500,
"down_payment": 130000,
"negotiable": false,
"insurance_estimate": 15000
},
"specifications": {
"make": "Maruti Suzuki",
"model": "Swift",
"year": 2019,
"variant": "VXI",
"engine": "1.2L K-Series",
"transmission": "Manual",
"mileage": 25000,
"fuel_type": "Petrol",
"body_type": "Hatchback",
"color": "Pearl Arctic White",
"seats": 5,
"doors": 5
},
"quality_assurance": {
"inspection_score": 95,
"quality_rating": "excellent",
"inspection_date": "2024-01-15",
"warranty_months": 12,
"service_history": "complete",
"inspection_report": {
"engine_performance": "excellent",
"exterior_condition": "excellent",
"interior_condition": "excellent",
"safety_features": "excellent"
}
},
"location": {
"city": "Mumbai",
"state": "Maharashtra",
"dealer_name": "Spinny Mumbai Central",
"dealer_address": "123, Andheri West, Mumbai",
"home_delivery": true,
"delivery_cost": 0
},
"features": ["Power Steering", "Air Conditioning", "Power Windows", "Central Locking", "Music System", "ABS", "Airbags"],
"financing": {
"available": true,
"partners": ["HDFC Bank", "ICICI Bank"],
"interest_rate": "8.5%",
"tenure_options": [12, 24, 36, 48, 60]
},
"url": "https://www.spinny.com/used-cars/mumbai/maruti-suzuki-swift-vxi-2019",
"created_at": "2024-01-15T10:30:00Z",
"updated_at": "2024-01-20T14:15:00Z"
}
}
}

Get Makes

Retrieve list of available vehicle makes.

Endpoint: GET /makes

Parameters: None

Example Request:

curl -X GET "https://api.carapis.com/v1/parsers/spinny/makes" \
-H "Authorization: Bearer spinny_parser_sk_your_api_key_here" \
-H "Content-Type: application/json"

Example Response:

{
"success": true,
"data": {
"makes": [
{
"name": "Maruti Suzuki",
"count": 15420,
"popular_models": ["Swift", "Dzire", "Brezza"]
},
{
"name": "Hyundai",
"count": 12850,
"popular_models": ["i20", "Verna", "Creta"]
},
{
"name": "Honda",
"count": 8250,
"popular_models": ["City", "Amaze", "WR-V"]
},
{
"name": "Toyota",
"count": 6250,
"popular_models": ["Innova", "Fortuner", "Camry"]
}
]
}
}

Get Models

Retrieve models for a specific make.

Endpoint: GET /makes/\{make\}/models

Parameters:

ParameterTypeRequiredDescription
makestringYesMake name (e.g., "Maruti Suzuki")

Example Request:

curl -X GET "https://api.carapis.com/v1/parsers/spinny/makes/Maruti%20Suzuki/models" \
-H "Authorization: Bearer spinny_parser_sk_your_api_key_here" \
-H "Content-Type: application/json"

Example Response:

{
"success": true,
"data": {
"make": "Maruti Suzuki",
"models": [
{
"name": "Swift",
"count": 3250,
"years": [2018, 2019, 2020, 2021, 2022, 2023, 2024]
},
{
"name": "Dzire",
"count": 2800,
"years": [2018, 2019, 2020, 2021, 2022, 2023, 2024]
},
{
"name": "Brezza",
"count": 1850,
"years": [2019, 2020, 2021, 2022, 2023, 2024]
}
]
}
}

Get Cities

Retrieve list of available cities.

Endpoint: GET /cities

Parameters: None

Example Request:

curl -X GET "https://api.carapis.com/v1/parsers/spinny/cities" \
-H "Authorization: Bearer spinny_parser_sk_your_api_key_here" \
-H "Content-Type: application/json"

Example Response:

{
"success": true,
"data": {
"cities": [
{
"name": "Mumbai",
"state": "Maharashtra",
"count": 8500,
"launch_date": "2015-01-01"
},
{
"name": "Delhi NCR",
"state": "Delhi/Haryana",
"count": 12000,
"launch_date": "2016-03-15"
},
{
"name": "Bangalore",
"state": "Karnataka",
"count": 9200,
"launch_date": "2017-06-20"
},
{
"name": "Hyderabad",
"state": "Telangana",
"count": 6800,
"launch_date": "2018-09-10"
}
]
}
}

Get Market Statistics

Retrieve market statistics and trends.

Endpoint: GET /statistics

Parameters:

ParameterTypeRequiredDescriptionExample
makestringNoFilter by make"Maruti Suzuki"
citystringNoFilter by city"Mumbai"
periodstringNoTime period"30d", "90d", "1y"

Example Request:

curl -X GET "https://api.carapis.com/v1/parsers/spinny/statistics?make=Maruti Suzuki&city=Mumbai&period=30d" \
-H "Authorization: Bearer spinny_parser_sk_your_api_key_here" \
-H "Content-Type: application/json"

Example Response:

{
"success": true,
"data": {
"statistics": {
"total_listings": 15420,
"average_price": 850000,
"price_range": {
"min": 300000,
"max": 2500000
},
"quality_distribution": {
"excellent": 45.2,
"good": 38.8,
"fair": 16.0
},
"popular_models": [
{
"name": "Swift",
"count": 3250,
"avg_price": 750000
},
{
"name": "Dzire",
"count": 2800,
"avg_price": 850000
}
],
"price_trends": [
{
"date": "2024-01-01",
"avg_price": 840000,
"listings": 15200
},
{
"date": "2024-01-15",
"avg_price": 850000,
"listings": 15420
}
]
}
}
}

📊 Response Codes

Status CodeDescription
200Success
400Bad Request - Invalid parameters
401Unauthorized - Invalid API key
403Forbidden - Insufficient permissions
404Not Found - Resource not found
429Too Many Requests - Rate limit exceeded
500Internal Server Error

🔧 Error Responses

Authentication Error

{
"success": false,
"error": {
"code": "AUTH_ERROR",
"message": "Invalid API key",
"details": "The provided API key is invalid or expired"
}
}

Validation Error

{
"success": false,
"error": {
"code": "VALIDATION_ERROR",
"message": "Invalid parameters",
"details": {
"price_min": "Must be a positive integer",
"year_max": "Must be between 1990 and 2024"
}
}
}

Rate Limit Error

{
"success": false,
"error": {
"code": "RATE_LIMIT_EXCEEDED",
"message": "Rate limit exceeded",
"details": {
"limit": 1000,
"reset_time": "2024-01-21T00:00:00Z"
}
}
}

🚨 Rate Limits

Rate Limit Information
  • Free Plan: 1,000 requests per day
  • Pro Plan: 10,000 requests per day
  • Enterprise: Custom limits available
  • Reset Time: Daily at 00:00 UTC

Rate Limit Headers

The API includes rate limit information in response headers:

X-RateLimit-Limit: 1000
X-RateLimit-Remaining: 850
X-RateLimit-Reset: 1705795200

📝 Code Examples

Python SDK

import requests
from typing import Dict, List, Optional

class SpinnyAPI:
def __init__(self, api_key: str):
self.api_key = api_key
self.base_url = "https://api.carapis.com/v1/parsers/spinny"
self.headers = {
"Authorization": f"Bearer \{api_key\}",
"Content-Type": "application/json"
}

def search_vehicles(self, **params) -> Dict:
"""Search for vehicles with filters"""
response = requests.get(f"{self.base_url}/search",
headers=self.headers, params=params)
response.raise_for_status()
return response.json()

def get_vehicle(self, vehicle_id: str) -> Dict:
"""Get detailed vehicle information"""
response = requests.get(f"{self.base_url}/vehicle/\{vehicle_id\}",
headers=self.headers)
response.raise_for_status()
return response.json()

def get_makes(self) -> Dict:
"""Get available makes"""
response = requests.get(f"{self.base_url}/makes",
headers=self.headers)
response.raise_for_status()
return response.json()

def get_models(self, make: str) -> Dict:
"""Get models for a specific make"""
response = requests.get(f"{self.base_url}/makes/\{make\}/models",
headers=self.headers)
response.raise_for_status()
return response.json()

# Usage
api = SpinnyAPI("spinny_parser_sk_your_api_key_here")

# Search for Maruti Suzuki cars
results = api.search_vehicles(make="Maruti Suzuki", city="Mumbai", limit=10)

# Get vehicle details
vehicle = api.get_vehicle("12345")

JavaScript SDK

class SpinnyAPI {
constructor(apiKey) {
this.apiKey = apiKey;
this.baseUrl = 'https://api.carapis.com/v1/parsers/spinny';
this.headers = {
Authorization: `Bearer $\{apiKey\}`,
'Content-Type': 'application/json',
};
}

async searchVehicles(params = {}) {
const queryString = new URLSearchParams(params).toString();
const response = await fetch(`${this.baseUrl}/search?$\{queryString\}`, {
method: 'GET',
headers: this.headers,
});

if (!response.ok) {
throw new Error(`HTTP error! status: ${response.status}`);
}

return await response.json();
}

async getVehicle(vehicleId) {
const response = await fetch(`${this.baseUrl}/vehicle/$\{vehicleId\}`, {
method: 'GET',
headers: this.headers,
});

if (!response.ok) {
throw new Error(`HTTP error! status: ${response.status}`);
}

return await response.json();
}

async getMakes() {
const response = await fetch(`${this.baseUrl}/makes`, {
method: 'GET',
headers: this.headers,
});

if (!response.ok) {
throw new Error(`HTTP error! status: ${response.status}`);
}

return await response.json();
}

async getModels(make) {
const response = await fetch(`${this.baseUrl}/makes/$\{make\}/models`, {
method: 'GET',
headers: this.headers,
});

if (!response.ok) {
throw new Error(`HTTP error! status: ${response.status}`);
}

return await response.json();
}
}

// Usage
const api = new SpinnyAPI('spinny_parser_sk_your_api_key_here');

// Search for Hyundai cars
api
.searchVehicles({ make: 'Hyundai', city: 'Delhi', limit: 10 })
.then((results) => console.log(results))
.catch((error) => console.error(error));

// Get vehicle details
api
.getVehicle('12345')
.then((vehicle) => console.log(vehicle))
.catch((error) => console.error(error));

🔄 Webhooks

Webhook Support

Webhooks are available for real-time data updates. Contact our support team to set up webhook notifications for new listings and price changes.

Webhook Events

EventDescription
vehicle.createdNew vehicle listing added
vehicle.updatedVehicle information updated
vehicle.removedVehicle listing removed
price.changedVehicle price changed
quality.updatedQuality inspection updated

Webhook Payload

{
"event": "vehicle.created",
"timestamp": "2024-01-20T14:30:00Z",
"data": {
"vehicle_id": "12345",
"title": "2019 Maruti Suzuki Swift VXI",
"price": 650000,
"city": "Mumbai",
"quality_rating": "excellent"
}
}

📞 Support

Need Help?

Ready to start? Get your API key and begin extracting Spinny data today!