---
title: "Get async room mapping job status"
method: GET
path: "/rooms/match/async/jobs/{jobId}"
tags: ["Room Match"]
---

# Get async room mapping job status

`GET /rooms/match/async/jobs/{jobId}`

## Request

- Base URL: `https://api.liteapi.travel/v3.0`
- URL: `https://api.liteapi.travel/v3.0/rooms/match/async/jobs/{jobId}`
- Auth: API key in header `X-API-Key`

**What it does:** Job **status** and per-room **`confirm` / `remap` / reject** with `reasonCode`.

**Workflow role:** **Step 2** — poll every 5–10 s after async submit.

**Use when:** You have a `jobId`.

**Do not use when:** You only need the saved dictionary — use `GET /rooms/match/async/matches/{hotelId}`.

Details, examples, limits, and result codes: **Implementation Workflow** (doc page: `implementation-workflow`).

## Path parameters

- `jobId` string, required

## Response `200`

OK

- object
  - `data` object
    - `jobId` string
    - `hotelId` string
    - `status` 'queued' | 'running' | 'completed' | 'failed'
    - `currentMappingCount` integer: Number of mappings available before this job ran.
    - `referenceRooms` object[]
      - `id` integer
      - `name` string
      - `attributes` RoomAttributes: Optional structured evidence about a room. Omitted fields mean the source did not state them, never that the room lacks them. Normalised on submit: enum values are lower-cased and trimmed, m2/m² are folded into sqm, and string lists are deduplicated. Unknown structure, bedRelation or size.unit values, negative counts and non-positive sizes return 400. At most 4 KiB per room's attributes and 256 KiB across a list.
        - `structure` 'room' | 'suite' | 'studio' | 'apartment' | 'villa' | 'penthouse': Room structure as stated by the source. Do not infer it from a marketing room name.
        - `tier` string: Commercial tier stated by the source (standard, premium, deluxe, ...).
        - `bedrooms` integer: Stated bedroom count for multi-room structures. 0 or omitted means not stated.
        - `beds` RoomBed[]: Stated bed configuration.
          - `type` string, required: Normalised bed type. Labels are canonicalised: 'Extra-large double bed (Super-king size)' becomes extra_large_double, 'Queen bed' becomes queen.
          - `label` string: Bed description as stated by the source.
          - `count` integer: Number of beds of this type.
          - `sizeCm` string: Stated width band.
        - `bedRelation` 'and' | 'or' | 'none': Whether the listed beds are all present (and), alternatives (or), or a single configuration (none).
        - `occupancy` object: Stated capacity.
          - `maxAdults` integer
          - `maxChildren` integer
          - `maxOccupancy` integer
        - `size` object: Stated floor area, normalised to square metres.
          - `value` number, required
          - `unit` 'sqm', required: Square metres. m2 and m² are folded into sqm on submit.
        - `views` string[]: Normalised view labels. 'City View' and 'city' converge on city.
        - `accessibility` string[]: Normalised accessibility features stated by the source (for example mobility_accessible, roll_in_shower). Never inferred from a room name.
        - `features` object: Only attributes the source stated as true or false; a missing key means unknown, not false. Informational, never gates a match.
        - `amenities` string[]: Optional amenity list for audit context. Informational; never gates a match.
        - `source` object: Provenance retained for auditability.
          - `roomTitle` string
          - `officialSiteRoomName` string
          - `rawSizeUnit` string
    - `roomNames` string[]
    - `results` AsyncJobResult[]
      - `supplierName` string: Original supplier room name
      - `previous` MappingDecision
        - `name` string: Mapped reference room name, or not_mapped when rejected
        - `id` integer: Mapped reference room id, or 0 when not mapped
        - `confidence` number: Confidence score between 0 and 1
        - `reasonCode` 'roh' | 'no_confident_match' | 'ambiguous_candidates' | 'bed_type_mismatch' | 'view_amenity_mismatch' | 'conflicting_existing' | 'not_in_catalog' | 'low_score' | 'other': Present when not mapped
        - `reason` string: Short human explanation when not mapped
      - `final` MappingDecision
        - `name` string: Mapped reference room name, or not_mapped when rejected
        - `id` integer: Mapped reference room id, or 0 when not mapped
        - `confidence` number: Confidence score between 0 and 1
        - `reasonCode` 'roh' | 'no_confident_match' | 'ambiguous_candidates' | 'bed_type_mismatch' | 'view_amenity_mismatch' | 'conflicting_existing' | 'not_in_catalog' | 'low_score' | 'other': Present when not mapped
        - `reason` string: Short human explanation when not mapped
      - `reasonCode` string: Present when final is not_mapped
      - `reason` string: Short human explanation when not mapped
      - `source` 'audit' | 'omitted' | 'audit_adjustment': How the final decision was produced
      - `modelAction` 'confirm' | 'remap' | 'reject' | 'keep_existing': Action taken for this room
      - `modelOutput` object, nullable: Candidate scores retained for transparency; null for exact-match and run-of-house rooms
        - `selected` string
        - `score` number
        - `candidates` object[]
          - `name` string
          - `id` integer
          - `score` number
    - `createdAt` string, date-time
    - `updatedAt` string, date-time
    - `supplierRooms` object[]: Supplier rooms as stored on the job, including attributes when they were supplied.
      - `name` string
      - `attributes` RoomAttributes: Optional structured evidence about a room. Omitted fields mean the source did not state them, never that the room lacks them. Normalised on submit: enum values are lower-cased and trimmed, m2/m² are folded into sqm, and string lists are deduplicated. Unknown structure, bedRelation or size.unit values, negative counts and non-positive sizes return 400. At most 4 KiB per room's attributes and 256 KiB across a list.
        - `structure` 'room' | 'suite' | 'studio' | 'apartment' | 'villa' | 'penthouse': Room structure as stated by the source. Do not infer it from a marketing room name.
        - `tier` string: Commercial tier stated by the source (standard, premium, deluxe, ...).
        - `bedrooms` integer: Stated bedroom count for multi-room structures. 0 or omitted means not stated.
        - `beds` RoomBed[]: Stated bed configuration.
          - `type` string, required: Normalised bed type. Labels are canonicalised: 'Extra-large double bed (Super-king size)' becomes extra_large_double, 'Queen bed' becomes queen.
          - `label` string: Bed description as stated by the source.
          - `count` integer: Number of beds of this type.
          - `sizeCm` string: Stated width band.
        - `bedRelation` 'and' | 'or' | 'none': Whether the listed beds are all present (and), alternatives (or), or a single configuration (none).
        - `occupancy` object: Stated capacity.
          - `maxAdults` integer
          - `maxChildren` integer
          - `maxOccupancy` integer
        - `size` object: Stated floor area, normalised to square metres.
          - `value` number, required
          - `unit` 'sqm', required: Square metres. m2 and m² are folded into sqm on submit.
        - `views` string[]: Normalised view labels. 'City View' and 'city' converge on city.
        - `accessibility` string[]: Normalised accessibility features stated by the source (for example mobility_accessible, roll_in_shower). Never inferred from a room name.
        - `features` object: Only attributes the source stated as true or false; a missing key means unknown, not false. Informational, never gates a match.
        - `amenities` string[]: Optional amenity list for audit context. Informational; never gates a match.
        - `source` object: Provenance retained for auditability.
          - `roomTitle` string
          - `officialSiteRoomName` string
          - `rawSizeUnit` string
    - `attributeDetail` 'none' | 'summary' | 'full': Detail level used for the audit. Defaults to summary.

## Other responses

- `401`: Unauthorized
- `404`: Job not found or expired
- `500`: Internal Server Error

---

[API](https://skmtc.dev/liteapi/apis/api-mapping.md) - [All operations](https://skmtc.dev/liteapi/apis/api-mapping/llms.txt) - [OpenAPI document](https://skmtc.dev/liteapi/apis/api-mapping/revisions/82f8d27a93af?raw)
