# Frontier Pet > Frontier Pet Software hosts public booking pages for pet salons. This file tells an external agent how to discover a shop, its services, and how quoting and booking work, without scraping the web app. Frontier Pet is multi-tenant salon software. Each salon has a public tenant slug. Prices and services are per shop, so a tenant-only URL is not a catalog. The canonical booking page is `/book/{tenantSlug}/{locationSlug}` on https://www.frontierpet.io. `{locationSlug}` is the shop name in URL form (Hopkins is `hopkins`). ## Public pages - [Frontier Pet](https://www.frontierpet.io/): Marketing home for the salon software - [Pricing](https://www.frontierpet.io/pricing): Software subscription plans - [Request membership](https://www.frontierpet.io/request-membership): A salon operator asks to open an account - [Choose a location](https://www.frontierpet.io/book/{tenantSlug}): Not a booker. One active shop redirects to that shop's book URL. Several shops list locations. No prices - [Book a shop](https://www.frontierpet.io/book/{tenantSlug}/{locationSlug}): Public page where a person requests a visit at one shop - [Privacy](https://www.frontierpet.io/privacy): Privacy policy - [Terms](https://www.frontierpet.io/terms): Terms of service - [Data processing addendum](https://www.frontierpet.io/dpa): Data processing addendum ## What an agent may do Discover shops, services, and how booking works. Read this file, the schema.org JSON-LD on the public pages, and the unauthenticated GET endpoints below. Do not scrape the React app. - Marketing home JSON-LD: Organization and SoftwareApplication, plus an Offer that points at pricing. - Pricing JSON-LD: SoftwareApplication with one Offer per plan (Starter, Professional, Enterprise). - Book page JSON-LD, after that shop's data loads: LocalBusiness (also PetGrooming) for the location, and Service plus Offer for each service that shop sells online. A tenant URL with several shops lists each location as a LocalBusiness and does not include prices. Public read API (no credentials): - `GET https://api.frontierpet.io/api/v1/book/{tenantSlug}` — salon name, advertised slug, and active locations (`id`, `name`, `slug`, timezone, earliest bookable date). No services and no prices. - `GET https://api.frontierpet.io/api/v1/book/{tenantSlug}/services?location_id={locationId}` — services that shop offers online, with that shop's price (`default_price`). `location_id` is required. - `GET https://api.frontierpet.io/api/v1/book/{tenantSlug}/tax-groups?location_id={locationId}` — tax groups used to quote that shop. `location_id` is required. - `GET https://api.frontierpet.io/api/v1/book/{tenantSlug}/employees?location_id={locationId}` — groomers assigned to that shop. - `GET https://api.frontierpet.io/api/v1/book/{tenantSlug}/slots?location_id={locationId}&date={YYYY-MM-DD}&service_ids={serviceId}` — open times at that shop. `location_id`, `date`, and at least one service id are required. Repeat `service_ids` for each selected service. How a person books: open `/book/{tenantSlug}/{locationSlug}` and follow the page (how many pets, pet details, grooming notes, services for each pet, a time, contact, confirm). A quote is that shop's service prices plus that shop's tax. Online card deposits are not collected. Cancel and reschedule are not on the book URL; the client portal requires a sign-in code. Per-salon MCP, one salon, from its public book slug: - `POST https://api.frontierpet.io/api/v1/book/{tenantSlug}/mcp` — JSON-RPC Model Context Protocol for that salon. Tools: `book`, `reschedule`, and `cancel`. - Each tool queues a pending request. A person at the salon applies it from Notifications. The calendar does not change until then. No SMS or email is sent. - Every queued request is disclosed to that person as "Booked by an AI agent". - The shop page `/book/{tenantSlug}/{locationSlug}` registers the same three tools with WebMCP (`document.modelContext.registerTool`) for that shop. The page pins `location_id` to the shop in the URL. - `book` takes the same kind of details as the public book page (shop, groomer, local date and start time, contact, pet, and service ids from the GETs above). It does not accept an existing household or pet id. - `reschedule` and `cancel` need the appointment id. There is no public search of other people's appointments. - A quote stays a read. Use the services and tax-groups GET endpoints. Do not post a quote. ## What an agent must not do - No unauthenticated writes. Do not POST, PUT, PATCH, or DELETE to create or change clients, pets, households, or appointments. Do not call `POST https://api.frontierpet.io/api/v1/book/{tenantSlug}/book` or `POST https://api.frontierpet.io/api/v1/book/{tenantSlug}/quote-preview`. The per-salon MCP is not a direct write: `book`, `reschedule`, and `cancel` only queue a pending request a person applies. - No sending client messages. Do not send SMS, email, or voice, and do not call messaging endpoints. - No scraping the SPA. Do not crawl dashboard routes, JavaScript bundles, or the rendered booking wizard to harvest data. Use this file, the JSON-LD on the public pages, the GET endpoints above, and the MCP tools. - Do not call a grooming estimation or time-estimate API. Estimation is not a public tool and is not an MCP or WebMCP tool. Choose services from the services GET. - Do not call staff, portal, or in-product agent APIs. Where Frontier already records an agent change, that change stays pending until a person applies it. This file does not grant those tools. ## Machine-readable page - [llms.txt](https://www.frontierpet.io/llms.txt): This document