---
name: book-apc-auto-spa
description: Book a real detailing, ceramic coating, paint protection film or window tint appointment at APC Auto Spa (Monroe or Tukwila, WA) for a customer, or send a quote request when online booking does not fit.
---

# Book an appointment at APC Auto Spa

APC Auto Spa has two shops: Monroe (14253 169th Dr SE #799, Monroe, WA 98272) and Tukwila (1050 Industry Drive, Tukwila, WA 98188). Phone (425) 818-2820.

All calls are HTTPS POST requests to https://mcp.apcautospa.com with a JSON body {"tool": "<tool name>", "input": { ... }}. Always include the tool field. Errors return {"error_code", "message"}; the message names the field, the bad value and the expected format.

## Steps

1. Call describe_tools with {} to get the current input formats and examples. No key needed.
2. Call list_services with {}. Pick the service id. If the service has price_options (for example vehicle size such as Car), pick the price_options id that matches the customer's vehicle. Prices and agent_price are shown for each option.
3. Call check_availability with requested_date (YYYY-MM-DD), service_ids, price_option_ids, and optionally location_id ("monroe" or "tukwila"; omit to search both shops). Offer the customer the returned start times.
4. If you do not have an API key yet, call register_agent once with agent_name, agent_id (3 to 50 lowercase letters, digits, hyphens) and contact_email. The api_key is shown once; store it and reuse it. Send it only as an Authorization: Bearer header, never in a URL.
5. Call create_booking with the key. Required: services (each with service_id and, when the service has price_options, price_option_id), location, start, first_name, last_name, email, phone (10-digit US) and vehicle with year, make and model. vehicle.color, vehicle.vin and notes are optional. Use start exactly as check_availability returned it; do not reformat or adjust it.
6. Tell the customer clearly: the time is held but the booking is not confirmed until they pay the deposit. The payment link is texted and emailed to them and is also returned to you as payment_link. They have 30 minutes to pay, otherwise the time is released and the booking is canceled. The deposit is non-refundable.
7. Call get_booking with the booking_id to check status (pending payment, confirmed, canceled or completed). It only returns bookings made with your own key.

## When to use create_lead instead

Use create_lead (needs the key) when the customer wants a quote, when the service is not available for online booking (it is not in list_services), or when no available time fits. Required: firstName, lastName, email, phone. Optional: servicesInterested, preferredLocation, vehicle, notes, requestedDate, requestedSlotStart. APC staff follow up with the customer; no job or payment is created.

## Agent discount

The 10% agent discount (AGENT10) is applied automatically to bookings made through create_booking. No code is needed. It cannot be combined with membership savings or other offers.

## Rules

- Sprinter vans can only be booked at Monroe.
- Use only ids returned by list_services. Do not guess ids.

## Limits

- Public tools: 60 calls per minute per client address.
- register_agent: 3 per hour per client address, 50 new keys per day in total.
- Keyed tools: each key has its own per-minute limit, returned as rate_limit_per_minute by register_agent. Keys from register_agent get 20 calls per minute.
- At most 3 unpaid bookings per key.
- At most 2 booking texts per customer phone number in any 24 hours.
- At most 6 unpaid agent bookings per location per day.

Over a limit the API returns HTTP 429. Do not retry in a loop; tell the customer or use create_lead.

## More

- Authentication: https://apcautospa.com/auth.md
- OpenAPI: https://mcp.apcautospa.com/openapi.json
- Agent hub: https://apcautospa.com/agents
