Plan with AI | City of Trees House
Your assistant can find the house, check your dates, and prepare a quote. You review the current total and terms, authorize payment, and complete identity verification on this website.
Find the right stay
City of Trees House is a whole-home Sacramento vacation rental with 3 bedrooms and 2 bathrooms, for up to 10 guests and 2 pets. The house is single-level (one story), with a step up at the front entrance and a step down into the game room and about a mile from Sutter Health Park, a 5-minute drive or about a 30-minute walk. Stays may be up to 28 nights.
Check dates and the full price
Ask your assistant to request a live quote for your dates, guest count, and pets. Each available payment method has its own total in USD, including tax. Rates and availability can change.
Review and book here
Open the booking link from the quote. The page shows the dates, guests, total, and quote expiry before any extra steps. While that quote is current, checkout uses it. If it has expired, the page prepares a new quote and says so. We check the stay again before checkout. A quote expires after 30 minutes and does not reserve dates. Pending bookings and payments awaiting verification do not reserve dates. The reservation is confirmed only after payment is verified and the dates are still available.
Book City of Trees House directly at cityoftrees.house/#book.
Choose your dates | Booking terms
For assistants and developers
The public API and MCP server accept no payment credentials. get_booking_link may put an optional guest name and email in the booking URL only, and the quote does not store them. Availability uses confirmed direct bookings and our synchronized channel calendars; channel updates can be delayed. No endpoint places a hold or authorizes payment. A booking page with a current quoteId books that stored quote. If the quote has expired, the page prepares a new quote and says so. Responses include expiresAt, checkoutEnabled, requiredGuestActions, typed errors, and Retry-After. A quote is not a confirmed reservation. Access depends on each assistant's browsing or tool capabilities; no assistant integration or search placement is guaranteed.
OpenAPI contract | MCP server | MCP server card
- GET /api/agent/v1/property
- Public property facts, including the Airbnb rating and the minimum-stay rule. No live price.
- GET /api/agent/v1/availability
- Date availability. Supply checkIn, checkOut, and guests. petCount is optional and defaults to 0. A blocked stay includes unavailableReason booked. A stay shorter than the check-in minimum includes below_min_stay, minStayNights, and a suggestion. The minimum is looked up even when the 10-minute price cache is empty. This response does not give a price.
- POST /api/agent/v1/quotes
- A live quote, humanSteps, handoff, and bookingUrl. Send JSON with checkIn and checkOut as YYYY-MM-DD, guests as an integer from 1 to 10, and petCount as 0, 1, or 2.
- GET /api/agent/v1/quotes/{quoteId}
- Read an unexpired quote, including humanSteps and handoff. This snapshot is not a new availability check.
MCP tools
- get_property
- Public facts for City of Trees House: occupancy, bedrooms, bathrooms, pets, stay bounds, Airbnb rating (value, count, source, as-of date), minimum-stay rule, and booking links. No live price.
- check_availability
- Date availability for checkIn, checkOut, and guests. petCount defaults to 0. A blocked stay returns unavailableReason booked. A stay shorter than the check-in minimum returns below_min_stay, minStayNights, and a suggestion, including when the 10-minute price cache is empty. Dates are not reserved. No price.
- get_quote
- A live PriceLabs quote and payment totals, plus humanSteps and handoff. Quotes expire after 30 minutes and do not reserve dates.
- get_booking_link
- The website checkout link for a current get_quote quote, including that quoteId and payment totals, plus humanSteps and handoff. Optional guest name and email can be added to the link and are not stored. Payment and identity verification happen on the website. This tool does not take payment or an identity document.
Example request
curl 'https://cityoftrees.house/api/agent/v1/availability?checkIn=2027-01-12&checkOut=2027-01-15&guests=4&petCount=0'
curl -X POST https://cityoftrees.house/api/agent/v1/quotes -H 'Content-Type: application/json' -d '{"checkIn":"2027-01-12","checkOut":"2027-01-15","guests":4,"petCount":0}'Price, protection and contact
Rates are set by PriceLabs and change by date. Request a live quote for the exact total for your dates, guests, and payment method.
Booking direct at cityoftrees.house is usually about 5% less than the same dates on Airbnb.
The primary renter must be at least 25 years old; other registered guests may be younger.
Direct bookings include Truvi guest verification and damage protection.
Call or text Ryan and Ashley at (916) 678-1211 (+1-916-678-1211) or email info@goodreviewsonly.com.
Agent data handling
The agent API and the MCP server take stay dates, a guest count, and a pet count. get_booking_link can also take an optional guest name and email and place them only in the booking URL. The tools do not take a phone, payment, or identity document. The quote row does not store a name or email.
Each agent HTTP request writes one console.log line. The line has an event name, a server-generated request id, the route, the hostname, the status code, the elapsed time, and a claimed client. The claimed client is recorded only when the X-Agent-Client header is grok, muse, openclaw, or hermes. Any other value is stored as unknown. The line does not include stay dates, a raw IP address, or payment details. The MCP router does not write this line. The Worker configuration turns on Cloudflare Workers Logs, so Cloudflare, which hosts the site, receives the line. This repository does not email the line or send it to anyone else. Cloudflare keeps Workers Logs for up to 7 days.
A successful quote is stored in the database table agent_quotes. The row has an id, property id, check-in, check-out, guest count, pet count, a snapshot, createdAt, and expiresAt. The snapshot has prices and payment-method totals. It has no guest name, email, phone, or payment credential. A booking link may repeat an optional name and email in the URL. That URL is not written back onto the quote row. The quote can be read until expiresAt, which is 30 minutes after it is created. The calendar job deletes quote rows whose createdAt is older than 24 hours. Its schedule is cron */30 * * * *. If that job does not run, this repository has no other deletion path for those rows.
Request limits store a sha256 hash of the rate-limit key, not the raw IP address. Agent and MCP calls use buckets named agent, then the call kind, then that hash. Quote calls also increment a property-wide bucket named agent:quote:city. Rows in request_budget_windows with a window_start older than 7 days are deleted at most once an hour, when a request budget is consumed.
Questions about this data: info@goodreviewsonly.com.