Changelog
What's new in StayingAPI
The shipping log for the unified accommodation data API. Follow along as new platforms, endpoints and integrations land.
Availability now reports only stay rules the platform actually states. minNights, checkIn and checkOut can be null, meaning the platform does not give that rule. Booking.com price quotes now use a rate that covers your whole party.
Availability: minNights, checkIn and checkOut can be null (behaviour change)
- WHAT MOVED: on Booking.com and Google Hotels these per-day fields used to be filled in from your REQUEST (minNights = the nights you asked for, checkIn true only on the start date, checkOut true only on the end date), not from the platform. They now carry the platform's own rule, or null when it does not state one.
- Per platform: Airbnb and Vrbo are unchanged (the platform's per-day calendar). Booking.com: minNights and checkIn come from its per-date minimum-stay data where it covers the date, otherwise null; checkOut is always null. Google Hotels: all three are always null.
- IF YOU READ THESE FIELDS: handle null as "not stated by the platform", not as false or 0. For Booking.com and Google Hotels, a /v1/price call for the exact stay is the reliable bookability check.
Booking.com price
- Quotes now use the cheapest rate that covers adults + children. Previously the cheapest rate on the page was used even when it was for fewer guests. Affected quotes have been refunded.
- If no rate covers your party, the call fails with no_availability (0 credits) and names the largest party a rate exists for. If Booking.com does not state a rate's guest count, the quote carries a price_capacity_unverified warning.
- A stay shorter than Booking.com's minimum stay now fails with no_availability ("minimum stay is N nights"), 0 credits, instead of a generic error.
meta.currency can be null; Vrbo prices are estimates (behaviour change)
- TYPE CHANGE: meta.currency is now string | null. It names the currency the prices in the response are actually in. Before, it always echoed the currency you requested, even when Vrbo answered in USD.
- Values: the requested currency when every price is in it (or when the response has no prices); the other currency when every price is in that one (e.g. "USD" for a Vrbo answer to a GBP request, with a currency_passthrough warning); null when prices come back in more than one currency, so read each price's own currency. IF YOU TYPE meta.currency AS A STRING: add a null check.
- Every price now carries priceBasis: "quoted_total" (the platform quoted a stay total) or "nightly_rate_x_nights" (the platform gave only a nightly rate; totalPrice is that rate × nights: an estimate, not verified against a checkout). Vrbo prices are always the second kind and /v1/price adds a price_unverified warning: the figure may include Vrbo's mandatory fees, taxes may not be included. totalPrice is still filled on every price.
- When Vrbo does not quote a listing for your dates and party (most often a stay below the minimum, or a taken night), /v1/price now fails with price_not_found: not retryable, 0 credits. It used to read as a retryable upstream error.
location.country was previously null for most of the world on all four platforms. It is now a correct ISO 3166-1 alpha-2 code. If your code branches on a null country, that branch will now be taken far less often.
location.country — behaviour change
- WHAT MOVED: location.country used to be null for every property outside a small hardcoded set of countries, and the set differed per platform — the same physical property could return a country on one platform and null on another. It now resolves to a correct ISO 3166-1 alpha-2 code for all 250 countries, identically on Airbnb, Booking.com, Vrbo and Google Hotels.
- IF YOU BRANCH ON NULL: that branch will now be taken far less often. Responses that previously carried location.country: null will now carry a real two-letter code. The field type and its null-ability are unchanged — it is still null when a source supplies no recognisable country — so this is a change in how often you see a value, not in the shape of the response.
- The code is resolved from whatever spelling a source emits — full name, local name, three-letter code or two-letter code. Where we cannot resolve one, the response carries a country_unmapped warning so an unmapped value is distinguishable from genuinely absent data, rather than both appearing as null.
- Apps and dashboards now display the country name ("United States") rather than the code, since a two-letter code is correct in an API field and unhelpful in a sentence.
Pre-GA pricing calibration: Vrbo listing and availability are re-priced to reflect the premium, accuracy-first source we now use for Vrbo detail. Every other platform is unchanged.
Vrbo pricing
- Vrbo /v1/listing is now 15 credits (was 3), and /v1/availability has a 12-credit floor (was 5). Vrbo has no clean public feed, so its listing detail and calendar are sourced through a premium path that resolves the EXACT property rather than a plausible-but-wrong one — accuracy first. Vrbo search is unchanged (1 credit per result, min 5).
- All other platforms are unchanged: listing stays 3 credits and availability floors at 5.
- This is pre-GA calibration, not a post-launch price increase. StayingAPI is still pre-marketing — the only live account is our own reference account, so no customer is affected. The standard 30-day advance-notice policy for price changes applies to real customers after launch. meta.creditsCharged always shows the exact cost before you commit, and failed or empty calls remain free.
StayingAPI is live: one unified API for accommodation availability, search and cross-OTA price comparison across Airbnb, Booking.com, Vrbo and Google Hotels.
API
- Unified REST API across the Core-4 platforms — search, availability, listing detail, price, reviews and jobs, all returning one { data, meta } schema.
- Flagship cross-OTA /v1/price-compare — one property, every OTA, with server-computed lowest and median rates.
- Cursor pagination, idempotent reads, per-request ids in meta, and Retry-After on rate limits.
- Failed, empty and blocked calls always cost 0 credits — you only pay for answers.
Agents & integrations
- Native MCP server over Streamable HTTP with OAuth 2.1 / PKCE and seven read-only tools — Claude Connectors ready.
- Typed SDK (@stayingapi/sdk) with auth, retries, pagination and async-job polling built in.
Billing & dashboard
- Credit-based pricing with a free tier (300 credits, no card) and Starter / Pro / Scale plans whose credits reset monthly.
- Stripe checkout, pay-as-you-go top-ups valid for 30+ days, and a dashboard for API keys and live usage.
Docs & trust
- Full documentation: quickstart, per-endpoint reference, the unified schema, an error catalog, a downloadable OpenAPI spec, and a live Try-It console.
- Published Terms, Privacy and Refund policies, and a committed 99.9% monthly uptime SLA.
More platforms and no-code surfaces are on the way — see what's next on the integrations roadmap.
Build on the latest
300 credits, no card required. Get an API key and make your first call in minutes.
No credit card · failed calls cost 0 credits