---
title: "Modify hotel booking"
method: POST
path: "/v2/hotel/pnrs/{pnrId}/modify-book"
tags: ["Hotel"]
---

# Modify hotel booking

`POST /v2/hotel/pnrs/{pnrId}/modify-book`

## Request

- Base URL: `https://api-ext-sboxmeta.partners.spotnana.com`
- URL: `https://api-ext-sboxmeta.partners.spotnana.com/v2/hotel/pnrs/{pnrId}/modify-book`
- Auth: HTTP bearer

Modify an existing hotel booking based on the request parameters.
This API is used to confirm the requested changes for the booking.

## Request body

- HotelModifyBookingRequest: Defines the structure of a hotel modify booking request
  - `bookingKey` string, required: The booking key for the hotel booking
  - `travelers` HotelTraveler[], required: The list of travelers, the first traveler is considered as primary traveler
    - `travelerId` UserId, required: User identifier
      - `id` string, uuid, required
    - `name` Name, required: Full name containing first, middle, last (family) names, and suffix.
      - `family1` string, required: Last (family) name.
      - `family2` string
      - `given` string, required: First (given) name.
      - `middle` string: Middle name.
      - `suffix` 'NAME_SUFFIX_UNKNOWN' | 'SR' | 'JR' | 'MD' | 'PHD' | 'II' | 'III' | 'IV' | 'DO' | 'ATTY' | 'V' | 'VI' | 'ESQ' | 'DC' | 'DDS' | 'VM' | 'JD' | 'SECOND' | 'THIRD': Suffix for name
      - `preferred` string: Informal preferred name added by traveler. This is not used on any PNR or tickets
    - `dob` DateModel: Date in ISO 8601 standard.
      - `iso8601` string, required
    - `phoneNumber` PhoneNumber, required: Properly formatted phone number.
      - `countryCode` integer: two digit country code
      - `countryCodeSource` 'UNSPECIFIED' | 'FROM_NUMBER_WITH_PLUS_SIGN' | 'FROM_NUMBER_WITH_IDD' | 'FROM_NUMBER_WITHOUT_PLUS_SIGN' | 'FROM_DEFAULT_COUNTRY'
      - `extension` string: phone number extension
      - `isoCountryCode` string: ISO alpha-2 code
      - `italianLeadingZero` boolean
      - `nationalNumber` integer
      - `numberOfLeadingZeros` integer
      - `preferredDomesticCarrierCode` string
      - `rawInput` string
      - `type` 'UNKNOWN_TYPE' | 'MOBILE' | 'LANDLINE'
    - `email` string, required: Email of the traveler.
    - `loyaltyInfo` LoyaltyInfo: Loyalty Info details.
      - `appliedTo` string[]
      - `id` string, required
      - `issuedBy` string, required
      - `type` 'UNKNOWN_TYPE' | 'AIR' | 'HOTEL' | 'CAR' | 'RAIL', required
      - `linked` boolean: Indicates if this loyalty account is linked to the external provider. Only applicable for certain loyalty types.
      - `tier` string: Loyalty membership tier name echoed from the supplier.
    - `adhocInfo` object: Adhoc Info of the traveler. It is only present if the traveler is adhoc user.
      - `profileOwnerId` UserId: User identifier
        - `id` string, uuid, required
  - `tripData` TripData, required: Trip data to book a PNR.
    - `approverEmail` string: Email address of the approver who should receives approval email for the current booking.
    - `approverName` string: Name of the approver.
    - `hardApprovalRequired` boolean: Whether the current booking requires hard approval or soft approval. This flag should be used only if valid approver is present.
    - `outOfPolicy` boolean: If the given booking is out of policy.
    - `policyId` string: Policy Id for which violation is done.
    - `policyVersion` integer: Version of policy.
    - `tripId` TripId, required: Id of trip.
      - `id` string, required: Id.
  - `preBookAnswers` PreBookAnswers
    - `answers` EntityAnswer[]
      - `entityId` string: The unique ID for the question.
      - `userInput` string: The text input given by user (if any).
      - `itemIds` integer[]: The id/enum value corresponding to the option chosen by the user as answer.
      - `answers` AnswerPair[]
        - `item` string: The option selected from the list of available choices.
        - `value` string: The additional input provided (by the user) while selecting one of the options.
        - `description` string: Description of the selected option.
      - `customFieldType` 'QUESTION' | 'MEETING' | 'BUDGET' | 'BREX_TOKEN': The type of custom field.
      - `questionDisplayText` string: The question text to be displayed to the user.
      - `question` Question: The message defines the format of a question which can be asked to a user in any kind of workflows.
        - `id` string, uuid, required
        - `name` string, required: Question display name that the user will see. For eg, 'Choose the purpose of your trip'.
        - `questionFormat` 'INPUT_BOX' | 'RADIO_BUTTON' | 'CHECKBOX' | 'CHECKBOX_WITH_PERCENTAGE': Question types. INPUT_BOX will make user enter a free flowing text. RADIO_BUTTON will have multiple options, user can select only one. CHECKBOX questions contain the possible set of options, from which the user can choose multiple options. CHECKBOX_WITH_PERCENTAGE is similar to checkbox, with the difference being that each option having an additional input field whose values must add up to 100.
        - `optionInfo` OptionInfo: Options related information for the question.
          - `source` 'MANUAL' | 'COMPANY_CONFIG', required: Option source
          - `sourceMetadata` OptionSourceMetadata: Wrapper for option source company config.
            - `companyConfig` CompanyConfigSource: For this option source, options would be auto generated based on specified parameter.
              - …
          - `totalNumOptions` integer: Total number of options
          - `options` Option[]: Available options for the question. This will contain only max 10 options if only summary is requested.
            - `displayCode` string, required: The code which is sent in answer response.
            - `displayValue` string: The text to be displayed to the user beside this option.
        - `isRequired` boolean, required: Whether its compulsory to answer the question or not.
        - `isDisabled` boolean, required: Whether the question is disabled or not. If true, this should not be asked.
        - `includeInItinerary` boolean: Whether to include this question in the itinerary related emails.
        - `customFieldLocations` CustomFieldLocation[]
        - `matchConditions` CustomFieldMatchConditions: Conditions to select the custom field for given context.
          - `travelerConditions` TravelerMatchConditions: Matching conditions for traveler.
            - `workerTypes` WorkerType[]: Worker types. Users belonging to any of these would match.
            - `countries` string[]: Countries.
            - `legalEntities` Reference[]: Legal entities
              - …
            - `departments` Reference[]: Departments
              - …
            - `costCenters` Reference[]: Cost centers
              - …
            - `offices` Reference[]: Offices
              - …
          - `travelTypes` TravelType[]: Travel types to match.
          - `travelRegionTypes` TravelRegionType[]: Travel region types to match.
          - `tripUsageTypes` TripUsageType[]: Trip usage types to match. If empty, all trip usage types will be matched.
        - `questionType` QuestionType: Question type.
          - `preSearchQuestionType` 'UNKNOWN_SEARCH_QUESTION_TYPE' | 'PURPOSE_OF_TRIP': Types of pre-search questions. PURPOSE_OF_TRIP required to ask purpose of the trip user is going to. For example: meeting, training, interview.
          - `preCheckoutQuestionType` 'UNKNOWN_CHECKOUT_QUESTION_TYPE' | 'USER_DEFINED_QUESTION' | 'OOP_REASON_CODE': Types of pre-checkout questions. USER_DEFINED_QUESTION the default question type for all pre checkout questions which have been created from UI. OOP_REASON_CODE is kept separate so that existing OOP flow doesn't break.
    - `preBookQuestionResponseId` string: The unique id sent back in the pre book questions API response
  - `hotelSpecialRequests` HotelSpecialRequests: Hotel special requests
    - `roomLocations` string[]: Room Location special request
    - `roomFeatures` string[]: Room Features List
    - `checkIn` 'EARLY_CHECK_IN' | 'LATE_CHECK_IN': Early or Late Check-in
    - `checkInTime` TimeLocal: ISO8601 Local Time
      - `iso8601` string, required
    - `flightNumber` string: Attach flight number
    - `additionalNote` string: Free form text to describe special request
    - `accessibleFeatures` HotelAccessibleFeatureType[]: Accessible Features List
  - `bookingPaymentDetails` BookingPaymentDetails: Payment details used for booking.
    - `bookingTravelerPaymentDetails` BookingTravelerPaymentDetails[], required
      - `selectedFormOfPayments` SelectedFormOfPayment[], required
        - `paymentItems` PaymentItem[], required
          - `itemType` 'SERVICE_FEE' | 'TRAVEL_TICKET' | 'SEAT' | 'BAGGAGE' | 'EARLY_BIRD': Type of payment item eligible for this fop rule
          - `fareComponent` FareComponent[]
        - `selectedPaymentSources` SelectedPaymentSource[], required
          - `paymentSourceId` string, uuid: Unique identifier identifying this payment source.
          - `rawPaymentSource` union: Raw Details of the Payment Source
            - object: Object to pass through dpan payment source details through the api call.
              - …
            - object
              - …
          - `postPaymentRedirectionUrl` string: Url for post payment redirection if payment source navigates user to a third party url
          - `cvv` string: CVV associated with associated payment source, if any.
          - `amount` Money: Money object containing details such as the amount, the currency code, and the converted amount.
            - `amount` number, double, required: The numeric value for the amount of money.
            - `currencyCode` string, required: The 3-letter currency code for the money amount (defined using ISO 4217 standard).
            - `convertedAmount` number, double: The converted currency and amount that has been converted (if a currency conversion has been requested). For example, if the call requests that money be sent in a specified currency (because the frontend requested the backend to send money in the user's preferred currency).
            - `convertedCurrency` string: The 3-letter currency code for the converted currency (defined using ISO 4217 standard).
            - `otherCoinage` object[]: List of the dollar amount in other coinage systems like reward points, cryptocurrency etc.
              - …
  - `bookingContact` BookingContact, required
    - `emailAddress` string: Email address of the booking contact
    - `phoneNumber` PhoneNumber: Properly formatted phone number.
      - `countryCode` integer: two digit country code
      - `countryCodeSource` 'UNSPECIFIED' | 'FROM_NUMBER_WITH_PLUS_SIGN' | 'FROM_NUMBER_WITH_IDD' | 'FROM_NUMBER_WITHOUT_PLUS_SIGN' | 'FROM_DEFAULT_COUNTRY'
      - `extension` string: phone number extension
      - `isoCountryCode` string: ISO alpha-2 code
      - `italianLeadingZero` boolean
      - `nationalNumber` integer
      - `numberOfLeadingZeros` integer
      - `preferredDomesticCarrierCode` string
      - `rawInput` string
      - `type` 'UNKNOWN_TYPE' | 'MOBILE' | 'LANDLINE'
  - `customFieldV3Responses` CustomFieldV3Response[]: Custom field responses for the booking.
    - `fieldId` string, uuid, required: Custom field id
    - `fieldName` string: Name of the custom field
    - `armId` string, uuid, required: Arm id which is applicable
    - `includeLocations` IncludeLocation[]
    - `selectedOptions` CustomFieldSelectedOption[], required: The list of options that are selected by user or auto populated.
      - `name` string, required: Value of the selection
      - `translatedName` string: Translated value of the selection
      - `description` string: Description of the selection
      - `translatedDescription` string: Translated description of the selection
      - `additionalUserInput` string: Additional user input
      - `additionalInfos` string[]: Actual values of the additional infos
      - `additionalInfoConfigs` AdditionalInfo[]: Additional info configs for the selected option
        - union: Additional data need to be sent along with the custom field response.
          - object: Variable defining the additional value to be sent along with custom field response.
            - `type` string, required
            - `name` 'PUBLISHED_FARE' | 'LLF' | 'ADD_COLLECT_AMOUNT' | 'SELECTED_FARE' | 'SPLIT_PAYMENT_FARE', required: Name of the variable.
          - object: Expression consisting of variables and constants which needs to be sent along with custom field response.
            - `type` string, required
            - `formatExpression` string, required: The expression must be of format : `<any_text> ${expression} <any_text>`.The expression can consist of a combination of variables and mathematical operations. Variable names must be same as VariableName Enum. To define mathematical operations, the operation name should follow the format `math.<math_op>(arg1, arg2)`. Both `arg1` and `arg2` can be variables or constants. The supported math operations (math_op) include: `add, mul, div, sub, min, and max`. All keywords, such as `<math_op>, math, and var` must be written in lowercase.
            - `variables` VariableName[]: Reference names of the variables present in the expression.
      - `optionId` string, uuid: Id of the selected option; sent by clients, never returned
  - `ancillaryKeys` string[]: User selected ancillaries associated with this hotel booking.
  - `postPaymentVerificationInfo` union: Payment information sent after the verification of payment method.
    - object: Wrapper for post stripe verification info object.
      - `postStripeVerificationInfo` PostStripeVerificationInfo: Object to indicate successful stripe verification and provide payment information for next steps.
        - `paymentMethodId` string: Stripe's payment method id for which the verification was performed.
      - `paymentKey` string: Serialized key to identify the payment executed on payment gateway that will be used for post payment verification.
    - object: Wrapper for post url based verification info object.
      - `postUrlBasedVerificationInfo` PostUrlBasedVerificationInfo
        - `pnrId` string: Pnr Id, to continue with the booking flow/check the status of the pnr.
      - `paymentKey` string: Serialized key to identify the payment executed on payment gateway that will be used for post payment verification.
    - object: Wrapper for amadeus checkout verification info object
      - `amadeusCheckoutVerificationInfo` AmadeusCheckoutVerificationInfo
        - `paymentActionTokens` AmadeusPaymentActionToken[], required
          - `paymentRequestId` string, required: Initial payment id generated by checkout SDK to initiate payment
          - `actionToken` string, required: Token returned by checkout SDK to create/validate FOP in PSS order
        - `paymentRequestId` string: Initial payment id generated by checkout SDK to initiate payment
        - `actionToken` string: Token returned by checkout SDK to create/validate FOP in PSS order
        - `confirmPayment` boolean: Flag which indicates that the payment confirmation is now required (after 3ds or redirection)
        - `saveCardForFutureUse` boolean: Flag to indicate that card can be saved for future use.
      - `paymentKey` string: Serialized key to identify the payment executed on payment gateway that will be used for post payment verification.
    - object: Wrapper for 3DS2 post verification info object
      - `threeDSecure2PostVerificationInfo` ThreeDSecure2PostVerificationInfo: Result of 3DS2 verification.
        - `results` ThreeDSecure2VerificationResultItem[], required: List of 3DS2 verification results.
          - `cardId` string, required: Card id for which the verification was performed.
          - `sessionId` string, required: session id of the payment service provider.
          - `success` boolean, required: Whether the 3DSecure2 authentication was successful.
      - `paymentKey` string: Serialized key to identify the payment executed on payment gateway that will be used for post payment verification.
    - object: Wrapper for post razorpay verification info object.
      - `postRazorpayVerificationInfo` RazorpayPostVerificationInfo: Object to indicate successful stripe verification and provide payment information for next steps.
        - `paymentId` string, required: Razorpay payment id for which the verification was performed.
        - `orderId` string: Razorpay order id in which the payment was added.
        - `signature` string: Razorpay signature to validate the payment.
      - `paymentKey` string: Serialized key to identify the payment executed on payment gateway that will be used for post payment verification.

## Response `200`

OK

- HotelModifyBookingResponse: Defines the structure of a hotel modify booking response
  - `pnrId` string, required: The unique PNR ID for the modified hotel booking
  - `pnrStatus` 'INITIATED' | 'CANCELLED' | 'CONFIRMED' | 'PENDING' | 'CONTACT_SUPPORT' | 'REQUEST_PENDING' | 'REQUESTED', required: The status of the PNR
  - `externalPnrId` string: The external PNR ID for the modified hotel booking, provided by the third party suppliers
  - `paymentVerificationInfo` union: VerificationInfo required for the payment operation.
    - object: Wrapper for stripe verification Info.
      - `stripeVerificationInfo` StripeVerificationInfo: Verification information required for card stripe verification.
        - `stripeCardTokens` StripeCardTokens: Stripe card tokens used by clients in authorizing newly added cards.
          - `paymentProcessor` string, required: Payment processor involved.
          - `paymentMethodId` string, required: Stripe's payment-method-id for the card.
          - `setupIntentClientSecret` string, required: Stripe client secret for attaching the card to the setup-intent.
          - `connectedAccountId` string: Account Id of the connected account in which above payment-method and setup-intent exist. This is populated only when a connected account is used.
          - `publishableKey` string: Publishable key of the Stripe platform account.
      - `gatewayIdentifier` GatewayIdentifier
        - `gatewayId` string: Gateway Id for which the payment method should be verified.
        - `gatewayType` 'PAYMENT_GATEWAY_UNKNOWN' | 'STRIPE' | 'BREX' | 'RAZORPAY': Gateway Type for of the verification gateway.
      - `paymentKey` string: Serialized key to identify the payment executed on payment gateway that will be used for post payment verification.
    - object: Wrapper for stripe verification Info.
      - `urlVerificationInfo` UrlVerificationInfo: Verification information required for url based payment verification.
        - `ccVerificationUrl` string: Verification url for the payment source.
      - `gatewayIdentifier` GatewayIdentifier
        - `gatewayId` string: Gateway Id for which the payment method should be verified.
        - `gatewayType` 'PAYMENT_GATEWAY_UNKNOWN' | 'STRIPE' | 'BREX' | 'RAZORPAY': Gateway Type for of the verification gateway.
      - `paymentKey` string: Serialized key to identify the payment executed on payment gateway that will be used for post payment verification.
    - object: Wrapper for 3DS2 verification Info.
      - `threeDSecure2VerificationInfo` ThreeDSecure2VerificationInfo: Verification information required for 3DS2 authentication.
        - `verificationInfoList` ThreeDSecure2VerificationInfoItem[], required: List of 3DS2 verification info.
          - `cardId` string, required: Card id for which the verification was performed.
          - `sessionId` string, required: session id of the payment service provider.
          - `redirectUrl` string, required: 3DS2 verification redirect url.
      - `gatewayIdentifier` GatewayIdentifier
        - `gatewayId` string: Gateway Id for which the payment method should be verified.
        - `gatewayType` 'PAYMENT_GATEWAY_UNKNOWN' | 'STRIPE' | 'BREX' | 'RAZORPAY': Gateway Type for of the verification gateway.
      - `paymentKey` string: Serialized key to identify the payment executed on payment gateway that will be used for post payment verification.
    - object: Wrapper for Razorpay verification Info.
      - `razorPayVerificationInfo` RazorpayVerificationInfo: Verification information required when card is tokenized via Razorpay for Indian markets.
        - `paymentProcessor` string, required: Payment processor involved.
        - `paymentAuthUrl` string: URL for authorizing the payment on the card.
      - `gatewayIdentifier` GatewayIdentifier
        - `gatewayId` string: Gateway Id for which the payment method should be verified.
        - `gatewayType` 'PAYMENT_GATEWAY_UNKNOWN' | 'STRIPE' | 'BREX' | 'RAZORPAY': Gateway Type for of the verification gateway.
      - `paymentKey` string: Serialized key to identify the payment executed on payment gateway that will be used for post payment verification.

## Other responses

- `401`: Unauthorized
- `403`: Forbidden
- `404`: The specified resource was not found.

## Changes

- **2026-10-29** `65c527a9a98d`: 2 info
  - added the new `DELAYED_PAYMENT` enum value to the request property `bookingPaymentDetails/bookingTravelerPaymentDetails/items/selectedFormOfPayments/items/selectedPaymentSources/items/amount/otherCoinage/items/coinageCode`
  - added the new `DELAYED_PAYMENT` enum value to the request property `bookingPaymentDetails/bookingTravelerPaymentDetails/items/selectedFormOfPayments/items/selectedPaymentSources/items/rawPaymentSource/oneOf[subschema #2: Credit]/totalFare/otherCoinage/items/coinageCode`
- **2026-10-24** `d9f1c077972f`: 1 info
  - added the new optional request property `customFieldV3Responses/items/selectedOptions/items/optionId`
- **2026-10-08** `858d991810dd`: 3 info
  - added the new optional request property `bookingPaymentDetails/bookingTravelerPaymentDetails/items/selectedFormOfPayments/items/selectedPaymentSources/items/rawPaymentSource/oneOf[subschema #2: Credit]/travelerIndex`
  - added the new optional request property `postPaymentVerificationInfo/oneOf[subschema #3: AmadeusCheckoutVerificationInfoWrapper]/amadeusCheckoutVerificationInfo/saveCardForFutureUse`
  - added the new `SIXT` enum value to the request property `bookingPaymentDetails/bookingTravelerPaymentDetails/items/selectedFormOfPayments/items/selectedPaymentSources/items/rawPaymentSource/oneOf[subschema #2: Credit]/source`
- …earlier changes not shown

[Operation history](https://skmtc.dev/spotnana/apis/hotel-api/changes/v2/hotel/pnrs/:pnrId/modify-book/post.md)

---

[API](https://skmtc.dev/spotnana/apis/hotel-api.md) - [All operations](https://skmtc.dev/spotnana/apis/hotel-api/llms.txt) - [OpenAPI document](https://skmtc.dev/spotnana/apis/hotel-api/revisions/bbaa6de99ce8?raw)
