{"openapi":"3.0.3","info":{"title":"FSD Rentals API","version":"1","description":"Which rental Teslas actually have FSD (Supervised). Dated, sourced, and linked to the host.\n\nA read API with no key; only the publisher's fact review takes a bearer key. Every listing body carries its state, checked date, confirmation date when one exists, stale flag, source, booking link and notice. No car is bookable here; the booking link leads to the host's listing on its platform.\n\nThe same records are served to assistants by the MCP server at https://fsd-rentals-preview.vercel.app/mcp, and described for crawlers at https://fsd-rentals-preview.vercel.app/llms.txt.\n\nThe driver must stay attentive and remains responsible for driving at all times."},"servers":[{"url":"https://fsd-rentals-preview.vercel.app"}],"paths":{"/api/v1/listings":{"get":{"operationId":"listListings","summary":"List published listings","description":"Every published listing, filtered by city and by any declared facet. Each item is the listing's .json body. An unknown city is an empty list, not an error. No other query key is accepted; an unknown key answers 400 validation_failed naming it.","parameters":[{"name":"model","in":"query","required":false,"description":"Model","schema":{"type":"string","enum":["model_3","model_y","model_s","model_x","cybertruck"]}},{"name":"fsd_pricing_mode","in":"query","required":false,"description":"FSD pricing mode","schema":{"type":"string","enum":["included","per_day_addon","per_trip_fee"]}},{"name":"delivery_offered","in":"query","required":false,"description":"Delivery","schema":{"type":"string","enum":["true","false"]}},{"name":"fsd_for_renters","in":"query","required":false,"description":"FSD for renters","schema":{"type":"string","enum":["host_claimed","confirmed","host_declined"]}},{"name":"city","in":"query","required":false,"description":"A city slug, such as knoxville","schema":{"type":"string","minLength":1}},{"name":"limit","in":"query","required":false,"description":"Items per page, 1 to 200","schema":{"default":50,"type":"integer","minimum":1,"maximum":200}},{"name":"offset","in":"query","required":false,"description":"Items to skip, 0 or more","schema":{"default":0,"type":"integer","minimum":0}}],"responses":{"200":{"description":"The list envelope of listing bodies","content":{"application/json":{"schema":{"$ref":"#/components/schemas/listingList"},"example":{"object":"list","data":[{"headline":"A 2025 Model Y in Knoxville, host-claimed, listing read on 6 October 2026, FSD (Supervised) included in the daily rate, read from the host's Turo listing.","fsdForRenters":"host_claimed","checkedOn":"2026-10-06","confirmedOn":null,"stale":false,"sourceUrl":"https://example.com/turo/knoxville-model-y-2025","bookingUrl":"https://example.com/turo/knoxville-model-y-2025","bookingPlatform":"turo","publisherOwned":false,"id":"6f1c2b9e-0d4a-4e5b-9a63-2f8d7c1e4b10","object":"listing","slug":"knoxville-model-y-2025","name":"2025 Model Y","url":"https://fsd-rentals-preview.vercel.app/knoxville/knoxville-model-y-2025","attrs":{"host_display_name":"Example Host","model":"model_y","year":2025,"fsd_pricing_mode":"included","fsd_for_renters":"host_claimed","checked_on":"2026-10-06","source_url":"https://example.com/turo/knoxville-model-y-2025","booking_url":"https://example.com/turo/knoxville-model-y-2025","booking_platform":"turo","publisher_owned":false},"provenance":{"checked_on":{"fact_id":"0b6e8f2a-3c1d-4f7e-8a95-1d2c3b4a5e6f","source_url":"https://example.com/turo/knoxville-model-y-2025","source_type":"booking_platform","captured_at":"2026-10-06T00:00:00.000Z","confidence":1}},"sources":["https://example.com/turo/knoxville-model-y-2025"],"verified_at":"2026-10-06T14:00:00.000Z","published_at":"2026-10-06T14:00:00.000Z","parent":{"type":"city","jsonldType":"City","slug":"knoxville","name":"Knoxville","url":"https://fsd-rentals-preview.vercel.app/knoxville"},"children":[],"notice":"The driver must stay attentive and remains responsible for driving at all times."}],"has_more":false,"total_count":1,"limit":50,"offset":0}}}},"400":{"description":"validation_failed: a query value or a body field is not valid; detail names it","content":{"application/json":{"schema":{"$ref":"#/components/schemas/error"},"example":{"error":{"code":"validation_failed","status":400,"message":"The query is not valid.","detail":[{"field":"limit","message":"Too big: expected number to be <=200"}]}}}}}}}},"/api/v1/listings/{slug}":{"get":{"operationId":"getListing","summary":"One listing","description":"One published listing with its state, checked date, confirmation date, stale flag, source, booking link and notice. This door takes no query key. No other query key is accepted; an unknown key answers 400 validation_failed naming it.","parameters":[{"name":"slug","in":"path","required":true,"description":"The listing's slug","schema":{"type":"string"}}],"responses":{"200":{"description":"The listing body","content":{"application/json":{"schema":{"$ref":"#/components/schemas/listing"},"example":{"headline":"A 2025 Model Y in Knoxville, host-claimed, listing read on 6 October 2026, FSD (Supervised) included in the daily rate, read from the host's Turo listing.","fsdForRenters":"host_claimed","checkedOn":"2026-10-06","confirmedOn":null,"stale":false,"sourceUrl":"https://example.com/turo/knoxville-model-y-2025","bookingUrl":"https://example.com/turo/knoxville-model-y-2025","bookingPlatform":"turo","publisherOwned":false,"id":"6f1c2b9e-0d4a-4e5b-9a63-2f8d7c1e4b10","object":"listing","slug":"knoxville-model-y-2025","name":"2025 Model Y","url":"https://fsd-rentals-preview.vercel.app/knoxville/knoxville-model-y-2025","attrs":{"host_display_name":"Example Host","model":"model_y","year":2025,"fsd_pricing_mode":"included","fsd_for_renters":"host_claimed","checked_on":"2026-10-06","source_url":"https://example.com/turo/knoxville-model-y-2025","booking_url":"https://example.com/turo/knoxville-model-y-2025","booking_platform":"turo","publisher_owned":false},"provenance":{"checked_on":{"fact_id":"0b6e8f2a-3c1d-4f7e-8a95-1d2c3b4a5e6f","source_url":"https://example.com/turo/knoxville-model-y-2025","source_type":"booking_platform","captured_at":"2026-10-06T00:00:00.000Z","confidence":1}},"sources":["https://example.com/turo/knoxville-model-y-2025"],"verified_at":"2026-10-06T14:00:00.000Z","published_at":"2026-10-06T14:00:00.000Z","parent":{"type":"city","jsonldType":"City","slug":"knoxville","name":"Knoxville","url":"https://fsd-rentals-preview.vercel.app/knoxville"},"children":[],"notice":"The driver must stay attentive and remains responsible for driving at all times."}}}},"400":{"description":"validation_failed: a query value or a body field is not valid; detail names it","content":{"application/json":{"schema":{"$ref":"#/components/schemas/error"},"example":{"error":{"code":"validation_failed","status":400,"message":"The query is not valid.","detail":[{"field":"foo","message":"foo is not a query parameter of this route."}]}}}}},"404":{"description":"not_found: no published resource at this address","content":{"application/json":{"schema":{"$ref":"#/components/schemas/error"},"example":{"error":{"code":"not_found","status":404,"message":"No published listing \"nope\"."}}}}}}}},"/api/v1/cities":{"get":{"operationId":"listCities","summary":"List published cities","description":"Every published city. Each item is the city's .json body. No other query key is accepted; an unknown key answers 400 validation_failed naming it.","parameters":[{"name":"limit","in":"query","required":false,"description":"Items per page, 1 to 200","schema":{"default":50,"type":"integer","minimum":1,"maximum":200}},{"name":"offset","in":"query","required":false,"description":"Items to skip, 0 or more","schema":{"default":0,"type":"integer","minimum":0}}],"responses":{"200":{"description":"The list envelope of city bodies","content":{"application/json":{"schema":{"$ref":"#/components/schemas/cityList"},"example":{"object":"list","data":[{"headline":"Tesla rentals that advertise FSD (Supervised), dated and linked to the source.","checkedOn":"2026-10-06","stale":false,"publisherOffer":"announced","id":"2a7d9c41-5b3e-4f60-8e12-7c9b0a1d3e54","object":"city","slug":"knoxville","name":"Knoxville","url":"https://fsd-rentals-preview.vercel.app/knoxville","attrs":{"name":"Knoxville","state":"TN","publisher_offer":"announced"},"provenance":{},"sources":["https://example.com/knoxville"],"verified_at":"2026-10-06T14:00:00.000Z","published_at":"2026-10-06T14:00:00.000Z","parent":null,"children":[{"type":"listing","jsonldType":"Car","slug":"knoxville-model-y-2025","name":"2025 Model Y","url":"https://fsd-rentals-preview.vercel.app/knoxville/knoxville-model-y-2025"}],"notice":"The driver must stay attentive and remains responsible for driving at all times."}],"has_more":false,"total_count":1,"limit":50,"offset":0}}}},"400":{"description":"validation_failed: a query value or a body field is not valid; detail names it","content":{"application/json":{"schema":{"$ref":"#/components/schemas/error"},"example":{"error":{"code":"validation_failed","status":400,"message":"The query is not valid.","detail":[{"field":"limit","message":"Too big: expected number to be <=200"}]}}}}}}}},"/api/v1/cities/{slug}":{"get":{"operationId":"getCity","summary":"One city","description":"One published city with its headline, checked date, publisher's offer and listings. This door takes no query key. No other query key is accepted; an unknown key answers 400 validation_failed naming it.","parameters":[{"name":"slug","in":"path","required":true,"description":"The city's slug, such as knoxville","schema":{"type":"string"}}],"responses":{"200":{"description":"The city body","content":{"application/json":{"schema":{"$ref":"#/components/schemas/city"},"example":{"headline":"Tesla rentals that advertise FSD (Supervised), dated and linked to the source.","checkedOn":"2026-10-06","stale":false,"publisherOffer":"announced","id":"2a7d9c41-5b3e-4f60-8e12-7c9b0a1d3e54","object":"city","slug":"knoxville","name":"Knoxville","url":"https://fsd-rentals-preview.vercel.app/knoxville","attrs":{"name":"Knoxville","state":"TN","publisher_offer":"announced"},"provenance":{},"sources":["https://example.com/knoxville"],"verified_at":"2026-10-06T14:00:00.000Z","published_at":"2026-10-06T14:00:00.000Z","parent":null,"children":[{"type":"listing","jsonldType":"Car","slug":"knoxville-model-y-2025","name":"2025 Model Y","url":"https://fsd-rentals-preview.vercel.app/knoxville/knoxville-model-y-2025"}],"notice":"The driver must stay attentive and remains responsible for driving at all times."}}}},"400":{"description":"validation_failed: a query value or a body field is not valid; detail names it","content":{"application/json":{"schema":{"$ref":"#/components/schemas/error"},"example":{"error":{"code":"validation_failed","status":400,"message":"The query is not valid.","detail":[{"field":"foo","message":"foo is not a query parameter of this route."}]}}}}},"404":{"description":"not_found: no published resource at this address","content":{"application/json":{"schema":{"$ref":"#/components/schemas/error"},"example":{"error":{"code":"not_found","status":404,"message":"No published city \"nope\"."}}}}}}}},"/api/v1/lists/{slug}":{"get":{"operationId":"getList","summary":"One curated list of listings","description":"confirmed-for-renters: Listings whose host replied that FSD (Supervised) is active for renters, newest checked date first. fsd-included: Listings whose host includes FSD (Supervised) in the daily rate, newest checked date first. No other query key is accepted; an unknown key answers 400 validation_failed naming it.","parameters":[{"name":"slug","in":"path","required":true,"description":"The list's slug","schema":{"type":"string","enum":["confirmed-for-renters","fsd-included"]}},{"name":"limit","in":"query","required":false,"description":"Items per page, 1 to 200","schema":{"default":50,"type":"integer","minimum":1,"maximum":200}},{"name":"offset","in":"query","required":false,"description":"Items to skip, 0 or more","schema":{"default":0,"type":"integer","minimum":0}}],"responses":{"200":{"description":"The list envelope of listing bodies with the list's criteria","content":{"application/json":{"schema":{"$ref":"#/components/schemas/rankedList"},"example":{"object":"list","data":[{"headline":"A 2025 Model Y in Knoxville, host-claimed, listing read on 6 October 2026, FSD (Supervised) included in the daily rate, read from the host's Turo listing.","fsdForRenters":"host_claimed","checkedOn":"2026-10-06","confirmedOn":null,"stale":false,"sourceUrl":"https://example.com/turo/knoxville-model-y-2025","bookingUrl":"https://example.com/turo/knoxville-model-y-2025","bookingPlatform":"turo","publisherOwned":false,"id":"6f1c2b9e-0d4a-4e5b-9a63-2f8d7c1e4b10","object":"listing","slug":"knoxville-model-y-2025","name":"2025 Model Y","url":"https://fsd-rentals-preview.vercel.app/knoxville/knoxville-model-y-2025","attrs":{"host_display_name":"Example Host","model":"model_y","year":2025,"fsd_pricing_mode":"included","fsd_for_renters":"host_claimed","checked_on":"2026-10-06","source_url":"https://example.com/turo/knoxville-model-y-2025","booking_url":"https://example.com/turo/knoxville-model-y-2025","booking_platform":"turo","publisher_owned":false},"provenance":{"checked_on":{"fact_id":"0b6e8f2a-3c1d-4f7e-8a95-1d2c3b4a5e6f","source_url":"https://example.com/turo/knoxville-model-y-2025","source_type":"booking_platform","captured_at":"2026-10-06T00:00:00.000Z","confidence":1}},"sources":["https://example.com/turo/knoxville-model-y-2025"],"verified_at":"2026-10-06T14:00:00.000Z","published_at":"2026-10-06T14:00:00.000Z","parent":{"type":"city","jsonldType":"City","slug":"knoxville","name":"Knoxville","url":"https://fsd-rentals-preview.vercel.app/knoxville"},"children":[],"notice":"The driver must stay attentive and remains responsible for driving at all times."}],"has_more":false,"total_count":1,"limit":50,"offset":0,"list":{"slug":"confirmed-for-renters","title":"Tesla rentals with FSD (Supervised) confirmed for renters","criteria":"Listings whose host replied that FSD (Supervised) is active for renters, newest checked date first.","rank_by":[{"key":"checked_on","dir":"desc"},{"key":"host_display_name","dir":"asc"}]}}}}},"400":{"description":"validation_failed: a query value or a body field is not valid; detail names it","content":{"application/json":{"schema":{"$ref":"#/components/schemas/error"},"example":{"error":{"code":"validation_failed","status":400,"message":"The query is not valid.","detail":[{"field":"limit","message":"Too big: expected number to be <=200"}]}}}}},"404":{"description":"not_found: no published resource at this address","content":{"application/json":{"schema":{"$ref":"#/components/schemas/error"},"example":{"error":{"code":"not_found","status":404,"message":"No list \"nope\"."}}}}}}}},"/api/v1/search":{"get":{"operationId":"search","summary":"Search published cities and listings by name","description":"Matches the name or slug of every published city and listing. Each item is that entity's .json body. No other query key is accepted; an unknown key answers 400 validation_failed naming it.","parameters":[{"name":"q","in":"query","required":false,"description":"Text to match in a name or slug","schema":{"type":"string"}},{"name":"limit","in":"query","required":false,"description":"Items per page, 1 to 200","schema":{"default":50,"type":"integer","minimum":1,"maximum":200}},{"name":"offset","in":"query","required":false,"description":"Items to skip, 0 or more","schema":{"default":0,"type":"integer","minimum":0}}],"responses":{"200":{"description":"The list envelope of city and listing bodies","content":{"application/json":{"schema":{"$ref":"#/components/schemas/searchList"},"example":{"object":"list","data":[{"headline":"Tesla rentals that advertise FSD (Supervised), dated and linked to the source.","checkedOn":"2026-10-06","stale":false,"publisherOffer":"announced","id":"2a7d9c41-5b3e-4f60-8e12-7c9b0a1d3e54","object":"city","slug":"knoxville","name":"Knoxville","url":"https://fsd-rentals-preview.vercel.app/knoxville","attrs":{"name":"Knoxville","state":"TN","publisher_offer":"announced"},"provenance":{},"sources":["https://example.com/knoxville"],"verified_at":"2026-10-06T14:00:00.000Z","published_at":"2026-10-06T14:00:00.000Z","parent":null,"children":[{"type":"listing","jsonldType":"Car","slug":"knoxville-model-y-2025","name":"2025 Model Y","url":"https://fsd-rentals-preview.vercel.app/knoxville/knoxville-model-y-2025"}],"notice":"The driver must stay attentive and remains responsible for driving at all times."},{"headline":"A 2025 Model Y in Knoxville, host-claimed, listing read on 6 October 2026, FSD (Supervised) included in the daily rate, read from the host's Turo listing.","fsdForRenters":"host_claimed","checkedOn":"2026-10-06","confirmedOn":null,"stale":false,"sourceUrl":"https://example.com/turo/knoxville-model-y-2025","bookingUrl":"https://example.com/turo/knoxville-model-y-2025","bookingPlatform":"turo","publisherOwned":false,"id":"6f1c2b9e-0d4a-4e5b-9a63-2f8d7c1e4b10","object":"listing","slug":"knoxville-model-y-2025","name":"2025 Model Y","url":"https://fsd-rentals-preview.vercel.app/knoxville/knoxville-model-y-2025","attrs":{"host_display_name":"Example Host","model":"model_y","year":2025,"fsd_pricing_mode":"included","fsd_for_renters":"host_claimed","checked_on":"2026-10-06","source_url":"https://example.com/turo/knoxville-model-y-2025","booking_url":"https://example.com/turo/knoxville-model-y-2025","booking_platform":"turo","publisher_owned":false},"provenance":{"checked_on":{"fact_id":"0b6e8f2a-3c1d-4f7e-8a95-1d2c3b4a5e6f","source_url":"https://example.com/turo/knoxville-model-y-2025","source_type":"booking_platform","captured_at":"2026-10-06T00:00:00.000Z","confidence":1}},"sources":["https://example.com/turo/knoxville-model-y-2025"],"verified_at":"2026-10-06T14:00:00.000Z","published_at":"2026-10-06T14:00:00.000Z","parent":{"type":"city","jsonldType":"City","slug":"knoxville","name":"Knoxville","url":"https://fsd-rentals-preview.vercel.app/knoxville"},"children":[],"notice":"The driver must stay attentive and remains responsible for driving at all times."}],"has_more":false,"total_count":2,"limit":50,"offset":0}}}},"400":{"description":"validation_failed: a query value or a body field is not valid; detail names it","content":{"application/json":{"schema":{"$ref":"#/components/schemas/error"},"example":{"error":{"code":"validation_failed","status":400,"message":"The query is not valid.","detail":[{"field":"limit","message":"Too big: expected number to be <=200"}]}}}}}}}},"/api/v1/subscribers":{"post":{"operationId":"createSubscriber","summary":"Join a city's priority list","description":"Creates a pending subscriber and sends one double opt-in confirmation mail with a signed link; the address joins the list only once that confirmation link is opened. Nothing is held.","requestBody":{"required":true,"content":{"application/json":{"schema":{"type":"object","required":["email","source_path","wanted_from","wanted_to","price_band"],"properties":{"email":{"type":"string","format":"email","pattern":"^(?!\\.)(?!.*\\.\\.)([A-Za-z0-9_'+\\-\\.]*)[A-Za-z0-9_+-]@([A-Za-z0-9][A-Za-z0-9\\-]*\\.)+[A-Za-z]{2,}$"},"source_path":{"type":"string","minLength":1,"maxLength":512,"description":"The path the subscriber came from"},"entity":{"type":"string","minLength":1,"description":"A published city slug, when known"},"wanted_from":{"type":"string","format":"date","pattern":"^(?:(?:\\d\\d[2468][048]|\\d\\d[13579][26]|\\d\\d0[48]|[02468][048]00|[13579][26]00)-02-29|\\d{4}-(?:(?:0[13578]|1[02])-(?:0[1-9]|[12]\\d|3[01])|(?:0[469]|11)-(?:0[1-9]|[12]\\d|30)|(?:02)-(?:0[1-9]|1\\d|2[0-8])))$","description":"Wanted from"},"wanted_to":{"type":"string","format":"date","pattern":"^(?:(?:\\d\\d[2468][048]|\\d\\d[13579][26]|\\d\\d0[48]|[02468][048]00|[13579][26]00)-02-29|\\d{4}-(?:(?:0[13578]|1[02])-(?:0[1-9]|[12]\\d|3[01])|(?:0[469]|11)-(?:0[1-9]|[12]\\d|30)|(?:02)-(?:0[1-9]|1\\d|2[0-8])))$","description":"Wanted to"},"price_band":{"type":"string","enum":["under_90","90_to_110","over_110"],"description":"Price band"}}},"example":{"email":"traveler@example.com","source_path":"/knoxville","entity":"knoxville","wanted_from":"2026-11-06","wanted_to":"2026-11-08","price_band":"90_to_110"}}}},"responses":{"201":{"description":"Subscriber created pending; confirmation mail delivery reported","content":{"application/json":{"schema":{"type":"object","required":["id","object","status","delivery"],"properties":{"id":{"type":"string"},"object":{"type":"string","enum":["subscriber"]},"status":{"type":"string"},"delivery":{"type":"string"}}},"example":{"id":"9d3f7a20-6c1b-4e8d-a5f4-3b2c1d0e9f87","object":"subscriber","status":"pending","delivery":"sent"}}}},"400":{"description":"validation_failed: a query value or a body field is not valid; detail names it","content":{"application/json":{"schema":{"$ref":"#/components/schemas/error"},"example":{"error":{"code":"validation_failed","status":400,"message":"The subscription is not valid.","detail":[{"field":"email","message":"Invalid email address"}]}}}}},"429":{"description":"rate_limited: too many subscriptions from this connection","content":{"application/json":{"schema":{"$ref":"#/components/schemas/error"},"example":{"error":{"code":"rate_limited","status":429,"message":"Too many subscriptions from this connection. Try again in 60 minutes."}}}}}}}},"/api/v1/facts/{id}/review":{"post":{"operationId":"reviewFact","summary":"Approve or reject one proposed fact","description":"The publisher's review of one fact in the ledger, with the bearer key REVIEW_API_KEY. The fact's entity is projected again and asked to publish; the result says whether it published and, when not, the rule that refused it. Every read route needs no key.","security":[{"reviewKey":[]}],"parameters":[{"name":"id","in":"path","required":true,"description":"The fact's id, a UUID; any other value answers 404","schema":{"type":"string","format":"uuid"}}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"type":"object","properties":{"verdict":{"type":"string","enum":["approve","reject"]},"reason":{"type":"string","minLength":1,"maxLength":500},"actor":{"type":"string","minLength":1,"maxLength":80,"description":"Who reviewed; api when omitted"}},"required":["verdict","reason"]},"example":{"verdict":"approve","reason":"Re-read the host's listing on 6 October 2026."}}}},"responses":{"200":{"description":"The fact's new status and whether its entity published","content":{"application/json":{"schema":{"type":"object","required":["object","fact_id","status","override","entity"],"properties":{"object":{"type":"string","enum":["review"]},"fact_id":{"type":"string"},"status":{"type":"string"},"override":{"type":"boolean"},"entity":{"type":"object","required":["type","slug","published","reason"],"properties":{"type":{"type":"string"},"slug":{"type":"string"},"published":{"type":"boolean","description":"Whether the entity is published after the review. A published entity with a required fact still proposed stays published"},"reason":{"type":"string","nullable":true,"description":"The publish gate that did not pass, such as unreviewed_required_facts while a required fact is proposed, or null when every gate passed"}}}}},"example":{"object":"review","fact_id":"0b6e8f2a-3c1d-4f7e-8a95-1d2c3b4a5e6f","status":"approved","override":false,"entity":{"type":"listing","slug":"knoxville-model-y-2025","published":true,"reason":null}}}}},"400":{"description":"validation_failed: the body needs verdict (approve or reject) and a reason; detail names each field","content":{"application/json":{"schema":{"$ref":"#/components/schemas/error"},"example":{"error":{"code":"validation_failed","status":400,"message":"The review is not valid.","detail":[{"field":"verdict","message":"Invalid option: expected one of \"approve\"|\"reject\""},{"field":"reason","message":"Invalid input: expected string, received undefined"}]}}}}},"401":{"description":"unauthorized: no bearer key, or not the review key","content":{"application/json":{"schema":{"$ref":"#/components/schemas/error"},"example":{"error":{"code":"unauthorized","status":401,"message":"A valid bearer key is required to review facts."}}}}},"404":{"description":"not_found: the id is not a UUID, no fact has this id, or its entity or type is unknown","content":{"application/json":{"schema":{"$ref":"#/components/schemas/error"},"example":{"error":{"code":"not_found","status":404,"message":"No fact nope."}}}}},"409":{"description":"review_conflict: the review would leave a published entity without an approved fact it needs, or refused by its wording, threshold or published-child gate; a required fact still proposed is not a conflict; nothing is written","content":{"application/json":{"schema":{"$ref":"#/components/schemas/error"},"example":{"error":{"code":"review_conflict","status":409,"message":"The review would leave a published listing without checked_on, which it needs to stay published."}}}}}}}},"/api/v1/health":{"get":{"operationId":"health","summary":"Liveness","description":"Answers ok while the server runs. environment names the deployment: production, preview, development.","responses":{"200":{"description":"The server is up","content":{"application/json":{"schema":{"type":"object","required":["ok","environment"],"properties":{"ok":{"type":"boolean"},"environment":{"type":"string","enum":["production","preview","development"]}}},"example":{"ok":true,"environment":"production"}}}}}}},"/{city}.json":{"get":{"operationId":"getCityTwin","summary":"A city page as JSON","description":"The .json twin of a city page: the same body as /api/v1/cities/{slug}. A .md twin sits at /{city}.md. This door takes no query key. No other query key is accepted; an unknown key answers 400 validation_failed naming it.","parameters":[{"name":"city","in":"path","required":true,"description":"The city's slug, such as knoxville","schema":{"type":"string"}}],"responses":{"200":{"description":"The city body","content":{"application/json":{"schema":{"$ref":"#/components/schemas/city"},"example":{"headline":"Tesla rentals that advertise FSD (Supervised), dated and linked to the source.","checkedOn":"2026-10-06","stale":false,"publisherOffer":"announced","id":"2a7d9c41-5b3e-4f60-8e12-7c9b0a1d3e54","object":"city","slug":"knoxville","name":"Knoxville","url":"https://fsd-rentals-preview.vercel.app/knoxville","attrs":{"name":"Knoxville","state":"TN","publisher_offer":"announced"},"provenance":{},"sources":["https://example.com/knoxville"],"verified_at":"2026-10-06T14:00:00.000Z","published_at":"2026-10-06T14:00:00.000Z","parent":null,"children":[{"type":"listing","jsonldType":"Car","slug":"knoxville-model-y-2025","name":"2025 Model Y","url":"https://fsd-rentals-preview.vercel.app/knoxville/knoxville-model-y-2025"}],"notice":"The driver must stay attentive and remains responsible for driving at all times."}}}},"400":{"description":"validation_failed: a query value or a body field is not valid; detail names it","content":{"application/json":{"schema":{"$ref":"#/components/schemas/error"},"example":{"error":{"code":"validation_failed","status":400,"message":"The query is not valid.","detail":[{"field":"foo","message":"foo is not a query parameter of this route."}]}}}}},"404":{"description":"not_found: no published resource at this address","content":{"application/json":{"schema":{"$ref":"#/components/schemas/error"},"example":{"error":{"code":"not_found","status":404,"message":"No published city at /nope."}}}}}}}},"/{city}/{listing}.json":{"get":{"operationId":"getListingTwin","summary":"A listing page as JSON","description":"The .json twin of a listing page: the same body as /api/v1/listings/{slug}. A .md twin sits at /{city}/{listing}.md. This door takes no query key. No other query key is accepted; an unknown key answers 400 validation_failed naming it.","parameters":[{"name":"city","in":"path","required":true,"description":"The listing's city slug","schema":{"type":"string"}},{"name":"listing","in":"path","required":true,"description":"The listing's slug","schema":{"type":"string"}}],"responses":{"200":{"description":"The listing body","content":{"application/json":{"schema":{"$ref":"#/components/schemas/listing"},"example":{"headline":"A 2025 Model Y in Knoxville, host-claimed, listing read on 6 October 2026, FSD (Supervised) included in the daily rate, read from the host's Turo listing.","fsdForRenters":"host_claimed","checkedOn":"2026-10-06","confirmedOn":null,"stale":false,"sourceUrl":"https://example.com/turo/knoxville-model-y-2025","bookingUrl":"https://example.com/turo/knoxville-model-y-2025","bookingPlatform":"turo","publisherOwned":false,"id":"6f1c2b9e-0d4a-4e5b-9a63-2f8d7c1e4b10","object":"listing","slug":"knoxville-model-y-2025","name":"2025 Model Y","url":"https://fsd-rentals-preview.vercel.app/knoxville/knoxville-model-y-2025","attrs":{"host_display_name":"Example Host","model":"model_y","year":2025,"fsd_pricing_mode":"included","fsd_for_renters":"host_claimed","checked_on":"2026-10-06","source_url":"https://example.com/turo/knoxville-model-y-2025","booking_url":"https://example.com/turo/knoxville-model-y-2025","booking_platform":"turo","publisher_owned":false},"provenance":{"checked_on":{"fact_id":"0b6e8f2a-3c1d-4f7e-8a95-1d2c3b4a5e6f","source_url":"https://example.com/turo/knoxville-model-y-2025","source_type":"booking_platform","captured_at":"2026-10-06T00:00:00.000Z","confidence":1}},"sources":["https://example.com/turo/knoxville-model-y-2025"],"verified_at":"2026-10-06T14:00:00.000Z","published_at":"2026-10-06T14:00:00.000Z","parent":{"type":"city","jsonldType":"City","slug":"knoxville","name":"Knoxville","url":"https://fsd-rentals-preview.vercel.app/knoxville"},"children":[],"notice":"The driver must stay attentive and remains responsible for driving at all times."}}}},"400":{"description":"validation_failed: a query value or a body field is not valid; detail names it","content":{"application/json":{"schema":{"$ref":"#/components/schemas/error"},"example":{"error":{"code":"validation_failed","status":400,"message":"The query is not valid.","detail":[{"field":"foo","message":"foo is not a query parameter of this route."}]}}}}},"404":{"description":"not_found: no published resource at this address","content":{"application/json":{"schema":{"$ref":"#/components/schemas/error"},"example":{"error":{"code":"not_found","status":404,"message":"No published listing at /knoxville/nope."}}}}}}}},"/lists/{slug}.json":{"get":{"operationId":"getListTwin","summary":"A list page as JSON","description":"The .json twin of a list page: the same body as /api/v1/lists/{slug}. A .md twin sits at /lists/{slug}.md. No other query key is accepted; an unknown key answers 400 validation_failed naming it.","parameters":[{"name":"slug","in":"path","required":true,"description":"The list's slug","schema":{"type":"string","enum":["confirmed-for-renters","fsd-included"]}},{"name":"limit","in":"query","required":false,"description":"Items per page, 1 to 200","schema":{"default":50,"type":"integer","minimum":1,"maximum":200}},{"name":"offset","in":"query","required":false,"description":"Items to skip, 0 or more","schema":{"default":0,"type":"integer","minimum":0}}],"responses":{"200":{"description":"The list envelope of listing bodies with the list's criteria","content":{"application/json":{"schema":{"$ref":"#/components/schemas/rankedList"},"example":{"object":"list","data":[{"headline":"A 2025 Model Y in Knoxville, host-claimed, listing read on 6 October 2026, FSD (Supervised) included in the daily rate, read from the host's Turo listing.","fsdForRenters":"host_claimed","checkedOn":"2026-10-06","confirmedOn":null,"stale":false,"sourceUrl":"https://example.com/turo/knoxville-model-y-2025","bookingUrl":"https://example.com/turo/knoxville-model-y-2025","bookingPlatform":"turo","publisherOwned":false,"id":"6f1c2b9e-0d4a-4e5b-9a63-2f8d7c1e4b10","object":"listing","slug":"knoxville-model-y-2025","name":"2025 Model Y","url":"https://fsd-rentals-preview.vercel.app/knoxville/knoxville-model-y-2025","attrs":{"host_display_name":"Example Host","model":"model_y","year":2025,"fsd_pricing_mode":"included","fsd_for_renters":"host_claimed","checked_on":"2026-10-06","source_url":"https://example.com/turo/knoxville-model-y-2025","booking_url":"https://example.com/turo/knoxville-model-y-2025","booking_platform":"turo","publisher_owned":false},"provenance":{"checked_on":{"fact_id":"0b6e8f2a-3c1d-4f7e-8a95-1d2c3b4a5e6f","source_url":"https://example.com/turo/knoxville-model-y-2025","source_type":"booking_platform","captured_at":"2026-10-06T00:00:00.000Z","confidence":1}},"sources":["https://example.com/turo/knoxville-model-y-2025"],"verified_at":"2026-10-06T14:00:00.000Z","published_at":"2026-10-06T14:00:00.000Z","parent":{"type":"city","jsonldType":"City","slug":"knoxville","name":"Knoxville","url":"https://fsd-rentals-preview.vercel.app/knoxville"},"children":[],"notice":"The driver must stay attentive and remains responsible for driving at all times."}],"has_more":false,"total_count":1,"limit":50,"offset":0,"list":{"slug":"confirmed-for-renters","title":"Tesla rentals with FSD (Supervised) confirmed for renters","criteria":"Listings whose host replied that FSD (Supervised) is active for renters, newest checked date first.","rank_by":[{"key":"checked_on","dir":"desc"},{"key":"host_display_name","dir":"asc"}]}}}}},"400":{"description":"validation_failed: a query value or a body field is not valid; detail names it","content":{"application/json":{"schema":{"$ref":"#/components/schemas/error"},"example":{"error":{"code":"validation_failed","status":400,"message":"The query is not valid.","detail":[{"field":"limit","message":"Too big: expected number to be <=200"}]}}}}},"404":{"description":"not_found: no published resource at this address","content":{"application/json":{"schema":{"$ref":"#/components/schemas/error"},"example":{"error":{"code":"not_found","status":404,"message":"No list \"nope\"."}}}}}}}}},"components":{"schemas":{"entityRef":{"type":"object","properties":{"type":{"type":"string"},"jsonldType":{"type":"string"},"slug":{"type":"string"},"name":{"type":"string"},"url":{"type":"string","format":"uri"}},"required":["type","jsonldType","slug","name","url"],"additionalProperties":false},"listing":{"type":"object","properties":{"sampleNotice":{"type":"string"},"headline":{"nullable":true,"type":"string"},"fsdForRenters":{"type":"string","description":"host-claimed: the host's listing advertises FSD (Supervised) and no host has replied. confirmed: the host replied that FSD (Supervised) is active for renters. A confirmation 90 days old or older reads host-claimed."},"checkedOn":{"nullable":true,"type":"string","format":"date","pattern":"^(?:(?:\\d\\d[2468][048]|\\d\\d[13579][26]|\\d\\d0[48]|[02468][048]00|[13579][26]00)-02-29|\\d{4}-(?:(?:0[13578]|1[02])-(?:0[1-9]|[12]\\d|3[01])|(?:0[469]|11)-(?:0[1-9]|[12]\\d|30)|(?:02)-(?:0[1-9]|1\\d|2[0-8])))$"},"confirmedOn":{"nullable":true,"type":"string","format":"date","pattern":"^(?:(?:\\d\\d[2468][048]|\\d\\d[13579][26]|\\d\\d0[48]|[02468][048]00|[13579][26]00)-02-29|\\d{4}-(?:(?:0[13578]|1[02])-(?:0[1-9]|[12]\\d|3[01])|(?:0[469]|11)-(?:0[1-9]|[12]\\d|30)|(?:02)-(?:0[1-9]|1\\d|2[0-8])))$"},"stale":{"type":"boolean"},"sourceUrl":{"nullable":true,"type":"string"},"bookingUrl":{"nullable":true,"type":"string"},"bookingPlatform":{"nullable":true,"type":"string"},"publisherOwned":{"type":"boolean"},"id":{"type":"string"},"object":{"type":"string"},"slug":{"type":"string"},"name":{"type":"string"},"url":{"type":"string","format":"uri"},"attrs":{"type":"object","properties":{"host_display_name":{"type":"string","maxLength":2000},"model":{"type":"string","enum":["model_3","model_y","model_s","model_x","cybertruck"]},"year":{"type":"integer","minimum":2012,"maximum":2028},"hardware_generation":{"type":"string","maxLength":40},"fsd_version":{"type":"string","maxLength":40},"fsd_pricing_mode":{"type":"string","enum":["included","per_day_addon","per_trip_fee"]},"fsd_price":{"type":"number","minimum":0},"daily_rate":{"type":"number","minimum":0},"delivery_offered":{"type":"boolean"},"fsd_for_renters":{"type":"string","enum":["host_claimed","confirmed","host_declined"]},"checked_on":{"type":"string","format":"date","pattern":"^(?:(?:\\d\\d[2468][048]|\\d\\d[13579][26]|\\d\\d0[48]|[02468][048]00|[13579][26]00)-02-29|\\d{4}-(?:(?:0[13578]|1[02])-(?:0[1-9]|[12]\\d|3[01])|(?:0[469]|11)-(?:0[1-9]|[12]\\d|30)|(?:02)-(?:0[1-9]|1\\d|2[0-8])))$"},"confirmed_on":{"type":"string","format":"date","pattern":"^(?:(?:\\d\\d[2468][048]|\\d\\d[13579][26]|\\d\\d0[48]|[02468][048]00|[13579][26]00)-02-29|\\d{4}-(?:(?:0[13578]|1[02])-(?:0[1-9]|[12]\\d|3[01])|(?:0[469]|11)-(?:0[1-9]|[12]\\d|30)|(?:02)-(?:0[1-9]|1\\d|2[0-8])))$"},"source_url":{"type":"string","format":"uri"},"booking_url":{"type":"string","format":"uri"},"booking_platform":{"type":"string","enum":["turo","eon"]},"publisher_owned":{"type":"boolean"},"opted_out":{"type":"boolean"},"source_gone":{"type":"boolean"}},"additionalProperties":false},"provenance":{"type":"object","additionalProperties":{"type":"object","properties":{"fact_id":{"type":"string"},"source_url":{"type":"string"},"source_type":{"type":"string"},"captured_at":{"type":"string"},"confidence":{"type":"number"}},"required":["fact_id","source_url","source_type","captured_at","confidence"],"additionalProperties":false}},"sources":{"type":"array","items":{"type":"string"}},"verified_at":{"nullable":true,"type":"string"},"published_at":{"nullable":true,"type":"string"},"parent":{"nullable":true,"type":"object","properties":{"type":{"type":"string"},"jsonldType":{"type":"string"},"slug":{"type":"string"},"name":{"type":"string"},"url":{"type":"string","format":"uri"}},"required":["type","jsonldType","slug","name","url"],"additionalProperties":false},"children":{"type":"array","items":{"type":"object","properties":{"type":{"type":"string"},"jsonldType":{"type":"string"},"slug":{"type":"string"},"name":{"type":"string"},"url":{"type":"string","format":"uri"}},"required":["type","jsonldType","slug","name","url"],"additionalProperties":false}},"notice":{"nullable":true,"type":"string"}},"required":["headline","fsdForRenters","checkedOn","confirmedOn","stale","sourceUrl","bookingUrl","bookingPlatform","publisherOwned","id","object","slug","name","url","attrs","provenance","sources","verified_at","published_at","parent","children","notice"],"additionalProperties":false},"city":{"type":"object","properties":{"sampleNotice":{"type":"string"},"headline":{"nullable":true,"type":"string"},"checkedOn":{"nullable":true,"type":"string","format":"date","pattern":"^(?:(?:\\d\\d[2468][048]|\\d\\d[13579][26]|\\d\\d0[48]|[02468][048]00|[13579][26]00)-02-29|\\d{4}-(?:(?:0[13578]|1[02])-(?:0[1-9]|[12]\\d|3[01])|(?:0[469]|11)-(?:0[1-9]|[12]\\d|30)|(?:02)-(?:0[1-9]|1\\d|2[0-8])))$"},"stale":{"type":"boolean"},"publisherOffer":{"type":"string"},"id":{"type":"string"},"object":{"type":"string"},"slug":{"type":"string"},"name":{"type":"string"},"url":{"type":"string","format":"uri"},"attrs":{"type":"object","properties":{"name":{"type":"string","maxLength":2000},"state":{"type":"string","maxLength":2},"publisher_offer":{"type":"string","enum":["none","announced"]},"headline":{"type":"string","maxLength":160},"offer_text":{"type":"string","maxLength":2000},"delivery_note":{"type":"string","maxLength":2000}},"additionalProperties":false},"provenance":{"type":"object","additionalProperties":{"type":"object","properties":{"fact_id":{"type":"string"},"source_url":{"type":"string"},"source_type":{"type":"string"},"captured_at":{"type":"string"},"confidence":{"type":"number"}},"required":["fact_id","source_url","source_type","captured_at","confidence"],"additionalProperties":false}},"sources":{"type":"array","items":{"type":"string"}},"verified_at":{"nullable":true,"type":"string"},"published_at":{"nullable":true,"type":"string"},"parent":{"nullable":true,"type":"object","properties":{"type":{"type":"string"},"jsonldType":{"type":"string"},"slug":{"type":"string"},"name":{"type":"string"},"url":{"type":"string","format":"uri"}},"required":["type","jsonldType","slug","name","url"],"additionalProperties":false},"children":{"type":"array","items":{"type":"object","properties":{"type":{"type":"string"},"jsonldType":{"type":"string"},"slug":{"type":"string"},"name":{"type":"string"},"url":{"type":"string","format":"uri"}},"required":["type","jsonldType","slug","name","url"],"additionalProperties":false}},"notice":{"nullable":true,"type":"string"}},"required":["headline","checkedOn","stale","id","object","slug","name","url","attrs","provenance","sources","verified_at","published_at","parent","children","notice"],"additionalProperties":false},"listingList":{"type":"object","properties":{"object":{"type":"string","enum":["list"]},"data":{"type":"array","items":{"$ref":"#/components/schemas/listing"}},"has_more":{"type":"boolean"},"total_count":{"type":"integer","minimum":0,"maximum":9007199254740991},"limit":{"type":"integer","minimum":1,"maximum":9007199254740991},"offset":{"type":"integer","minimum":0,"maximum":9007199254740991}},"required":["object","data","has_more","total_count","limit","offset"],"additionalProperties":false},"cityList":{"type":"object","properties":{"object":{"type":"string","enum":["list"]},"data":{"type":"array","items":{"$ref":"#/components/schemas/city"}},"has_more":{"type":"boolean"},"total_count":{"type":"integer","minimum":0,"maximum":9007199254740991},"limit":{"type":"integer","minimum":1,"maximum":9007199254740991},"offset":{"type":"integer","minimum":0,"maximum":9007199254740991}},"required":["object","data","has_more","total_count","limit","offset"],"additionalProperties":false},"rankedList":{"type":"object","properties":{"object":{"type":"string","enum":["list"]},"data":{"type":"array","items":{"$ref":"#/components/schemas/listing"}},"has_more":{"type":"boolean"},"total_count":{"type":"integer","minimum":0,"maximum":9007199254740991},"limit":{"type":"integer","minimum":1,"maximum":9007199254740991},"offset":{"type":"integer","minimum":0,"maximum":9007199254740991},"list":{"type":"object","properties":{"slug":{"type":"string"},"title":{"type":"string"},"criteria":{"type":"string"},"rank_by":{"type":"array","items":{"type":"object","properties":{"key":{"type":"string"},"dir":{"type":"string","enum":["asc","desc"]}},"required":["key","dir"],"additionalProperties":false}}},"required":["slug","title","criteria","rank_by"],"additionalProperties":false}},"required":["object","data","has_more","total_count","limit","offset","list"],"additionalProperties":false},"searchResult":{"type":"object","properties":{"sampleNotice":{"type":"string"},"headline":{"nullable":true,"type":"string"},"fsdForRenters":{"type":"string"},"checkedOn":{"nullable":true,"type":"string","format":"date","pattern":"^(?:(?:\\d\\d[2468][048]|\\d\\d[13579][26]|\\d\\d0[48]|[02468][048]00|[13579][26]00)-02-29|\\d{4}-(?:(?:0[13578]|1[02])-(?:0[1-9]|[12]\\d|3[01])|(?:0[469]|11)-(?:0[1-9]|[12]\\d|30)|(?:02)-(?:0[1-9]|1\\d|2[0-8])))$"},"confirmedOn":{"nullable":true,"type":"string","format":"date","pattern":"^(?:(?:\\d\\d[2468][048]|\\d\\d[13579][26]|\\d\\d0[48]|[02468][048]00|[13579][26]00)-02-29|\\d{4}-(?:(?:0[13578]|1[02])-(?:0[1-9]|[12]\\d|3[01])|(?:0[469]|11)-(?:0[1-9]|[12]\\d|30)|(?:02)-(?:0[1-9]|1\\d|2[0-8])))$"},"stale":{"type":"boolean"},"sourceUrl":{"nullable":true,"type":"string"},"bookingUrl":{"nullable":true,"type":"string"},"bookingPlatform":{"nullable":true,"type":"string"},"publisherOwned":{"type":"boolean"},"id":{"type":"string"},"object":{"type":"string","enum":["listing","city"]},"slug":{"type":"string"},"name":{"type":"string"},"url":{"type":"string","format":"uri"},"attrs":{"type":"object","additionalProperties":{}},"provenance":{"type":"object","additionalProperties":{"type":"object","properties":{"fact_id":{"type":"string"},"source_url":{"type":"string"},"source_type":{"type":"string"},"captured_at":{"type":"string"},"confidence":{"type":"number"}},"required":["fact_id","source_url","source_type","captured_at","confidence"],"additionalProperties":false}},"sources":{"type":"array","items":{"type":"string"}},"verified_at":{"nullable":true,"type":"string"},"published_at":{"nullable":true,"type":"string"},"parent":{"nullable":true,"type":"object","properties":{"type":{"type":"string"},"jsonldType":{"type":"string"},"slug":{"type":"string"},"name":{"type":"string"},"url":{"type":"string","format":"uri"}},"required":["type","jsonldType","slug","name","url"],"additionalProperties":false},"children":{"type":"array","items":{"type":"object","properties":{"type":{"type":"string"},"jsonldType":{"type":"string"},"slug":{"type":"string"},"name":{"type":"string"},"url":{"type":"string","format":"uri"}},"required":["type","jsonldType","slug","name","url"],"additionalProperties":false}},"notice":{"nullable":true,"type":"string"},"publisherOffer":{"type":"string"}},"required":["headline","checkedOn","stale","id","object","slug","name","url","attrs","notice"],"additionalProperties":false,"description":"A listing body or a city body; object names which. Every field of both schemas is declared. Every result carries id, object, slug, name, url, attrs, headline, notice, checkedOn, stale; each other field is present when the result's own schema has it."},"searchList":{"type":"object","properties":{"object":{"type":"string","enum":["list"]},"data":{"type":"array","items":{"$ref":"#/components/schemas/searchResult"}},"has_more":{"type":"boolean"},"total_count":{"type":"integer","minimum":0,"maximum":9007199254740991},"limit":{"type":"integer","minimum":1,"maximum":9007199254740991},"offset":{"type":"integer","minimum":0,"maximum":9007199254740991}},"required":["object","data","has_more","total_count","limit","offset"],"additionalProperties":false},"error":{"type":"object","properties":{"error":{"type":"object","properties":{"code":{"type":"string"},"status":{"type":"integer","minimum":-9007199254740991,"maximum":9007199254740991},"message":{"type":"string"},"detail":{"description":"No single type: a string for a contextual error, or an array of {field, message} objects when code is validation_failed."}},"required":["code","status","message"],"additionalProperties":false}},"required":["error"],"additionalProperties":false}},"securitySchemes":{"reviewKey":{"type":"http","scheme":"bearer","description":"The publisher's REVIEW_API_KEY; only the fact review route reads it"}}}}