Irmu · Schema

BookingSearchResult

What `/booking/search` answers. `hotels` is empty while the search is still running, when it failed and when it found nothing; `status` tells those apart.

Web ScrapingDeveloper ToolsAutomationData ExtractionCompany

Properties

Name Type Description
url string The Booking.com page that was read, as built from the request.
checkin stringnull
checkout stringnull
adults integer
rooms integer
currency stringnull
destination string
hotels array One row per property card, each field as text the way Booking prints it. A field the card does not show is absent.
credits_charged integer 30, or 0 when nothing came back.
credits_remaining integer
job_id string What this ran under. Collect a `202` from `/crawl/{job}` with it.
status string
position integernull Where it sits in the crawler's queue while `queued`.
error stringnull Why nothing came back. Null otherwise.
debug object Where the crawl had got to, when the crawler stopped waiting and looked. Only sent when the request carries `debuga=1` -- a screenshot and the page source run to a megabyte -- and null otherwise.
View JSON Schema on GitHub

JSON Schema

irmu-com-booking-search-result-schema.json Raw ↑
{
  "$schema": "https://json-schema.org/draft/2020-12/schema",
  "$id": "https://artifacts.apis.io/irmu-com/json-schema/irmu-com-booking-search-result-schema.json",
  "title": "BookingSearchResult",
  "description": "What `/booking/search` answers. `hotels` is empty while the search is\nstill running, when it failed and when it found nothing; `status` tells\nthose apart.\n",
  "x-generated": "2026-11-05",
  "x-method": "derived",
  "x-generator": "derive-json-schema.py",
  "x-source": "openapi/irmu-com-openapi.yaml#/components/schemas/BookingSearchResult",
  "type": "object",
  "required": [
    "destination",
    "hotels",
    "url",
    "checkin",
    "checkout",
    "adults",
    "rooms",
    "currency",
    "credits_charged",
    "credits_remaining",
    "job_id",
    "status",
    "position",
    "error",
    "debug"
  ],
  "properties": {
    "url": {
      "type": "string",
      "description": "The Booking.com page that was read, as built from the request."
    },
    "checkin": {
      "type": [
        "string",
        "null"
      ],
      "format": "date"
    },
    "checkout": {
      "type": [
        "string",
        "null"
      ],
      "format": "date"
    },
    "adults": {
      "type": "integer"
    },
    "rooms": {
      "type": "integer"
    },
    "currency": {
      "type": [
        "string",
        "null"
      ]
    },
    "destination": {
      "type": "string"
    },
    "hotels": {
      "type": "array",
      "description": "One row per property card, each field as text the way Booking prints\nit. A field the card does not show is absent.\n",
      "items": {
        "type": "object",
        "properties": {
          "name": {
            "type": "string"
          },
          "url": {
            "type": "string"
          },
          "image": {
            "type": "string"
          },
          "price": {
            "type": "string"
          },
          "priceInfo": {
            "type": "string"
          },
          "taxes": {
            "type": "string"
          },
          "address": {
            "type": "string"
          },
          "distance": {
            "type": "string"
          },
          "reviewScore": {
            "type": "string"
          },
          "reviewWord": {
            "type": "string"
          },
          "reviewCount": {
            "type": "string"
          },
          "stars": {
            "type": "string"
          }
        }
      }
    },
    "credits_charged": {
      "type": "integer",
      "description": "30, or 0 when nothing came back."
    },
    "credits_remaining": {
      "type": "integer"
    },
    "job_id": {
      "type": "string",
      "description": "What this ran under. Collect a `202` from `/crawl/{job}` with it."
    },
    "status": {
      "type": "string",
      "enum": [
        "done",
        "queued",
        "running",
        "failed"
      ]
    },
    "position": {
      "type": [
        "integer",
        "null"
      ],
      "description": "Where it sits in the crawler's queue while `queued`."
    },
    "error": {
      "type": [
        "string",
        "null"
      ],
      "description": "Why nothing came back. Null otherwise."
    },
    "debug": {
      "description": "Where the crawl had got to, when the crawler stopped waiting and\nlooked. Only sent when the request carries `debuga=1` -- a screenshot\nand the page source run to a megabyte -- and null otherwise.\n",
      "oneOf": [
        {
          "$ref": "#/$defs/CrawlSnapshot"
        },
        {
          "type": "null"
        }
      ]
    }
  },
  "$defs": {
    "CrawlSnapshot": {
      "type": "object",
      "description": "Where a crawl had got to, for one that is still running or failed. Only\nsent when the request carries `debuga=1`.\n\nThe crawler stops waiting long before it stops working, and when it stops\nwaiting it looks at the tab: the url the browser is on, a picture of what\nis on screen, and the page source as it stands. That is what this is --\na diagnosis for a request that timed out, not a result. Nothing is\ncharged for it.\n\nNull on anything that is not still running. A finished or failed crawl has\nno tab left to look at, and a crawl still in the queue has not opened one\nyet.\n\nTwo things to know when reading one. The image is the **viewport**, not\nthe whole page, so it is not the picture `/screenshot` sells -- it is a\nthumbnail at quality 60, meant to be looked at rather than kept. And\neither artefact may be missing: they are captured independently, because a\nnavigation can destroy one without touching the other, so half a snapshot\nis ordinary. The missing half reads as null rather than going absent.\n\nA blank image beside a near-empty `html` is not a broken capture -- it\nmeans the crawl stalled *inside* a navigation, with the old document\nalready replaced. That is itself the answer.\n",
      "required": [
        "url",
        "screenshot",
        "html"
      ],
      "properties": {
        "url": {
          "type": [
            "string",
            "null"
          ],
          "format": "uri",
          "description": "The url the tab was on, which a redirect may have moved away from the\none you asked for.\n"
        },
        "screenshot": {
          "type": [
            "string",
            "null"
          ],
          "format": "byte",
          "description": "A base64 JPEG of the viewport, with no `data:` prefix -- decode it as\nit stands. Null when the capture raced a navigation and lost.\n"
        },
        "html": {
          "type": [
            "string",
            "null"
          ],
          "description": "The page source at that moment, half-loaded and all. Null when the\ncapture raced a navigation and lost.\n"
        }
      }
    }
  }
}

Work with this as data

Every JSON Schema here is available over the APIs.io API and to AI agents over MCP.

MCP server

One button, every client — Claude, Cursor, VS Code and the rest.

https://apis.io/mcp

Tools for schemas

4 MCP tools reach this
  • find_json_schemasBrowse and filter every JSON Schema in the catalog.
  • apis_io_searchSTART HERE — APIs, providers and tags for one query, each with its total.
  • resolveTurn a domain, URL or GitHub org into the provider it belongs to.
  • find_cohortsEvery scored population of providers in the catalog.
All 92 tools →

Call it yourself

curl for this page
This JSON Schema
curl "https://apis.io/api/v1/json-schemas/irmu-com-booking-search-result"
All schemas
curl "https://apis.io/api/v1/json-schemas?limit=25"

Calls without X-API-Key need no key. Calls with it need a paid plan — get a key.

Get an API key

Free tier, no form to fill in. Signing in shares your email address with us — we store it to create your key and to recognise you if you sign in with another provider. See our Privacy Policy and Terms.

A second provider on the same verified email joins the account you already have.