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.
Agent Booking β End to End
API key requiredAI 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.
Authorization: Bearer <key>Keys are issued by the LocalWashAdvisor team β see API Key Authentication below. Scopes: agent:book for booking, agent:coupons for coupon claims.
Pass customer lat/lng β washers whose service area covers that point, with distance, services, and starting price.
Bio, services with prices/durations, working hours, ratings, background-check and insurance status.
Taken slots for a date (YYYY-MM-DD). Anything not in taken is free.
After explicit customer confirmation, claim a selected coupon and keep its redemption_code. It must belong to the mobile washerβs affiliated business.
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.
payment_url (Stripe Checkout)Hand payment_url to the human. They pay on Stripeβs hosted page without a LocalWashAdvisor login.
checkout.session.completedThe webhook confirms the booking and consumes any coupon claim after payment, or cancels the pending booking if checkout expires.
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.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 endpointagent: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)
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)
/api/public/searchSearch 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
latlngradius10Radius in miles (max 50).queryopenNowminRatinghasCouponsfeaturesserviceslocalelimit20Max results (max 50).offset0Pagination 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 FriendlyWater ReclamationTouchlessSelf ServiceFull ServiceFree VacuumsCredit Cards24/7 AccessExpress ServiceFree ParkingLounge & WiFiservices= values
Automatic WashHand WashInterior CleaningWaxingDetailingExterior OnlyUndercarriage WashWindow CleaningUpholstery CleaningPaint CorrectionCeramic CoatingRV/Truck WashMotorcycle WashMobile ServiceHeadlight RestorationTire Shinefeatures=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
freepremium_monthlypremium_quarterlypremium_annualQuick 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"}}}'