GuestServices — machine surface

Naples Rentals fresh

Are you human? Switch to the human view

node 889-rent-naples · template v0.2.0 · everything below is rendered from the one source-of-truth payload (GET /api/node/889-rent-naples) — same data the human lander and the IVR consume.

Payload preview

{
  "node": {
    "node_id": "889-rent-naples",
    "category_path": "tourism/fl/naples/rentals",
    "template_version": "0.2.0",
    "number": "+12393143060",
    "slug": "naples",
    "geo": {
      "center": {
        "lat": 26.142,
        "lng": -81.7948
      },
      "zoom": 12,
      "tiles": "/tiles/swfl-z14-v20260815.pmtiles",
      "bbox": {
        "west": -81.88,
        "south": 26.02,
        "east": -81.66,
        "north": 26.34
      },
      "view": {
        "west": -81.84,
        "south": 26.05,
        "east": -81.73,
        "north": 26.28
      }
    },
    "status": "qa",
    "public_urls": {
      "human": "https://naples.guestservices.team/",
      "machine": "https://naples.bot.guestservices.team/",
      "quality": "https://naples.guestservices.team/quality/889-rent-naples"
    }
  },
  "template": {
    "template": "tourism/fl/naples/rentals",
    "version": "0.2.0",
    "supply": {
      "fields": [
        {
          "name": "business_name",
          "type": "string",
          "required": true
        },
        {
          "name": "phone",
          "type": "phone",
          "required": true
        },
        {
          "name": "website",
          "type": "url"
        },
        {
          "name": "hours",
          "type": "hours"
        },
        {
          "name": "address",
          "type": "address"
        },
        {
          "name": "service_area",
          "type": "string"
        },
        {
          "name": "location",
          "type": "geo"
        },
        {
          "name": "service_area_geo",
          "type": "geo"
        },
        {
          "name": "service_area_radius_km",
          "type": "int",
          "min": 1,
          "max": 200
        },
        {
          "name": "tags",
          "type": "list",
          "required": true,
          "taxonomy": "concierge/v1",
          "allowed": [
            "boat_rental",
            "jet_ski",
            "kayak",
            "paddleboard",
            "fishing_charter",
            "boat_tour",
            "beach_gear",
            "parasailing",
            "golf_cart",
            "bicycle",
            "ebike",
            "scooter",
            "car_rental",
            "airport_transfer",
            "baby_gear",
            "babysitting",
            "pet_sitting",
            "private_chef",
            "catering",
            "grocery_delivery",
            "vacation_rental",
            "house_cleaning",
            "linen_service",
            "handyman",
            "massage",
            "hair_styling",
            "fitness_trainer",
            "photographer",
            "event_rental",
            "guided_tour"
          ]
        },
        {
          "name": "rental_types",
          "type": "list",
          "allowed": [
            "home",
            "condo",
            "boat",
            "jetski",
            "golf_cart",
            "ebike",
            "bicycle",
            "kayak",
            "other"
          ]
        },
        {
          "name": "rate_min",
          "type": "money"
        },
        {
          "name": "rate_max",
          "type": "money"
        },
        {
          "name": "rate_unit",
          "type": "string",
          "allowed": [
            "hour",
            "day",
            "week",
            "month"
          ]
        },
        {
          "name": "min_stay",
          "type": "string"
        },
        {
          "name": "online_booking",
          "type": "bool"
        },
        {
          "name": "delivery_available",
          "type": "bool"
        },
        {
          "name": "pet_friendly",
          "type": "bool"
        },
        {
          "name": "waterfront",
          "type": "bool"
        }
      ],
      "freshness_max_age_days": 7
    },
    "demand": {
      "fields": [
        {
          "name": "want",
          "type": "string",
          "required": true
        },
        {
          "name": "when",
          "type": "daterange",
          "required": true
        },
        {
          "name": "party_size",
          "type": "int",
          "min": 1,
          "max": 500
        },
        {
          "name": "budget",
          "type": "money",
          "min": 0,
          "max": 1000000
        },
        {
          "name": "callback_number",
          "type": "phone",
          "required": [
            "web",
            "voice"
          ]
        }
      ],
      "classify_from": [
        "want"
      ]
    },
    "routing": {
      "strategy": "round_robin",
      "log_unfilled": true,
      "handoff": [
        "transfer_call",
        "sms_referral"
      ]
    },
    "ivr": {
      "greeting": "Hi, you've reached Guest Services. I can help you find anything from a beach house to a golf cart. What are you looking to rent?\n"
    }
  },
  "suppliers": [
    {
      "id": 414,
      "business_name": "Naples Boat Rentals by On The Pontoon Boat",
      "attrs": {
        "hours": "Monday: 8:00 AM – 5:00 PM; Tuesday: 8:00 AM – 5:00 PM; Wednesday: 8:00 AM – 5:00 PM; Thursday: 8:00 AM – 5:00 PM; Friday: 8:00 AM – 5:00 PM; Saturday: 8:00 AM – 5:00 PM; Sunday: 8:00 AM – 5:00 PM",
        "tags": [
          "boat_rental"
        ]
      },
      "scraped_at": "2026-08-13T00:00:00+00:00",
      "freshness": "fresh"
    },
    {
      "id": 415,
      "business_name": "Naples Bay Resort Boat Rentals",
      "attrs": {
        "hours": "Monday: 8:00 AM – 4:30 PM; Tuesday: 8:00 AM – 4:30 PM; Wednesday: 8:00 AM – 4:30 PM; Thursday: 8:00 AM – 4:30 PM; Friday: 8:00 AM – 4:30 PM; Saturday: 8:00 AM – 4:30 PM; Sunday: 8:00 AM – 4:30 PM",
        "tags": [
          "boat_rental",
          "jet_ski"
        ]
      },
      "scraped_at": "2026-08-13T00:00:00+00:00",
      "freshness": "fresh"
    },
    {
      "id": 416,
      "business_name": "Bayfront Boat Rentals",
      "attrs": {
        "hours": "Monday: 8:00 AM – 5:00 PM; Tuesday: 8:00 AM – 5:00 PM; Wednesday: 8:00 AM – 5:00 PM; Thursday: 8:00 AM – 5:00 PM; Friday: 8:00 AM – 5:00 PM; Saturday: 8:00 AM – 5:00 PM; Sunday: 8:00 AM – 5:00 PM",
        "tags": [
          "boat_rental",
          "jet_ski",
          "kayak",
          "paddleboard"
        ]
      },
      "scraped_at": "2026-08-13T00:00:00+00:00",
      "freshness": "fresh"
    }
  ],
  "suppliers_truncated": "preview shows 3 of 752 suppliers — GET /api/node/889-rent-naples returns all",
  "freshness": "fresh",
  "generated_at": "2026-08-15T20:50:57.268Z"
}

Free API endpoints

GET /api/node/889-rent-naples — full CONTRACTS §2 payload

curl -s https://naples.bot.guestservices.team/api/node/889-rent-naples

POST /api/intent — submit demand (required fields: want, when, callback_number)

curl -s -X POST https://naples.bot.guestservices.team/api/intent \
  -H 'content-type: application/json' \
  -d '{"node_id":"889-rent-naples","channel":"web","fields":{"want":"a boat rental","when":"2026-03-14..2026-03-18","callback_number":"+12395550123"}}'

Missing required demand fields are rejected with the list of what is missing. Every accepted intent lands in the ledger (intent → routing → outcome), including unfilled demand.

Paid x402 door (agent gate)

GET https://gate.guestservices.team/agent/889-rent-naples — browse, $0.001: redacted directory proof, same shape as /api/node

POST https://gate.guestservices.team/agent/889-rent-naples/intent — connect, $0.05: body {"fields": {…demand fields…}}, channel "machine", returns the ONE matched supplier

# unpaid → honest HTTP 402 with an x402 PaymentRequired body quoting the route's price
curl -si https://gate.guestservices.team/agent/889-rent-naples

Config: network eip155:84532 (Base Sepolia), asset USDC 0x036CbD53842c5426634e7929541eC2318f3dCF7e, facilitator https://x402.org/facilitator. Per-route pricing: browse $0.001 = maxAmountRequired: "1000", connect $0.05 = "50000" (6-decimal atomic units; env-tunable via X402_PRICE_BROWSE/X402_PRICE_CONNECT — the 402 body is authoritative). The unpaid 402 response quotes the exact price for that route.

Freshness

{
  "freshness": "fresh",
  "generated_at": "2026-08-15T20:50:57.268Z",
  "freshness_max_age_days": 7,
  "policy": "worst-of suppliers; a supplier older than freshness_max_age_days is stamped \"degraded\", never silently dropped"
}