Pay per call, from credit.
Each billable call names its SKU in the response, so you can reconcile your credit line by line.
Every SKU, in USD.
Version 2.0, updated 2026-10-07. Resolve, jobs, webhooks, the catalog helpers and bookings cost nothing.
| SKU | Unit | Price | Notes |
|---|---|---|---|
search.structured.filters | search | $0.003 | Filters only, ranked by filters. |
search.loose.filters | search | $0.005 | A free-text query, ranked by filters. |
search.structured.semantic | search | $0.008 | Filters only, ranked on photos, reviews and descriptions. |
search.loose.semantic | search | $0.012 | A free-text query, ranked on photos, reviews and descriptions. |
search.extra_results | result | Relative | 5% of the search's base price for each result beyond 10. Later pages of the same search are free. |
hotel.detail | call | $0.005 | The full hotel profile. Same price whether or not a search warmed the cache. |
rates.direct.cached | hotel | $0.002 | Per hotel returned observed, or stale within max_age_hours. Unknown and unsupported hotels are free. |
rates.direct.live | hotel | $0.040 | Per hotel we read live from its own booking engine and return observed. |
rates.batch | hotel | Relative | 25% off the cached and live unit prices when a batch has 1,000 hotels or more. |
rooms.reconcile.urls | reconciliation | $0.25 | At least one source is a URL we read. A repeat with identical inputs within 30 days is free. |
rooms.reconcile.supplied | reconciliation | $0.08 | Every source is a room list you send. A repeat with identical inputs within 30 days is free. |
booking.confirmed | booking | Free | Bookings are free. On commissionable hotels the commission is split 50/50 with you, and your half is paid monthly by bank transfer; Enterprise can negotiate the split. |
chat.turn | turn | $0.03 | Per conversational turn. A turn that only asks a clarifying question is free. |
Four tiers, one price list.
| Tier | Credit | Requests per minute | Discount | Notes |
|---|---|---|---|---|
| Free | $5 of credit each month. It doesn’t roll over. | 10 | None | Search, hotel detail, cached rates and chat, charged against the monthly credit. Live rates, rate batches, room reconciliation and bookings need Build. Test keys hit the real catalogue and spend credit; they never create Stripe charges. No card needed. |
| Build | Prepaid credit, topped up as you go. | 120 | None | List prices. Set a monthly spend cap in the dashboard. Adds live rates, batch rates, room reconciliation and bookings. |
| Scale | Prepaid credit at 15% off list, topped up $2,000 at a time. | 600 | 15% | 15% off every SKU. |
| Enterprise | Custom contract. Invoiced monthly. | Custom | Custom | Custom limits and unit prices, private inventory scoping, third-party channel observations under contract and a negotiated commission split. Contact sales. |
Build spends prepaid credit at list prices. Scale: Prepaid credit at 15% off list, topped up $2,000 at a time. Monthly invoicing is for Enterprise contracts only.
Third-party channel observations are available to Enterprise customers under contract. Contact sales.
How credit is spent.
- Each billable call takes its price from your balance as it completes, and names its SKU in
billing. - Short of credit, a call fails with
402before any work starts. - Jobs reserve their maximum when they start and settle on completion; cancelling releases the rest. Jobs are kept 7 days.
- Batches of 1,000 hotels or more get the
rates.batchdiscount automatically. - Set a monthly spend cap in the dashboard;
X-Credit-Remainingshows the balance on every response.
Bookings are free.
We don't charge for bookings, and VistaLink never holds the guest's money. When a hotel pays commission on a stay, you get 50% of it. We pay your share by bank transfer each month, from the commission hotels have paid us. Enterprise can negotiate the split and the terms.
Billing
What a billed call cost. Present on every billed response; billing is null on free ones.
| Field | Type | Description |
|---|---|---|
skuREQUIRED | string | The price-list item charged, for example search.loose.semantic or hotel.detail; see pricing.json. |
unitsREQUIRED | integer | number | How many units of sku were charged, for example one per priced hotel on a rates call. |
amountREQUIRED | string | Total charged for this call, a decimal string in currency after any plan or batch discount; "0" for a stored repeat. |
currency | string | Always USD: credit is held and charged in US dollars. Always USD. |