πŸš—

LocalWashAdvisor

Public API Β· v2.2 Β· Car Wash + Mobile Wash + Agent API

No auth requiredπŸ”‘ API key Β· agent booking & couponsOpenAPI YAML β†—

Result Ranking

All search results β€” from every AI agent including ours β€” are ranked by this fixed 3-tier trust hierarchy. Verified and claimed are the same state (one or the other is always used). Within each band: distance β†’ Bayesian rating β†’ active coupons β†’ review count.

#1
⭐ Verified · Premium
Owner confirmed + paid plan β€” top of every list
#2
βœ… Verified Β· Free
Owner confirmed, free plan
#3
πŸ”“ Unverified
Seed / unclaimed listing β€” no owner account
πŸ€–

Agent Booking β€” End to End

API key required

AI agents with an API key can complete a mobile-wash booking with no user sign-in: discover washers with the public tools, create the booking via JSON-RPC, hand the customer a Stripe payment link, and let the webhook confirm it. An eligible coupon can be claimed first and its redemption code supplied to create_booking to reduce checkout.

0
Get an API keyAuthorization: Bearer <key>

Keys are issued by the LocalWashAdvisor team β€” see API Key Authentication below. Scopes: agent:book for booking, agent:coupons for coupon claims.

1
Find washers

Pass customer lat/lng β†’ washers whose service area covers that point, with distance, services, and starting price.

2
Show profile & price

Bio, services with prices/durations, working hours, ratings, background-check and insurance status.

3
Check availability

Taken slots for a date (YYYY-MM-DD). Anything not in taken is free.

4
Optional coupon

After explicit customer confirmation, claim a selected coupon and keep its redemption_code. It must belong to the mobile washer’s affiliated business.

5
Create booking

After the customer confirms the details and price, validate the slot, service area and coupon server-side. Returns a pending_payment booking and payment_url.

6
Customer payspayment_url (Stripe Checkout)

Hand payment_url to the human. They pay on Stripe’s hosted page without a LocalWashAdvisor login.

7
Webhook confirmscheckout.session.completed

The webhook confirms the booking and consumes any coupon claim after payment, or cancels the pending booking if checkout expires.

🎟️ Coupons: list them with get_car_wash_coupons, then claim a customer-confirmed selection with tools/call β†’ claim_coupon or . The returned redemption_code works at the wash and can also be passed to create_booking for an eligible affiliated mobile washer.
πŸ€– GPT/Claude tool tip: point your agent at POST https://localwashadvisor.com/api/public/mcp-jsonrpc and use server/discover β†’ tools/list β†’ tools/call. Legacy clients can still call initialize. The read-only manifest at /api/public/mcp is kept for compatibility.

API Key Authentication

Read tools are public and need no key. The write tools create_booking and claim_coupon require a team-issued API key sent as Authorization: Bearer <key>. Keys are stored as SHA-256 hashes only.

Scopes

  • agent:book β€” create_booking on the JSON-RPC endpoint
  • agent:coupons β€” claim_coupon or POST /api/agent/coupons/claim

Limits

  • Per-key: 60 requests/minute by default (adjustable per key)
  • Coupon claims: 10 per 10 minutes per customer email/phone
  • Over the limit β†’ 429 (JSON-RPC: -32001)
πŸ”‘ Getting a key: keys are issued manually by the LocalWashAdvisor team β€” contact support@localwashadvisor.com. Full issuance, rotation and revocation runbook: docs/API_KEYS.md in the repo.

Status transitions for agent bookings

pending_payment  β†’  confirmed              (Stripe webhook: checkout.session.completed)
pending_payment  β†’  cancelled_by_customer  (checkout expired unpaid, 45 min)
GET/api/public/search

Search car wash businesses by location

Geo-search with optional text, open-now, rating, coupon, features and services filters. Results are ranked by trust tier: 1st verified+premium, 2nd verified+free, 3rd unverified β€” within each band sorted by distance β†’ Bayesian rating β†’ coupon count β†’ review count.

Parameters

lat
numberLatitude of search centre.
lng
numberLongitude of search centre.
radius
numberdefault: 10Radius in miles (max 50).
query
stringText match on name, city, and "Our Story" description. Use as a flexible fallback for anything not in the structured features/services lists (e.g. "eco", "brushless", "steam cleaning").
openNow
booleanOnly currently-open businesses.
minRating
numberMin Bayesian rating (0–5).
hasCoupons
booleanOnly businesses with active coupons.
features
stringComma-separated exact feature values. Valid: "Eco Friendly", "Water Reclamation", "Touchless", "Self Service", "Full Service", "Free Vacuums", "Credit Cards", "24/7 Access", "Express Service", "Free Parking", "Lounge & WiFi".
services
stringComma-separated exact service values. Valid: "Automatic Wash", "Hand Wash", "Interior Cleaning", "Waxing", "Detailing", "Exterior Only", "Undercarriage Wash", "Window Cleaning", "Upholstery Cleaning", "Paint Correction", "Ceramic Coating", "RV/Truck Wash", "Motorcycle Wash", "Mobile Service", "Headlight Restoration", "Tire Shine".
locale
stringen-US | en-GB | de-DE | es-ES | fr-FR | ja-JP
limit
integerdefault: 20Max results (max 50).
offset
integerdefault: 0Pagination offset.

Response (200 OK)

{
  "results": [
    {
      "id": "uuid",
      "name": "Sunshine Car Wash Tokyo",
      "slug": "sunshine-car-wash-tokyo",
      "address": "1-2-3 Shibuya",
      "city": "Tokyo",
      "distance_miles": 1.4,
      "rating": 4.7,
      "bayesian_rating": 4.65,
      "coupon_count": 2,
      "tier": "premium_monthly",
      "verified": true,
      "is_open_now": true,
      "services": [
        "Hand Wash",
        "Detailing",
        "Ceramic Coating"
      ],
      "features": [
        "Eco Friendly",
        "Water Reclamation",
        "Touchless"
      ],
      "page_url": "https://sensha-navi.jp/ja-JP/business/sunshine-car-wash-tokyo"
    }
  ],
  "total": 1,
  "limit": 5,
  "offset": 0
}

Structured Filter Values

The features and services params require exact values as stored in the database. For anything not in these lists, use query=<term> β€” it searches name, city, and the business "Our Story" description.

features= values

Eco Friendly
Water Reclamation
Touchless
Self Service
Full Service
Free Vacuums
Credit Cards
24/7 Access
Express Service
Free Parking
Lounge & WiFi

services= values

Automatic Wash
Hand Wash
Interior Cleaning
Waxing
Detailing
Exterior Only
Undercarriage Wash
Window Cleaning
Upholstery Cleaning
Paint Correction
Ceramic Coating
RV/Truck Wash
Motorcycle Wash
Mobile Service
Headlight Restoration
Tire Shine
πŸ’‘ Eco-friendly tip: Use features=Eco Friendly and/or query=eco β€” the first catches businesses that ticked the checkbox, the second catches those that wrote about it in their description.

Tier Values

free
Free
premium_monthly
Premium Monthly
premium_quarterly
Premium Quarterly
premium_annual
Premium Annual

Quick Start

JavaScript / fetch

const res = await fetch(
  'https://localwashadvisor.com/api/public/search' +
  '?lat=35.6762&lng=139.6503&radius=10&openNow=true'
);
const { results } = await res.json();
results.forEach(b => console.log(b.name, b.distance_miles, 'mi'));

Python / httpx

import httpx
r = httpx.get('https://localwashadvisor.com/api/public/search',
              params={'lat': 35.6762, 'lng': 139.6503, 'radius': 10, 'openNow': 'true'})
for b in r.json()['results']:
    print(b['name'], b['distance_miles'], 'mi')

OpenAI / GPT tools_url

# Point your GPT's API schema to:
https://localwashadvisor.com/openapi.yaml

# Or point tools_url to:
https://localwashadvisor.com/api/public/mcp

# Available tools:
# search_car_washes, get_car_wash_detail, get_car_wash_coupons
# search_mobile_washers, get_mobile_washer_detail, get_washer_availability

Mobile wash β€” find a washer near me (JavaScript)

// 1. Find washers near the customer
const { results } = await fetch(
  'https://localwashadvisor.com/api/public/mobile/search' +
  '?lat=30.2672&lng=-97.7431&radius=20'
).then(r => r.json());

// 2. Check availability for the top result
const { taken } = await fetch(
  `https://localwashadvisor.com/api/public/mobile/washers/${results[0].id}/availability?date=2026-03-20`
).then(r => r.json());

// 3. Send user to the booking page
window.open(results[0].profile_url, '_blank');

Native MCP via JSON-RPC β€” agent booking (bash)

# 1. Discover tools
curl -X POST https://localwashadvisor.com/api/public/mcp-jsonrpc   -H 'Content-Type: application/json'   -d '{"jsonrpc":"2.0","id":1,"method":"tools/list","params":{}}'

# 2. Book (needs API key) β€” returns payment_url for the human
curl -X POST https://localwashadvisor.com/api/public/mcp-jsonrpc   -H 'Content-Type: application/json'   -H 'Authorization: Bearer <api_key>'   -d '{"jsonrpc":"2.0","id":2,"method":"tools/call",
       "params":{"name":"create_booking",
         "arguments":{"washer_id":"<uuid>","service_type":"full_detail",
           "scheduled_date":"2026-10-12","scheduled_time":"10:00",
           "service_address":"123 Main St, Austin, TX",
           "service_lat":30.2672,"service_lng":-97.7431,
           "vehicle_type":"sedan","parking_access_confirmed":true,"customer_confirmed":true,
           "customer_email":"customer@example.com"}}}'

LocalWashAdvisor Public API v2.2 Β· Car Wash + Mobile Wash + Agent API Β· Public reads Β· Privacy Policy