> ## Documentation Index
> Fetch the complete documentation index at: https://docs.scrapio.dev/llms.txt
> Use this file to discover all available pages before exploring further.

# Agoda

> Search hotel availability, retrieve property details and room rates, and get review scores from Agoda.

<Note>
  Agoda endpoints require a paid plan (Starter or higher). Without one, these endpoints return `402 plan_upgrade_required`. See [Pricing](/pricing) for details.
</Note>

## Endpoints

* `GET /v1/agoda/search` — Search hotel availability for a destination and stay window.
* `GET /v1/agoda/search/crawl` — Queue a multi-page Agoda search as an async job (up to 25 pages).
* `GET /v1/agoda/property` — Retrieve structured property details and per-room rates.
* `GET /v1/agoda/reviews` — Retrieve the review score breakdown and individual review cards.
* `GET /v1/agoda/reviews/crawl` — Queue the same reviews capture as an async job, with no deadline.

## Resolving a property by ID

`/v1/agoda/property` and `/v1/agoda/reviews` accept either a full `url` or a `property_id`. If you only have `property_id`, you must also pass `city_id` — Agoda's own suggest endpoint only does fuzzy text matching, not ID lookups, so there's no way to resolve a property's city from `property_id` alone. Every `GET /v1/agoda/search` response carries the resolved city as `meta_data.resolved_city_id` for exactly this purpose:

```bash theme={null}
# 1. Search once to resolve the city
curl -G https://api.scrapio.dev/v1/agoda/search \
  -H "Authorization: Bearer $SCRAPIO_API_KEY" \
  --data-urlencode "location=Paris" \
  --data-urlencode "check_in=2026-08-10" \
  --data-urlencode "check_out=2026-08-12"
# -> meta_data.resolved_city_id: 9395, properties[].property_id: "3"

# 2. Reuse city_id on later property/reviews lookups
curl -G https://api.scrapio.dev/v1/agoda/property \
  -H "Authorization: Bearer $SCRAPIO_API_KEY" \
  --data-urlencode "property_id=3" \
  --data-urlencode "city_id=9395" \
  --data-urlencode "check_in=2026-08-10" \
  --data-urlencode "check_out=2026-08-12"
```

Passing a full `url` instead skips this requirement entirely, since the property (and its city) are already fully identified by the URL.

## Pagination

Agoda has no URL-based pagination — there is no `page` query parameter Agoda's own site respects. Passing `page` (greater than 1) on `/v1/agoda/search` or `/v1/agoda/reviews` instead drives a real, synchronous capture-and-replay session: Scrapio simulates the pagination click Agoda's own UI requires, intercepts the resulting dynamically-header-guarded request, and replays it with the patched page number — all within the same request/response cycle, no job polling required. Because it drives a real interaction, it's billed at 25 credits instead of the base 15.

For a larger page range than fits comfortably in one inline request's timeout budget, `GET /v1/agoda/search/crawl` queues the same real capture-and-replay mechanism as a background job (up to 25 pages from `start_page`), mirroring Booking's `/v1/booking/search/crawl`. Unlike Booking's crawl, every page — including the first — goes through the capture-replay path and is billed at the same interact rate, since Agoda has no cheaper plain-fetch page 1. It also does not accept `sort_by`/`min_price`/`max_price`/`stars`/`min_review_score`: Agoda's search filters only apply via a single interact click session with no mechanism that carries across a multi-page crawl.

## Individual review cards

Unlike Booking.com, `GET /v1/agoda/reviews` returns both the review score breakdown and individual review cards from a single plain page load — there's no `include_review_details` opt-in or separate interact-session billing tier. Page 1 is always 15 credits; `page` beyond 1 is billed at 25 credits for the same real-interaction reason as search pagination.

Capturing that data reliably can take longer than an HTTP request can safely wait — `GET /v1/agoda/reviews` bounds itself to stay under the \~100s edge timeout and returns quickly with an empty `reviews`/`score_breakdown` rather than hang if that budget runs out. If you need real review data reliably rather than a fast response, use `GET /v1/agoda/reviews/crawl` instead: same parameters, same result shape, but it runs as a background job (poll `GET /v1/jobs/{id}`) with no deadline.

## Hotel monitors

Watch an Agoda property at fixed dates and occupancy, and get notified only when the price actually changes — including cross-provider rate-parity monitoring against Booking.com. See [Hotel Monitors](/api-reference/hotel-monitors).
