Endpoint index

The resource endpoints are in active development. This page is the specification they implement, and the shapes here are what will ship. Sandbox availability is announced in the Changelog.

Every path is relative to https://www.bookwithhaven.com/api/public/v1.

Reads

MethodPathScopeReturns
GET/meaccount:readThe account, the application, the blog site the host picked, and what this grant may do
GET/propertieslistings:readListings on the account, paginated, each with its public URL
GET/properties/{code}listings:readOne listing: photos, street address, descriptions, amenities, branding
GET/properties/{code}/calendarcalendar:readOccupied and blocked spans over a date window
GET/properties/{code}/price-overridesrates:readPer-night price overrides
GET/properties/{code}/promotionsrates:readPromotions
GET/properties/{code}/holiday-price-bumpsrates:readHoliday price bump rules
GET/properties/{code}/min-stay-overridesstay-rules:readPer-date minimum stays
GET/properties/{code}/weekly-min-stay-rulesstay-rules:readWeekly minimum stay rules
GET/properties/{code}/check-in-out-rulesstay-rules:readPermitted check-in and check-out days
GET/properties/{code}/sync-policyintegrations:readWhich domains an external system owns
GET/reservationsreservations:readReservations, paginated and filterable
GET/reservations/{code}reservations:readOne reservation
GET/conversationsmessaging:readGuest conversations, paginated
GET/conversations/{code}/messagesmessaging:readMessages in a conversation
GET/discount-codesdiscounts:readDiscount codes on the account
GET/properties/{code}/guidebookguidebook:readThe guest guidebook for a listing
GET/blog-postsblog:readArticles in the blog library, without bodies
GET/property-groupslistings:readCollections — the landing pages that front listings
GET/property-groups/{code}listings:readOne collection site: logo, contact, social profiles, author, cities, neighborhoods

Guest identity on reservations and conversations requires guests:read in addition to the scope above. Without it, name, email and phone are null and the rest of the payload is unchanged. Arrival secrets in the guidebook require guidebook:secrets:read.

Writes

One endpoint.

MethodPath
POST/operations/{operation}

See Operations for the catalog.

MCP

One endpoint, outside /v1 because it is a JSON-RPC surface rather than a versioned REST one.

MethodPath
POST/api/public/mcp

Every read and every write operation above, exposed as Model Context Protocol tools and dispatched through the same code the REST routes run, plus a search/fetch pair over the same reads. See MCP endpoint.

Filters and windows

List endpoints accept limit and cursor (Pagination).

Calendar and rate collections are read over a date window with start_date and end_date, both YYYY-MM-DD. The window is capped at 400 days; a wider request is clamped and the served window is echoed in the response.

Reservations additionally accept property_code, status, updated_since, and start_date and end_date bounding the stay rather than the record.

Blog posts accept property_code, property_group_code, status (published or draft) and external_id — your own id for an article you delivered, which is how you read back its live URL after a publish. See Blog publishing.

A bounded query is required on /reservations: pass at least one of property_code, updated_since, or a date range. An unbounded request for every reservation an account has ever taken is refused. It is the query that turns a public API into a full-table-scan service, and the constraint costs one parameter.

Conditional requests

Not supported in v1. Haven's data-version validator costs the same database work as serving the payload, so a 304 would save bandwidth and no compute. Use updated_since, and webhooks once they ship.