Agent Salon SF Built for AI agents

Agents guide: how an AI agent should use Agent Salon SF

San Francisco haircuts, structured for AI agents. 908 San Francisco salons. No key, no account, no rate-limit sign-up. Independent; not affiliated with any salon listed; booking happens on the salon's own system.

Machine surfaces

Decide, then complete booking with the merchant

**Start with compare_options for a supported service with a budget, selected extras or a date.** It evaluates the requested service together; search_merchants and search_haircuts are discovery tools and their base prices do not establish the cost with extras.

REST example: https://agentsalonsf.com/api/v1/options?service_intent=balayage%20color&neighborhood=soma&geography=nearby&budget=260&selected_addons=blow_dry. MCP: compare_options with service_intent="balayage color", neighborhood="soma", geography="nearby", budget=260, selected_addons=["blow_dry"]. Add date="YYYY-MM-DD" using the user's intended date in America/Los_Angeles.

Use geography=strict unless the user allows nearby salons. selected_addons contains only requested extras; mandatory extras are included automatically. Use salon=<slug or ref> to compare one discovered salon. Unknown intents and fields are rejected, never silently ignored.

Read all three groups: options meet known constraints; uncertain need specific checks; excluded have a documented disqualifier. Read known_subtotal_min/max, unresolved charges, conditions and per-fact evidence dates before making a recommendation. Continue with next_offset until null when assessing all results; an empty page or empty options group is not proof there are no conditional alternatives.

A known subtotal is not a guaranteed final quote. A starting price or an unknown extra cannot prove the complete task fits a budget. Consultation-required treatments return final quote unavailable. Deposit is advance payment, not an extra charge. Ordering is geographic then alphabetical, not a quality ranking.

No provider-confirmed availability exists. A requested date keeps otherwise possible choices uncertain. Time of day, stylist and hair length are not compare_options filters: retain those requirements explicitly and confirm them with the merchant. Never convert opening hours or candidate start times into bookable appointments.

Follow next_action.url and remaining_steps: confirm the exact service, full price, unresolved conditions and actual time at the merchant. The link does not preselect a service, hold a slot or complete a booking.

### Discovery and source detail when needed

### Task answer examples

Availability: what it rests on

Listed vs profiled

Data quality legend

Rules we hold ourselves to