{
  "name": "Emma's Luxury Mobile Massage — Agent API",
  "description": "Read + write endpoints designed for LLM agents (ChatGPT, Claude, Gemini, MCP clients). Bookings are callback requests, not instant reservations; Emma confirms by callback within 24 hours.",
  "documentation": {
    "openapi": "https://emmasluxurymobilemassage.co.uk/api/v1/openapi.json",
    "llms_txt": "https://emmasluxurymobilemassage.co.uk/llms.txt"
  },
  "endpoints": {
    "availability": {
      "method": "GET",
      "path": "/api/v1/availability",
      "url": "https://emmasluxurymobilemassage.co.uk/api/v1/availability",
      "description": "60-day coarse availability summary with 3-hour sub-day windows."
    },
    "services": {
      "method": "GET",
      "path": "/api/v1/services",
      "url": "https://emmasluxurymobilemassage.co.uk/api/v1/services",
      "description": "Emma's public service catalogue: durations, prices, descriptions."
    },
    "catchment_check": {
      "method": "GET",
      "path": "/api/v1/catchment-check?postcode=PR1+9RZ",
      "url": "https://emmasluxurymobilemassage.co.uk/api/v1/catchment-check?postcode=PR1+9RZ",
      "description": "Validate a postcode against Emma's two-tier catchment without submitting a booking. Returns {valid, tier}."
    },
    "booking_request": {
      "method": "POST",
      "path": "/api/v1/booking-request",
      "url": "https://emmasluxurymobilemassage.co.uk/api/v1/booking-request",
      "description": "Submit a callback-request booking on a customer's behalf. Required: name, postcode, contact{method,value}. Set is_corporate=true for workplace/group bookings."
    },
    "openapi": {
      "method": "GET",
      "path": "/api/v1/openapi.json",
      "url": "https://emmasluxurymobilemassage.co.uk/api/v1/openapi.json",
      "description": "OpenAPI 3.0 spec for all of the above."
    }
  },
  "notes": [
    "Fetch each read endpoint once per conversation and store the response locally; data refreshes every 15 min and re-fetching returns identical bytes.",
    "Read endpoints share a token-bucket rate limit per IP (20 burst, 1 token per 10 seconds).",
    "Booking-request submissions enter a human-reviewed queue; the response next_step field tells the customer what to expect."
  ],
  "contact": {
    "email": "info@emmasluxurymobilemassage.co.uk",
    "phone": "tel:+447920682823",
    "whatsapp": "https://wa.me/447920682823"
  }
}