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

# hotel-reviews

> Guest review summary and recent reviews for a single hotel

Read what guests say about a single property after a search result catches the user's attention. Useful for questions like "what do guests say about this hotel", "is it clean", or "how is the location". Returns the overall guest score and review count, a summary of pros and cons, per-category scores (for example cleanliness, location and staff), and recent individual reviews, each with its headline, score, pros and cons, date, language and reviewer name. Reviews are not attributed to a source. Use `limit` and `offset` to page through them.


## OpenAPI

````yaml api-reference/public-api.yaml GET /v1/hotel_reviews/{hotel_id}
openapi: 3.0.0
info:
  title: Jinko Public API
  version: 0.87.0
  description: >-
    Curated public REST surface for Jinko. Authenticated with jnk_ API keys. See
    https://docs.gojinko.com for guides.


    ### Per-end-user attribution


    On booking calls you may send an optional `X-End-User-Id` request header to
    attribute the booking to one of your own end users (for per-end-user
    attribution and rate-limiting). The value is an **opaque, tenant-scoped**
    identifier that you choose — not a Jinko account id. Omit it to book as the
    tenant. Values prefixed `user_` or `org_` are rejected.
servers:
  - url: https://api.gojinko.com
    description: Production
  - url: https://api.sandbox.gojinko.com
    description: Sandbox
security: []
paths:
  /v1/hotel_reviews/{hotel_id}:
    get:
      tags:
        - Hotels
      summary: Guest review summary and recent reviews for a single hotel
      description: >-
        Use after hotel_search or hotel_details, when the user wants to know
        what guests say about a hotel or how it scores on cleanliness, location
        or staff. Returns the overall guest score and review count, a summary of
        what guests praise and criticise, a score per category, and a page of
        recent reviews, newest first: headline, score, pros/cons, date and
        language for each. The review source is not attributed.
      parameters:
        - schema:
            type: string
            description: >-
              The `hotel_id` of a hotel from hotel_search, or the `id`
              hotel_details returns, passed exactly as received and URL-encoded
              as one path segment. It is opaque: do not parse or build it.
            example: lp1d2c3
          required: true
          name: hotel_id
          in: path
        - schema:
            type: integer
            minimum: 1
            maximum: 50
            description: Reviews per page, 1 to 50. Default 10.
            example: 10
          required: false
          name: limit
          in: query
        - schema:
            type: integer
            nullable: true
            minimum: 0
            maximum: 2147483647
            description: Reviews to skip before this page. Default 0.
            example: 0
          required: false
          name: offset
          in: query
      responses:
        '200':
          description: Hotel reviews
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/HotelReviewsResponse'
        '400':
          description: Bad request
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/ErrorResponse'
              example:
                error:
                  code: BAD_REQUEST
                  message: Malformed JSON in request body.
                  doc_url: https://docs.gojinko.com/concepts/errors
        '401':
          description: Authentication required
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/ErrorResponse'
              example:
                error:
                  code: AUTH_REQUIRED
                  message: Invalid or expired API key.
                  doc_url: https://docs.gojinko.com/authentication/api-keys
        '402':
          description: Payment required — organization balance exhausted
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/ErrorResponse'
              example:
                error:
                  code: PAYMENT_REQUIRED
                  message: >-
                    Insufficient balance — this call costs $0.0150 and your
                    organization has $0.0000 available. Top up at
                    https://dashboard.gojinko.com/developers/billing/topup
                  doc_url: https://docs.gojinko.com/concepts/errors
        '404':
          description: Resource not found
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/ErrorResponse'
              example:
                error:
                  code: NOT_FOUND
                  message: Resource not found.
                  doc_url: https://docs.gojinko.com/concepts/errors
        '409':
          description: The operation conflicts with the current state of the resource
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/ErrorResponse'
              example:
                error:
                  code: CONFLICT
                  message: >-
                    The operation conflicts with the current state of the
                    resource.
                  doc_url: https://docs.gojinko.com/concepts/errors
        '410':
          description: The resource this request names no longer exists
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/ErrorResponse'
              example:
                error:
                  code: GONE
                  message: The resource no longer exists.
                  doc_url: https://docs.gojinko.com/concepts/errors
        '422':
          description: Validation error
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/ErrorResponse'
              example:
                error:
                  code: BAD_REQUEST
                  message: A required field is missing or invalid.
                  doc_url: https://docs.gojinko.com/concepts/errors
        '429':
          description: Rate limit or quota exceeded
          headers:
            Retry-After:
              description: >-
                Seconds to wait before retrying, forwarded verbatim from the
                upstream service. Absent when the upstream named no interval.
              schema:
                type: string
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/ErrorResponse'
              example:
                error:
                  code: RATE_LIMITED
                  message: Too many requests. Retry after the Retry-After delay.
                  doc_url: https://docs.gojinko.com/concepts/errors
        '502':
          description: The travel provider rejected the request, or an upstream call failed
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/ErrorResponse'
              example:
                error:
                  code: UPSTREAM_REJECTED
                  message: The request was declined for this offer. Try another offer.
                  doc_url: https://docs.gojinko.com/concepts/errors
        '503':
          description: No travel provider can serve the request right now
          headers:
            Retry-After:
              description: >-
                Seconds to wait before retrying, forwarded verbatim from the
                upstream service. Absent when the upstream named no interval.
              schema:
                type: string
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/ErrorResponse'
              example:
                error:
                  code: UPSTREAM_UNAVAILABLE
                  message: >-
                    The service is temporarily unavailable. Retry after the
                    Retry-After delay.
                  doc_url: https://docs.gojinko.com/concepts/errors
        '504':
          description: The travel provider did not answer in time
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/ErrorResponse'
              example:
                error:
                  code: UPSTREAM_TIMEOUT
                  message: >-
                    The request timed out before a result was available. Retry
                    the request.
                  doc_url: https://docs.gojinko.com/concepts/errors
      security:
        - ApiKeyAuth: []
        - BearerAuth: []
components:
  schemas:
    HotelReviewsResponse:
      type: object
      properties:
        hotel:
          type: object
          properties:
            id:
              type: string
              description: >-
                Opaque hotel identifier, the value hotel_search returns as
                `hotel_id` and hotel_details as `id`. Pass it back exactly as
                received; do not parse or build it.
              example: lp39fe9
            hotel_ref:
              type: string
              description: >-
                Deprecated: use `hotel_id` (search) or `id` (details, reviews).
                The hotel's identifier behind a source prefix, as earlier
                contract versions returned it; hotel_details and hotel_reviews
                still accept it. Pass it back exactly as received; do not parse
                or build it.
              example: h1:lp1d2c3
              deprecated: true
            name:
              type: string
              description: Hotel name.
              example: Park Plaza Beijing Wangfujing
            rating:
              type: number
              description: Guest score out of 10.
              example: 8.6
            review_count:
              type: integer
              description: Number of guest reviews behind `rating`.
              example: 1243
          required:
            - id
          description: The hotel the reviews are about.
        summary:
          type: object
          nullable: true
          properties:
            pros:
              type: array
              items:
                type: string
              description: What guests praise, as short phrases.
              example:
                - Central location
                - Helpful staff
            cons:
              type: array
              items:
                type: string
              description: What guests criticise, as short phrases.
              example:
                - Small rooms
            categories:
              type: array
              items:
                type: object
                properties:
                  name:
                    type: string
                    description: Category name.
                    example: Cleanliness
                  rating:
                    type: number
                    description: Category score out of 10.
                    example: 8.9
                  description:
                    type: string
                    description: What guests say about this category.
                    example: Guests praise the housekeeping.
              description: Score per category, such as cleanliness, location or staff.
              example:
                - name: Cleanliness
                  rating: 8.9
                  description: Guests praise the housekeeping.
            updated_at:
              type: string
              description: >-
                When the summary was last updated (RFC 3339). Absent when
                unknown.
              example: '2026-09-30T00:00:00Z'
          required:
            - pros
            - cons
            - categories
          description: >-
            Summary of what guests say. Null when the hotel has no review
            summary.
        reviews:
          type: array
          items:
            type: object
            properties:
              id:
                type: string
                description: Review id.
                example: '12345'
              headline:
                type: string
                description: Review title.
                example: Great stay
              score:
                type: number
                description: This reviewer's score out of 10.
                example: 9
              pros:
                type: string
                description: What this reviewer liked, as they wrote it.
                example: Location, breakfast
              cons:
                type: string
                description: What this reviewer disliked, as they wrote it.
                example: Street noise at night
              date:
                type: string
                description: Review date, `YYYY-MM-DD`. Absent when unknown.
                example: '2026-09-12'
              language:
                type: string
                description: Language code of the review.
                example: en
              reviewer_name:
                type: string
                description: The reviewer's display name.
                example: Ana
          description: >-
            One page of individual reviews, newest first. Empty when the hotel
            has no reviews or the page starts past the last one.
          example:
            - id: '12345'
              headline: Great stay
              score: 9
              pros: Location, breakfast
              cons: Street noise at night
              date: '2026-09-12'
              language: en
              reviewer_name: Ana
        page:
          type: object
          properties:
            limit:
              type: integer
              description: Reviews requested per page.
              example: 10
            offset:
              type: integer
              description: Reviews skipped before this page.
              example: 0
            total_count:
              type: integer
              nullable: true
              description: Total reviews available for this hotel, when known.
              example: 1243
          required:
            - limit
            - offset
            - total_count
          description: Where this page sits among the hotel's reviews.
      required:
        - hotel
        - summary
        - reviews
        - page
    ErrorResponse:
      type: object
      properties:
        error:
          type: object
          properties:
            code:
              type: string
              enum:
                - INVALID_SEGMENTS_TO_EXCHANGE
                - PARTIAL_EXCHANGE_UNSUPPORTED
                - LEG_ALREADY_DEPARTED
                - DEPARTURE_DATE_IN_PAST
                - LEG_DATES_OUT_OF_ORDER
                - INVALID_EXCHANGE_REQUEST
                - NOT_EXCHANGEABLE
                - CREDENTIAL_FORMAT_INVALID
                - PAYMENT_TYPE_NOT_ENABLED
                - PAYMENT_CREDENTIAL_INVALID
                - TRIP_OWNED_BY_OTHER_PAYMENT
                - IDEMPOTENCY_KEY_REUSED
                - ATTEMPT_IN_PROGRESS
                - ATTEMPT_TERMINAL
                - TEMPORARILY_UNAVAILABLE
                - AUTH_REQUIRED
                - PAYMENT_REQUIRED
                - RATE_LIMITED
                - BAD_REQUEST
                - FORBIDDEN
                - NOT_FOUND
                - CONFLICT
                - GONE
                - QUOTE_PENDING
                - QUOTE_EXPIRED
                - TRIP_EXPIRED
                - TRIP_STATE_CONFLICT
                - OFFER_EXPIRED
                - OFFER_UNAVAILABLE
                - MISSING_CUSTOMER_DETAILS
                - INVALID_PHONE_NUMBER
                - CURRENCY_UNSUPPORTED
                - HOTEL_NAME_LOW_CONFIDENCE
                - DESTINATION_LOW_CONFIDENCE
                - UPSTREAM_REJECTED
                - UPSTREAM_UNAVAILABLE
                - UPSTREAM_TIMEOUT
                - UPSTREAM_ERROR
                - INTERNAL
              description: >-
                What went wrong, as a stable machine-readable code. This is a
                closed set — branch on it rather than on `message`, which is
                prose and may change. New codes arrive in a minor version, so
                treat an unknown one as its HTTP status. A code can also stop
                being emitted: it leaves this set in a minor version, named in
                the changelog, and a branch you wrote for it goes unreached
                rather than wrong.
              example: BAD_REQUEST
            message:
              type: string
              description: >-
                What went wrong, in prose. These codes always carry the same
                message, and it never includes text from a supplier:
                `RATE_LIMITED` — "Too many requests. Retry after the Retry-After
                delay."; `OFFER_EXPIRED` — "This offer has expired. Search
                again."; `OFFER_UNAVAILABLE` — "This offer is no longer
                available. Search again."; `UPSTREAM_REJECTED` — "The request
                was declined for this offer. Try another offer.";
                `UPSTREAM_UNAVAILABLE` — "The service is temporarily
                unavailable. Retry after the Retry-After delay.";
                `UPSTREAM_TIMEOUT` — "The request timed out before a result was
                available. Retry the request."; `UPSTREAM_ERROR` — "The request
                could not be completed.".
            doc_url:
              type: string
            field:
              type: string
              description: >-
                On a 400 `BAD_REQUEST` that names one refused input: the path of
                that field in your request, e.g. `selections[1].quantity` for
                the second selection of a `select_ancillaries` call. Absent when
                the refusal names no single field.
              example: selections[1].quantity
          required:
            - code
            - message
      required:
        - error
  securitySchemes:
    ApiKeyAuth:
      type: apiKey
      in: header
      name: X-API-Key
    BearerAuth:
      type: http
      scheme: bearer

````

This documentation is built and hosted on [Mintlify](https://mintlify.com), a developer documentation platform.