---
title: "Finalize the given pnr."
method: POST
path: "/v3/trips/{tripId}/pnrs/{pnrId}/finalize"
tags: ["Trip PNRs"]
---

# Finalize the given pnr.

`POST /v3/trips/{tripId}/pnrs/{pnrId}/finalize`

This endpoint changes the metadata of PNR to finalized and triggers supplier actions if required.

## Request body

- FinalizeRequest — Request Object to finalize an existing Manual form or Shell Pnr.
  - `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
  - `finalizeIntent` union — Intent of finalizing Pnr.
    - object — Wrapper for AirPriceOptimizationMetadata.
      - `airPriceOptimizationMetadata` AirPriceOptimizationMetadata — Information related to air price optimization if PNR has been rebooked.
        - `oldTickets` string[] — List of old tickets present in PNR before rebook. For non-ticketed PNRs, tickets will not be present.
        - `newTickets` string[] — List of new tickets in PNR after rebook. For non-ticketed PNRs, tickets will not be present.
        - `oldPnrId` string, required — Old Spotnana PnrId of the PNR before rebook.
        - `newPnrId` string, required — New Spotnana PnrId of the PNR after rebook. If the same PNR has been modified during rebook, oldPnrId and newPnrId will be same. If a new PNR has been booked during rebook, oldPnrId and newPnrId will be different.
        - `oldPrice` Money, required — 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.
            - `coinageCode` 'PAYMENT_METHOD_UNKNOWN' | 'CREDIT_CARD' | 'BREX_POINTS' | 'CASH' | 'QANTAS_POINTS' | 'VENDOR_PROGRAM_PAYMENT' | 'DELAYED_INVOICING' | 'FLIGHT_CREDITS' | 'QANTAS_TRAVEL_FUND' | 'CUSTOM_VIRTUAL_PAYMENT' | 'FLIGHT_PASS' | 'MISCELLANEOUS_CREDIT_ORDER' | 'NO_PREPAYMENT' — Payment method
            - `amount` number, double
            - `conversionRate` number, double — 1 coin in this system equals to how many currency value
            - `preferredCurrencyConversionRate` number, double — 1 coin in this system equals to how many currency value
            - `otherCoinageMetadata` FlightPassPaymentMetadataWrapper — Wrapper for Flight Pass payment metadata.
              - …
        - `newPrice` Money, required — 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.
            - `coinageCode` 'PAYMENT_METHOD_UNKNOWN' | 'CREDIT_CARD' | 'BREX_POINTS' | 'CASH' | 'QANTAS_POINTS' | 'VENDOR_PROGRAM_PAYMENT' | 'DELAYED_INVOICING' | 'FLIGHT_CREDITS' | 'QANTAS_TRAVEL_FUND' | 'CUSTOM_VIRTUAL_PAYMENT' | 'FLIGHT_PASS' | 'MISCELLANEOUS_CREDIT_ORDER' | 'NO_PREPAYMENT' — Payment method
            - `amount` number, double
            - `conversionRate` number, double — 1 coin in this system equals to how many currency value
            - `preferredCurrencyConversionRate` number, double — 1 coin in this system equals to how many currency value
            - `otherCoinageMetadata` FlightPassPaymentMetadataWrapper — Wrapper for Flight Pass payment metadata.
              - …
        - `priceDrop` Money, required — 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.
            - `coinageCode` 'PAYMENT_METHOD_UNKNOWN' | 'CREDIT_CARD' | 'BREX_POINTS' | 'CASH' | 'QANTAS_POINTS' | 'VENDOR_PROGRAM_PAYMENT' | 'DELAYED_INVOICING' | 'FLIGHT_CREDITS' | 'QANTAS_TRAVEL_FUND' | 'CUSTOM_VIRTUAL_PAYMENT' | 'FLIGHT_PASS' | 'MISCELLANEOUS_CREDIT_ORDER' | 'NO_PREPAYMENT' — Payment method
            - `amount` number, double
            - `conversionRate` number, double — 1 coin in this system equals to how many currency value
            - `preferredCurrencyConversionRate` number, double — 1 coin in this system equals to how many currency value
            - `otherCoinageMetadata` FlightPassPaymentMetadataWrapper — Wrapper for Flight Pass payment metadata.
              - …
        - `penaltyPrice` 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.
            - `coinageCode` 'PAYMENT_METHOD_UNKNOWN' | 'CREDIT_CARD' | 'BREX_POINTS' | 'CASH' | 'QANTAS_POINTS' | 'VENDOR_PROGRAM_PAYMENT' | 'DELAYED_INVOICING' | 'FLIGHT_CREDITS' | 'QANTAS_TRAVEL_FUND' | 'CUSTOM_VIRTUAL_PAYMENT' | 'FLIGHT_PASS' | 'MISCELLANEOUS_CREDIT_ORDER' | 'NO_PREPAYMENT' — Payment method
            - `amount` number, double
            - `conversionRate` number, double — 1 coin in this system equals to how many currency value
            - `preferredCurrencyConversionRate` number, double — 1 coin in this system equals to how many currency value
            - `otherCoinageMetadata` FlightPassPaymentMetadataWrapper — Wrapper for Flight Pass payment metadata.
              - …
    - object — Wrapper object for ManualVerificationIntent.
      - `manualVerificationIntent` ManualVerificationIntent — Represents the intent for manual verification with a remark and a list of reasons.
        - `remark` string — Additional remarks or notes about the verification.
        - `reasons` ManualVerificationReason[] — List of reasons for manual verification.
    - object — Wrapper for QcFinalization.
      - `qcFinalizeData` QcFinalizeData — Request Object to indicate that all qc tasks have been resolved and current pnr is qc compliant
        - `pnrId` string, required
    - object — Wrapper for PriceOptimizationMetadata.
      - `priceOptimization` PriceOptimizationMetadata — Unified price optimization metadata for all travel types. Carried on FinalizeIntent and stored on PnrMetadata after finalize.
        - `oldPnrId` string, required — Spotnana PNR ID before reshop.
        - `newPnrId` string — Spotnana PNR ID after reshop. Same as oldPnrId for in-place modify; different for cross-PNR rebook. May not exist on failure.
        - `netSavedAmount` 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.
            - `coinageCode` 'PAYMENT_METHOD_UNKNOWN' | 'CREDIT_CARD' | 'BREX_POINTS' | 'CASH' | 'QANTAS_POINTS' | 'VENDOR_PROGRAM_PAYMENT' | 'DELAYED_INVOICING' | 'FLIGHT_CREDITS' | 'QANTAS_TRAVEL_FUND' | 'CUSTOM_VIRTUAL_PAYMENT' | 'FLIGHT_PASS' | 'MISCELLANEOUS_CREDIT_ORDER' | 'NO_PREPAYMENT' — Payment method
            - `amount` number, double
            - `conversionRate` number, double — 1 coin in this system equals to how many currency value
            - `preferredCurrencyConversionRate` number, double — 1 coin in this system equals to how many currency value
            - `otherCoinageMetadata` FlightPassPaymentMetadataWrapper — Wrapper for Flight Pass payment metadata.
              - …
        - `result` PriceOptimizationResult, required — Result of a price optimization reshop attempt.
          - `status` 'SUCCESS' | 'FAILURE' | 'NO_CHANGE', required — Outcome status of a price optimization reshop attempt.
          - `failureMetadata` PriceOptimizationFailureMetadata — Details about a failed price optimization attempt.
            - `reason` 'OLD_FARE_CANCEL_FAILED' | 'NEW_FARE_BOOK_FAILED' | 'OLD_PNR_CANCEL_FAILED' | 'NEW_PNR_BOOKING_FAILED' | 'NEW_TICKET_ISSUE_FAILED' | 'OLD_TICKET_VOID_FAILED' | 'SUPPLIER_ERROR', required — Failure reason for a price optimization reshop attempt.
            - `message` string — Human-readable detail about the failure.
        - `travelType` union — Travel-type-specific price optimization metadata.
          - object — Wrapper for air-specific price optimization metadata.
            - `air` AirPriceOptMetadata — Air-specific price optimization metadata.
              - …
          - object — Wrapper for hotel-specific price optimization metadata.
            - `hotel` HotelPriceOptMetadata — Hotel-specific price optimization metadata.
              - …
  - `finalizeMetadata` FinalizeMetadata — Metadata information related to finalize request
    - `isMandatoryTicketing` boolean — True for forceful ticketing of PNR.
    - `mandatorySkipTicketing` boolean — Override other params and skip ticketing.
    - `suspendReason` 'AIR_PRICE_OPTIMIZATION' | 'EXCHANGE' | 'GDS_EXCHANGE' | 'PRICE_OPTIMIZATION' — Reason for suspending the pnr
    - `taskId` string — Task Id which needs to be mark completed before finalizing the PNR.
  - `customFieldV3UserResponses` CustomFieldV3Response[] — Custom field user 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.

## Response `200`

OK

## Other responses

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

---

[API](https://skmtc.net/spotnana/apis/trip-api.md) · [All operations](https://skmtc.net/spotnana/apis/trip-api/llms.txt) · [OpenAPI document](https://skmtc-service-staging.skmtc.workers.dev/v1/apis/spotnana/trip-api/revisions/ccddd94cdc01/schema)
