Stayingapi cheapest link resolver
Skill stayingapi/travel-skills/skills/stayingapi-cheapest-link-resolver
Portable AI-agent skills (SKILL.md) for accommodation search, availability, pricing, cross-OTA comparison & reviews via StayingAPI. Works with Claude, MCP and more. MIT-0.
npx -y skills add stayingapi/travel-skills --skill stayingapi-cheapest-link-resolverAssembled from the repository path, not quoted from the project. Check it against their README if it does not work.
One thing to look at
- 0 stars0 stars. Stars are a popularity signal and not a quality one, but at this level it is likely that nobody has read this closely except its author, and you would be relying on your own review.
What its author says it does
Copied from the file, not written here
Resolve a property + dates to the single cheapest bookable link (with price and OTA) as clean JSON — for a concierge bot, a "book now" button, or an internal tool. Powered by the StayingAPI REST API / MCP server.
The file declares its own license as Proprietary — see https://stayingapi.com/terms. That is the author’s claim about this one file, and it is not the same thing as the license GitHub reports for the repository, which is listed with the other numbers below.
SKILL.md
4.9 KB, as published. Nobody here has run it
Booking-ready cheapest-link resolver
Sometimes you do not want a report — you want the answer: the one cheapest bookable link for this property on these dates, as a clean object a bot or a button can act on. This workflow calls the flagship price-compare endpoint, keeps only offers that carry a bookable URL, sorts by total price, and returns the single cheapest — OTA, price, currency, deep link, and the savings versus the median. It is the "resolve to a deal link" primitive behind a concierge assistant, a checkout CTA, or an internal booking tool.
- Base URL:
https://api.stayingapi.com/v1(REST) · MCP:https://mcp.stayingapi.com/mcp - Auth:
Authorization: Bearer stay_live_…(free sandbox:stay_test_…). - Get a free key (no card): https://stayingapi.com/signup · Full machine contract: https://api.stayingapi.com/openapi.json
Steps
- Provide the property and dates — Give the workflow a property name (plus an optional location to disambiguate), check-in / check-out, occupancy and a currency.
- Compare every OTA offer — It calls GET /v1/price-compare, which resolves the property and returns every OTA offer for the dates, each with a bookable url, plus computed min and median.
- Resolve to the single cheapest link — The transform keeps only offers that carry a bookable URL, sorts by total price, and returns the single cheapest as a clean object — OTA, price, deep link, and savings vs. median.
- Return / deliver the deal link — The compact JSON is returned to a webhook (for a bot or a "book now" button) or posted to Slack/Telegram — a one-call primitive you can drop into any surface.
When to use this
The user wants the single cheapest bookable link for a known stay — not a report — to hand to a
bot, a "book now" button, or an internal tool. Use the flagship compare_prices /
GET /v1/price-compare endpoint and resolve to one deal link.
How to do it
- Resolve the property with one of
name,googleHotelId, orlocation(+checkIn,checkOut, optionaladults,currency). - Call
GET /v1/price-compare. - Keep only
data.offers[]that have aurland a numerictotalPrice; sort ascending; the first is your answer. Return{ ota, totalPrice, currency, bookUrl, savingsVsMedian }. - If no offer has a bookable url, return an explicit "no bookable offer" result — never a guess.
Keep it a primitive
Return the compact object (or just the bookUrl) — no prose — so a caller can render a button or
follow the link programmatically. Surface data.median only as an optional "you save X" badge.
Example — REST
curl -sS "https://api.stayingapi.com/v1/price-compare?name=Hotel%20X%20Sibenik&location=Sibenik,HR&checkIn=2026-07-13&checkOut=2026-07-20¤cy=EUR" \
-H "Authorization: Bearer $STAYINGAPI_KEY"
Example — @stayingapi/sdk
import { StayingApiClient } from '@stayingapi/sdk';
const scout = new StayingApiClient({ apiKey: process.env.STAYINGAPI_KEY });
const { data } = await scout.priceCompare({
name: 'Hotel X Sibenik',
location: 'Sibenik, HR',
checkIn: '2026-07-13',
checkOut: '2026-07-20',
currency: 'EUR',
});
const cheapest = data.offers
.filter((o) => o.url)
.sort((a, b) => a.totalPrice - b.totalPrice)[0];
console.log(cheapest.ota, cheapest.totalPrice, cheapest.url);
MCP (no key pasted into the agent)
On an MCP-capable runtime, connect the StayingAPI server at https://mcp.stayingapi.com/mcp (OAuth 2.1 + PKCE) and use:
compare_prices— compare one property across OTAs with computed min + median.
Async & partial failures
A live call that has to scrape returns 202 + a jobId; poll GET /v1/jobs/{jobId} (free)
until data.status is completed, then read data.result. The @stayingapi/sdk auto-polls.
On a fan-out, check meta.partial and meta.platformResults[] — report what succeeded and note
any meta.warnings[].
Credit awareness
Costs are per-endpoint and metered by result (v3). Failed, empty and blocked calls are never
billed, and sandbox (stay_test_) calls are always free. The exact, current costs live only in
https://stayingapi.com/pricing and the machine-readable https://api.stayingapi.com/openapi.json — read them there, don't assume.
Get your free key → https://stayingapi.com/signup · Docs: https://stayingapi.com/docs · Workflow: https://stayingapi.com/workflows/cheapest-link-resolver
Gives 0 of the 12 instructions most mcp tooling skills give
Counted across 638 of the 750 authors here whose files we hold, read 2026-08-06
- create ten complex read-only evaluation questionsin 71 of 638, across 17 files
- test servers using MCP Inspectorin 60 of 638, across 18 files
- provide actionable error messagesin 56 of 638, across 14 files
- prioritize comprehensive API coverage over specific workflowsin 54 of 638, across 12 files
- use TypeScript and Streamable HTTP for remote serversin 53 of 638, across 7 files
- define structured output schemas where possiblein 51 of 638, across 9 files
- use Zod or Pydantic for input schemasin 48 of 638, across 6 files
- fetch MCP specification pages with markdown suffixin 46 of 638, across 4 files
- load framework documentation using WebFetchin 45 of 638, across 3 files
- verify each evaluation answer independentlyin 45 of 638, across 3 files
- implement API client with authentication and paginationin 45 of 638, across 3 files
- Define input schemas with validationin 28 of 638, across 10 files
Said here and by no other author read
- call the price compare endpoint
- resolve the property using a name or location
- keep only offers with a bookable url
- keep only offers with a numeric total price
- sort valid offers by total price ascending
- return the cheapest offer as compact json
Grouped from the skills themselves: near-identical wordings counted once, and counted by distinct author, so one author publishing three of these counts once.