> For clean Markdown of any page, append .md to the page URL.
> For a complete documentation index, see https://developer.nibtravelinsurance.com/llms.txt.
> For AI client integration (Claude Code, Cursor, etc.), connect to the MCP server at https://developer.nibtravelinsurance.com/_mcp/server.

# Quote Purchase

POST https://api-staging.nibtravelinsurance.com/quotes/v2/{brandCode}/purchase
Content-Type: application/json | Minimum Payload

Send final quote request for purchase and receive confirmation of policy purchase.

Reference: https://developer.nibtravelinsurance.com/reference/quotes-api/purchase/quote-purchase

## Authentication

- `Authorization` header (bearer token, required) — Bearer authentication of the form `Bearer <token>`, where token is your auth token.

## Request

### Path parameters

- `brandCode` (enum, required) — A supported NIB Travel brand code, such as “wn”
  - Allowed values: `nibau`, `nibnz`, `tidau`, `wn`

### Body (application/json | Minimum Payload)

This endpoint expects an object.

- `quote` (QuoteMinimum, optional)
- `cardToken` (CardTokenInput, optional) — Tokenised credit card information – Unredacted credit cards should not be passed through the Quote API.
- `validation` (Validation, optional)

## Response

### 200

Success

- `quote` (Quote, optional)
- `cardToken` (CardTokenInput, optional) — Tokenised credit card information – Unredacted credit cards should not be passed through the Quote API.
- `threeDSRequestInfo` (ThreeDsRequestInfo, optional)
- `paymentIds` (string, optional)
- `threeDSResponseInfo` (ThreeDsResponseInfo, optional)
- `paymentResult` (string, optional)
- `paymentMethod` (string, optional)
- `validation` (Validation, optional)

## Types

### QuoteMinimum

- `isPurchaseInitiated` (boolean, optional, default: false)
- `stage` (string, optional)
- `input` (QuoteInputMinimum, optional)
- `evaluatedPartner` (PartnerSummary, optional)
- `clientInfo` (ClientInfo, optional)
- `customerUserId` (long, optional, default: 0)
- `brandCode` (string, optional)
- `validation` (Validation, optional)

### CardTokenInput

Tokenised credit card information – Unredacted credit cards should not be passed through the Quote API.

- `token` (string, optional)
- `source` (string, optional)
- `validation` (Validation, optional)

### Validation

- `isValid` (boolean, optional, default: false)
- `errors` (list of Notification, optional)

### Quote

- `id` (string, optional)
- `isNew` (boolean, optional, default: false)
- `isPurchased` (boolean, optional, default: false)
- `hasConfigChanged` (boolean, optional, default: false)
- `isPurchaseInitiated` (boolean, optional, default: false)
- `clientSessionId` (string, optional)
- `policyNumber` (string, optional) — The policy number is generated when the policy purchase has completed.
- `stage` (enum, optional) — Represents the stage the quote is up to. This can be used for tracking quotes across the different stages in an embedded purchase path.
  - Allowed values: `INITIAL`, `BASEQUOTE`, `OPTIONS`, `DETAILS`, `MEDICAL_SCREENING`, `PAYMENT`
- `evaluatedAt` (string, optional)
- `input` (QuoteInput, optional)
- `priceResults` (list of QuotePriceResult, optional)
- `prices` (list of QuotePriceSummary, optional) — Returns an array of prices with available plans based on the parameters quoted.
- `clientInfo` (ClientInfo, optional)
- `audit` (Audit, optional)
- `customerUserId` (long, optional, default: 0)
- `brandCode` (string, optional)
- `validation` (Validation, optional)

### ThreeDsRequestInfo

- `userAgent` (string, optional)
- `acceptHeader` (string, optional)
- `acceptLanguage` (string, optional)
- `origin` (string, optional)
- `threeDSStatus` (string, optional)
- `threeDSRequest` (string, optional)
- `browserInfo` (BrowserInfo, optional)

### ThreeDsResponseInfo

- `threeDSStatus` (string, optional)
- `threeDSRequestPattern` (string, optional)
- `threeDSResponse` (string, optional)

### QuoteInputMinimum

- `policyHolders` (list of PolicyHolderInputMinimum, optional) — Full policy holder information including contact details. (E-mail address, mobile number) It also includes TravelClear options if applicable.
- `regulatoryDeclarations` (list of RegulatoryDeclarationInput, optional)
- `validation` (Validation, optional)

### PartnerSummary

- `id` (long, optional, default: 0)
- `name` (string, optional)
- `code` (string, optional)
- `statusCode` (string, optional)
- `isOnAccountPurchaseEnabled` (boolean, optional, default: false)

### ClientInfo

- `ipAddress` (string, optional)
- `userAgent` (string, optional)
- `referer` (string, optional)

### Notification

- `code` (string, optional)
- `message` (string, optional)
- `tokens` (map from string to string, optional)
- `property` (string, optional)
- `value` (string, optional)
- `title` (string, optional)
- `detail` (string, optional)

### QuoteInput

- `cultureCode` (string, optional)
- `customerInterfaceId` (long, optional, default: 0)
- `quoteType` (enum, optional)
  - Allowed values: `SINGLETRIP`, `MULTITRIP`
- `overrideDuplicateCheck` (boolean, optional, default: false)
- `skipPersistence` (boolean, optional, default: false)
- `planId` (long, optional, default: 0)
- `quoteReferencePlanId` (long, optional, default: 0)
- `homeAddress` (AddressInput, optional) — Represents the home address of the primary policy holder who is purchasing the policy.
- `alternateHomeAddress` (AddressInput, optional)
- `destinationCountryCodes` (list of string, optional) — A list of destination country codes or regions, the format is an extended version of ISO-3166 Alpha 3 to include coverage for regions as well as country lists.
- `departureDate` (string, optional) — Departure date for the trip.
- `returnDate` (string, optional) — Return date for the trip.
- `coverEndDate` (string, optional)
- `campaignCode` (string, optional) — Can pass in specific discount/campaign codes if a specific discount code is required. This is to allow specific published discount codes are passed through the API.
- `partnerCode` (string, optional)
- `tripValue` (double, optional) — Optional rating factor used in medical screening, which provides the total value of the trip purchased.
- `footprintsDonation` (FootprintsDonationInput, optional)
- `basicOptions` (list of BasicOptionInput, optional)
- `adventureActivitiesOption` (AdventureActivitiesOptionInput, optional) — aaaa
- `specifiedItemOption` (SpecifiedItemOptionInput, optional)
- `cancellationOption` (CancellationOptionInput, optional)
- `policyHolders` (list of PolicyHolderInput, optional) — Full policy holder information including contact details. (E-mail address, mobile number) It also includes TravelClear options if applicable.
- `regulatoryDeclarations` (list of RegulatoryDeclarationInput, optional)
- `externalIdentifiers` (ExternalIdentifiers, optional)
- `validation` (Validation, optional)

### QuotePriceResult

- `planId` (long, optional, default: 0)
- `standardExcess` (double, optional)
- `campaignId` (long, optional, default: 0)
- `campaignDiscountPercentage` (double, optional)
- `basePriceResult` (BasePriceResult, optional)
- `optionPriceResults` (list of OptionPriceResult, optional)

### QuotePriceSummary

- `planId` (long, optional, default: 0)
- `totalPrice` (double, optional)
- `standardExcess` (double, optional)
- `campaignDiscountPercentage` (double, optional)
- `campaignDiscount` (double, optional)
- `partnerDiscount` (double, optional)
- `basePrice` (BasePriceSummary, optional)
- `specifiedItemOptionPrice` (OptionPriceSummary, optional)
- `adventureActivitiesOptionPrice` (OptionPriceSummary, optional)
- `basicOptionPrices` (list of OptionPriceSummary, optional)
- `tripCancellationPrice` (OptionPriceSummary, optional)

### Audit

- `createdAt` (string, optional)
- `updatedAt` (string, optional)
- `createdByUsername` (string, optional)
- `updatedByUsername` (string, optional)
- `createdByUserId` (long, optional, default: 0)
- `updatedByUserId` (long, optional, default: 0)

### BrowserInfo

- `color` (string, optional)
- `height` (string, optional)
- `width` (string, optional)
- `tzOffset` (string, optional)
- `javaEnabled` (string, optional)

### PolicyHolderInputMinimum

- `dateOfBirth` (string, optional)
- `firstName` (string, optional)
- `lastName` (string, optional)
- `phoneNumber` (string, optional)
- `emailAddress` (string, optional)
- `travelClearOption` (TravelClearOptionInput, optional)
- `residentIdentifier` (string, optional)
- `validation` (Validation, optional)

### RegulatoryDeclarationInput

- `hasAgreed` (boolean, optional, default: false) — Parameter indicating that the customer has agreed to the regulatory declarations highlighted in the purchase path.
- `termConditionId` (long, optional, default: 0)

### AddressInput

- `addressLine1` (string, optional)
- `addressLine2` (string, optional)
- `addressLine3` (string, optional)
- `addressLine4` (string, optional)
- `provinceCode` (string, optional)
- `countryCode` (string, optional)
- `postalCode` (string, optional)
- `validation` (Validation, optional)

### FootprintsDonationInput

- `donationAmount` (double, optional)
- `donationProjectId` (long, optional, default: 0)
- `donationAccountCode` (string, optional)
- `validation` (Validation, optional)

### BasicOptionInput

- `optionType` (string, optional)
- `isOptedIn` (boolean, optional, default: false)
- `optedInTotalValue` (double, optional)
- `optedInOffsetValue` (double, optional)
- `validation` (Validation, optional)

### AdventureActivitiesOptionInput

- `optionType` (string, optional)
- `adventureActivityIds` (list of long, optional)
- `validation` (Validation, optional)

### SpecifiedItemOptionInput

- `optionType` (string, optional)
- `specifiedItems` (list of SpecifiedItemInput, optional)
- `validation` (Validation, optional)

### CancellationOptionInput

- `optionType` (string, optional)
- `cancellationCoverLimit` (double, optional)
- `validation` (Validation, optional)

### PolicyHolderInput

- `guid` (string, optional)
- `isDependent` (boolean, optional, default: false)
- `age` (integer, optional)
- `dateOfBirth` (string, optional)
- `isPrimary` (boolean, optional, default: false)
- `firstName` (string, optional)
- `lastName` (string, optional)
- `phoneNumber` (string, optional)
- `emailAddress` (string, optional)
- `travelClearOption` (TravelClearOptionInput, optional)
- `residentIdentifier` (string, optional)
- `validation` (Validation, optional)

### ExternalIdentifiers

- `externalMembershipProviderId` (long, optional, default: 0)
- `externalMembershipNumber` (string, optional) — External membership number (externalIdentifiers.externalMembershipNumber) Can be used to populate external membership numbers.
- `bookingReference` (string, optional)
- `marketingSource` (string, optional)

### BasePriceResult

- `planId` (long, optional, default: 0)
- `netListPrice` (double, optional)
- `saleListPrice` (double, optional)
- `taxComponents` (list of TaxComponentResult, optional)
- `saleListCommission` (double, optional)
- `netCampaignDiscount` (double, optional)
- `saleCampaignDiscount` (double, optional)
- `salePartnerDiscount` (double, optional)
- `priceDetails` (list of BasePriceResultDetail, optional)

### OptionPriceResult

- `optionId` (long, optional, default: 0)
- `optionTypeCode` (string, optional)
- `policyHolderGuid` (string, optional)
- `netListPrice` (double, optional)
- `netListPriceId` (long, optional, default: 0)
- `saleListPrice` (double, optional)
- `saleListPriceId` (long, optional, default: 0)
- `optionCoverageAmount` (double, optional)
- `minNetListPrice` (double, optional)
- `maxNetListPrice` (double, optional)
- `isOptionExplicit` (boolean, optional, default: false)
- `isDefault` (boolean, optional, default: false)
- `maxItemValuePerPolicy` (double, optional)
- `minSaleListPrice` (double, optional)
- `maxSaleListPrice` (double, optional)
- `taxComponents` (list of TaxComponentResult, optional)
- `saleListCommission` (double, optional)
- `netCampaignDiscount` (double, optional)
- `saleCampaignDiscount` (double, optional)
- `salePartnerDiscount` (double, optional)
- `priceDetails` (list of OptionPriceResultDetail, optional)

### BasePriceSummary

- `price` (double, optional)
- `campaignDiscount` (double, optional)
- `partnerDiscount` (double, optional)
- `taxComponents` (list of TaxComponentSummary, optional)

### OptionPriceSummary

- `optionId` (long, optional, default: 0)
- `optionType` (string, optional)
- `policyHolderGuid` (string, optional)
- `price` (double, optional)
- `campaignDiscount` (double, optional)
- `partnerDiscount` (double, optional)
- `items` (list of OptionItemPriceSummary, optional)
- `displayOrder` (integer, optional)

### TravelClearOptionInput

- `optionType` (string, optional)
- `isOptedInForScreening` (boolean, optional, default: false)
- `isOptedInForCover` (boolean, optional, default: false)
- `validation` (Validation, optional)

### SpecifiedItemInput

- `guid` (string, optional)
- `name` (string, optional)
- `itemValue` (double, optional)
- `itemTypeId` (long, optional, default: 0)
- `itemTypeCode` (string, optional)
- `validation` (Validation, optional)

### TaxComponentResult

- `taxName` (string, optional)
- `taxRatePercentage` (double, optional)
- `taxAmount` (double, optional)

### BasePriceResultDetail

- `age` (integer, optional)
- `ageRangeId` (long, optional, default: 0)
- `netListPrice` (double, optional)
- `netListPriceId` (long, optional, default: 0)
- `saleListPrice` (double, optional)
- `saleListPriceId` (long, optional, default: 0)
- `saleListCommission` (double, optional)
- `netCampaignDiscount` (double, optional)
- `saleCampaignDiscount` (double, optional)
- `salePartnerDiscount` (double, optional)

### OptionPriceResultDetail

- `optionSubTypeCode` (string, optional)
- `itemGuid` (string, optional)
- `netListPrice` (double, optional)
- `netListPriceId` (long, optional, default: 0)
- `saleListPrice` (double, optional)
- `saleListPriceId` (long, optional, default: 0)
- `saleListCommission` (double, optional)
- `netCampaignDiscount` (double, optional)
- `saleCampaignDiscount` (double, optional)
- `salePartnerDiscount` (double, optional)
- `saleListPricePercentage` (double, optional)
- `minItemValue` (double, optional)
- `maxItemValuePerUnit` (double, optional)
- `specifiedItemTypeId` (long, optional, default: 0)
- `specifiedItemTypeCode` (string, optional)
- `specifiedItemTypeName` (string, optional)
- `isDefault` (boolean, optional, default: false)

### TaxComponentSummary

- `taxName` (string, optional)
- `taxRatePercentage` (double, optional)
- `taxAmount` (double, optional)

### OptionItemPriceSummary

- `guid` (string, optional)
- `price` (double, optional)
- `campaignDiscount` (double, optional)
- `partnerDiscount` (double, optional)

## Examples

**Request**

```json
{}
```

**Response**

```json
{
  "quote": {
    "id": "id",
    "isNew": true,
    "isPurchased": true,
    "hasConfigChanged": true,
    "isPurchaseInitiated": true,
    "clientSessionId": "clientSessionId",
    "policyNumber": "policyNumber",
    "stage": "INITIAL",
    "evaluatedAt": "evaluatedAt",
    "input": {
      "cultureCode": "cultureCode",
      "customerInterfaceId": 8,
      "quoteType": "SINGLETRIP",
      "overrideDuplicateCheck": true,
      "skipPersistence": true,
      "planId": 1000000,
      "quoteReferencePlanId": 1000000,
      "destinationCountryCodes": [
        "destinationCountryCodes"
      ],
      "departureDate": "2024-11-30",
      "returnDate": "2024-11-30",
      "coverEndDate": "2024-11-30",
      "campaignCode": "campaignCode",
      "partnerCode": "partnerCode",
      "tripValue": 1.1,
      "basicOptions": [
        {}
      ],
      "policyHolders": [
        {
          "dateOfBirth": "2024-11-30"
        }
      ],
      "regulatoryDeclarations": [
        {}
      ]
    },
    "priceResults": [
      {}
    ],
    "prices": [
      {}
    ],
    "clientInfo": {
      "ipAddress": "ipAddress",
      "userAgent": "userAgent",
      "referer": "referer"
    },
    "audit": {
      "createdAt": "createdAt",
      "updatedAt": "updatedAt",
      "createdByUsername": "createdByUsername",
      "updatedByUsername": "updatedByUsername",
      "createdByUserId": 1000000,
      "updatedByUserId": 1000000
    },
    "customerUserId": 1000000,
    "brandCode": "brandCode",
    "validation": {
      "isValid": true,
      "errors": [
        {}
      ]
    }
  },
  "cardToken": {
    "token": "token",
    "source": "source",
    "validation": {
      "isValid": true,
      "errors": [
        {}
      ]
    }
  },
  "threeDSRequestInfo": {
    "userAgent": "userAgent",
    "acceptHeader": "acceptHeader",
    "acceptLanguage": "acceptLanguage",
    "origin": "origin",
    "threeDSStatus": "threeDSStatus",
    "threeDSRequest": "threeDSRequest",
    "browserInfo": {
      "color": "color",
      "height": "height",
      "width": "width",
      "tzOffset": "tzOffset",
      "javaEnabled": "javaEnabled"
    }
  },
  "paymentIds": "paymentIds",
  "threeDSResponseInfo": {
    "threeDSStatus": "threeDSStatus",
    "threeDSRequestPattern": "threeDSRequestPattern",
    "threeDSResponse": "threeDSResponse"
  },
  "paymentResult": "paymentResult",
  "paymentMethod": "paymentMethod",
  "validation": {
    "isValid": true,
    "errors": [
      {}
    ]
  }
}
```

**SDK Code**

```python
import requests

url = "https://api-staging.nibtravelinsurance.com/quotes/v2/nibau/purchase"

payload = "{}"
headers = {
    "Authorization": "Bearer <token>",
    "Content-Type": "application/json | Minimum Payload"
}

response = requests.post(url, data=payload, headers=headers)

print(response.json())
```

```javascript
const url = 'https://api-staging.nibtravelinsurance.com/quotes/v2/nibau/purchase';
const options = {
  method: 'POST',
  headers: {
    Authorization: 'Bearer <token>',
    'Content-Type': 'application/json | Minimum Payload'
  },
  body: '{}'
};

try {
  const response = await fetch(url, options);
  const data = await response.json();
  console.log(data);
} catch (error) {
  console.error(error);
}
```

```go
package main

import (
	"fmt"
	"strings"
	"net/http"
	"io"
)

func main() {

	url := "https://api-staging.nibtravelinsurance.com/quotes/v2/nibau/purchase"

	payload := strings.NewReader("{}")

	req, _ := http.NewRequest("POST", url, payload)

	req.Header.Add("Authorization", "Bearer <token>")
	req.Header.Add("Content-Type", "application/json | Minimum Payload")

	res, _ := http.DefaultClient.Do(req)

	defer res.Body.Close()
	body, _ := io.ReadAll(res.Body)

	fmt.Println(res)
	fmt.Println(string(body))

}
```

```ruby
require 'uri'
require 'net/http'

url = URI("https://api-staging.nibtravelinsurance.com/quotes/v2/nibau/purchase")

http = Net::HTTP.new(url.host, url.port)
http.use_ssl = true

request = Net::HTTP::Post.new(url)
request["Authorization"] = 'Bearer <token>'
request["Content-Type"] = 'application/json | Minimum Payload'
request.body = "{}"

response = http.request(request)
puts response.read_body
```

```java
import com.mashape.unirest.http.HttpResponse;
import com.mashape.unirest.http.Unirest;

HttpResponse<String> response = Unirest.post("https://api-staging.nibtravelinsurance.com/quotes/v2/nibau/purchase")
  .header("Authorization", "Bearer <token>")
  .header("Content-Type", "application/json | Minimum Payload")
  .body("{}")
  .asString();
```

```php
<?php
require_once('vendor/autoload.php');

$client = new \GuzzleHttp\Client();

$response = $client->request('POST', 'https://api-staging.nibtravelinsurance.com/quotes/v2/nibau/purchase', [
  'body' => '{}',
  'headers' => [
    'Authorization' => 'Bearer <token>',
    'Content-Type' => 'application/json | Minimum Payload',
  ],
]);

echo $response->getBody();
```

```csharp
using RestSharp;

var client = new RestClient("https://api-staging.nibtravelinsurance.com/quotes/v2/nibau/purchase");
var request = new RestRequest(Method.POST);
request.AddHeader("Authorization", "Bearer <token>");
request.AddHeader("Content-Type", "application/json | Minimum Payload");
request.AddParameter("application/json | Minimum Payload", "{}", ParameterType.RequestBody);
IRestResponse response = client.Execute(request);
```

```swift
import Foundation

let headers = [
  "Authorization": "Bearer <token>",
  "Content-Type": "application/json | Minimum Payload"
]

let postData = NSData(data: "{}".data(using: String.Encoding.utf8)!)

let request = NSMutableURLRequest(url: NSURL(string: "https://api-staging.nibtravelinsurance.com/quotes/v2/nibau/purchase")! as URL,
                                        cachePolicy: .useProtocolCachePolicy,
                                    timeoutInterval: 10.0)
request.httpMethod = "POST"
request.allHTTPHeaderFields = headers
request.httpBody = postData as Data

let session = URLSession.shared
let dataTask = session.dataTask(with: request as URLRequest, completionHandler: { (data, response, error) -> Void in
  if (error != nil) {
    print(error as Any)
  } else {
    let httpResponse = response as? HTTPURLResponse
    print(httpResponse)
  }
})

dataTask.resume()
```