tarva.io APItarva.io ↗
Access Porsche and Ferrari listing data, VIN-decoded specs, dealer info, and market price trends via the Tarva.io API. 4 endpoints, no scraping required.
curl -X GET 'https://api.parse.bot/scraper/966fe8cf-8ae3-462f-8ac3-21496a897f3a/search_listings?page=1&sort=recommended&makes=porsche&specs=PCCB&colors=Blue&models=911+GT3&status=active&page_size=3&generations=992.1&transmissions=Automatic' \ -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 tarva-io-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: Tarva SDK — Porsche & Ferrari marketplace, bounded and re-runnable."""
from parse_apis.Tarva_API import Tarva, Make, Sort, ListingNotFound
client = Tarva()
# Search Porsche 911 GT3 listings sorted by price
for listing in client.listings.search(makes=Make.PORSCHE, models="911 GT3", sort=Sort.PRICE_LOW, limit=5):
print(listing.year, listing.model, listing.exterior_color, listing.price)
# Drill-down: take one listing then get full details
listing = client.listings.search(makes=Make.FERRARI, models="296 GTB", limit=1).first()
if listing:
detail = client.listings.get(short_id=listing.short_id)
print(detail.model, detail.transmission, detail.specs)
if detail.technical_data:
for spec in detail.technical_data.performance:
print(f" {spec.key}: {spec.value}")
# VIN lookup: decode a Porsche by VIN
vin_result = client.vin_results.lookup(vin="WP0AC2A8XNS275219")
print(vin_result.vehicle.make, vin_result.vehicle.model, vin_result.vehicle.exterior_color)
print(f"Factory options: {vin_result.option_count}, key: {vin_result.key_options}")
# Typed error handling
try:
client.listings.get(short_id="INVALID_ID_123")
except ListingNotFound as exc:
print(f"Listing not found: {exc}")
# Market data overview
for model in client.market_datas.get(limit=3):
print(model.model, model.generation, model.median_price, model.price_change_30d)
print("exercised: listings.search / listings.get / vin_results.lookup / market_datas.get")
Search Porsche and Ferrari listings with filters for make, model, generation, transmission, color, specs, and status. Results are paginated and sortable. Returns listing summaries with price, location, mileage, and key specifications.
| Param | Type | Description |
|---|---|---|
| page | integer | Page number for pagination. |
| sort | string | Sort order for results. |
| makes | string | Filter by make. Accepted values: porsche, ferrari. |
| specs | string | Filter by spec/option name (e.g. 'PCCB', 'Full Bucket Seats', 'Front Axle Lift', 'Weissach Package'). |
| colors | string | Filter by color family (e.g. 'Black', 'Blue', 'Red', 'White', 'Grey', 'Silver', 'Green', 'Yellow', 'Orange', 'Purple', 'PTS'). |
| models | string | Filter by model name (e.g. '911 GT3', '296 GTB', 'Cayman GT4'). Must match model names returned in listings. |
| status | string | Listing status filter. |
| page_size | integer | Number of results per page (max 24). |
| generations | string | Filter by generation code (e.g. '992.1', '992.2', '991.1', '718'). |
| transmissions | string | Filter by transmission type. Accepted values: Automatic, Manual. |
{
"type": "object",
"fields": {
"page": "integer",
"total": "integer",
"listings": "array of listing summaries",
"page_size": "integer"
},
"sample": {
"data": {
"page": 1,
"total": 624,
"listings": [
{
"vin": "WP0AC2A98RS263097",
"make": "porsche",
"slug": "2024-porsche-911-gt3",
"year": 2024,
"image": "https://images.tarva.io/images/75b0eeb2b83ee5bd.webp",
"model": "911 GT3",
"price": null,
"specs": [
"Full Bucket Seats",
"Front Axle Lift"
],
"status": "active",
"mileage": 684,
"shortId": "CXMwmDmi",
"location": "Miami, FL",
"soldDate": null,
"soldPrice": null,
"dealerName": "duPont REGISTRY Private Client Service",
"generation": "992.1",
"sellerType": "auction",
"colorFamily": "Silver",
"transmission": "Automatic",
"exteriorColor": "GT Silver Metallic",
"interiorColor": "Black"
}
],
"page_size": 3
},
"status": "success"
}
}About the tarva.io API
The Tarva.io API exposes 4 endpoints covering Porsche GT and Ferrari vehicle listings, VIN decoding, and market price data. Use search_listings to filter inventory by make, model, color, generation, or factory option, and get_listing to retrieve full technical details, dealer name, and listing URL for a specific vehicle by its short ID.
Listing Search and Detail
search_listings accepts filters including makes (porsche or ferrari), models (e.g. '911 GT3', '296 GTB'), colors, specs (factory options like 'PCCB' or 'Weissach Package'), and status. Results are paginated up to 24 per page via page_size and include price, mileage, location, and key specifications per listing. To retrieve the full record for a vehicle — including vin, generation, dealerName, listingUrl, and the complete specs array — pass the short_id from search results to get_listing.
VIN Lookup
lookup_vin accepts a 17-character VIN and returns a vehicle object containing make, model, year, generation, transmission, exteriorColor, colorFamily, and a technicalData block covering body dimensions, engine specs, drivetrain, and performance figures. The response also includes key_options, an option_count integer reflecting the number of factory options decoded from the VIN, and a listing object if an active market listing is currently associated with that VIN.
Market Data
get_market_data requires no inputs and returns a models array covering popular Porsche GT and Ferrari models. Each entry includes model name, generation, year range, median_price, listing_count, and a 30-day price change percentage, plus monthly price trend data. This makes it straightforward to track how median asking prices shift for a specific generation over time without querying individual listings.
The tarva.io API is a managed, monitored endpoint for tarva.io — not a raw scraper you maintain. Every endpoint is automatically health-checked on a schedule, and when tarva.io 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 tarva.io 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?+
- Alert buyers when a 911 GT3 RS with PCCB and Front Axle Lift appears in inventory via search_listings spec filters
- Build a VIN history tool that surfaces factory options and generation details using lookup_vin
- Track median price trends for Ferrari 296 GTB and 488 Pista using get_market_data monthly figures
- Display dealer name, listing URL, and full spec sheet on a vehicle detail page using get_listing
- Compare 30-day price change percentages across Porsche GT generations to time a purchase
- Filter search_listings by color family and transmission to shortlist vehicles for a specific buyer profile
- Cross-reference VIN-decoded option_count against listing price to identify under-optioned or over-priced cars
| 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 | 250 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.