> This page is for API Reference.

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

# Create Reservation

POST https://api.npretail.app/{tenant}/{environment}/{company}/ticket/reservation
Content-Type: application/json

Initiates a new reservation for tickets.  Clients use this endpoint to provisionally hold tickets by specifying the desired items,  quantities, and any specific admissions or schedules.  Returns a token representing the reservation, along with its expiration time,  allowing clients to manage or confirm the reservation before it expires.

Reference: https://docs.navipartner.com/apis/api-reference/ticketing/service-reservations/create-reservation

## Authentication

- `x-np-api-key` header (required) — API Key authentication via header

## Request

### Path parameters

- `tenant` (string, required) — Your Entra Tenant ID. [More details.](/paths#1-tenant)
- `environment` (string, required) — Your Business Central Environment. [More details.](/paths#2-environment)
- `company` (string, required) — Your Business Central Company. [More details.](/paths#3-company)

### Query parameters

- `includeTicketNumbers` (boolean, optional) — Indicates whether ticket numbers should be included in reservation responses. Tickets are normally included only when the reservation is confirmed. If `true`, ticket numbers are returned regardless of reservation status. When a reservation is updated, any previously disclosed ticket numbers are removed. This affects ticket numbers only; `pinCode` and `ticketHolder` are returned only once the reservation is confirmed.

### Body (application/json)

This endpoint expects a CreateReservationRequest.

- `reserve` (list of CreateReservationItemRequest, required)

## Response

### 200

Provides the details of the newly created reservation, including the reservation token, expiration time, current status, and the list of reserved items with their associated ticket details.

- `token` (string, required) — A unique token that identifies a ticket reservation
- `reservationStatus` (enum, required) — The status of the reservation
  - Allowed values: `registered`, `confirmed`, `alreadyConfirmed`, `canceled`, `expired`, `reserved`, `optional`
- `expiresAt` (datetime, optional) — The date and time when the token expires and reservation is no longer valid
- `reservations` (list of ReservationItemDetails, optional)

## Types

### CreateReservationItemRequest

Represents an individual ticket item within a reservation request. Includes the itemNumber, the desired quantity of tickets, and optional content detailing specific admissions or schedules associated with the ticket.

- `itemNumber` (string, required) — An item or product number defined in the ticketing system
- `quantity` (integer, required) — The number of tickets to reserved
- `ticketHolderLanguage` (string, optional) — The language code the ticket holder wants to receive notifications in.
- `notificationAddress` (string, optional) — The email address or mobile phone number to send tickets and notifications to
- `memberNumber` (string, optional) — The unique identifier of a member
- `content` (list of TicketContentRequest, optional)

### ReservationItemDetails

Contains detailed information about a specific item in a reservation. Includes the itemNumber, quantity reserved, associated ticket details, and a list of content items specifying admissions or other components included with the ticket.

- `itemNumber` (string, required) — An item or product number defined in the ticketing system
- `quantity` (integer, required) — The number of tickets to reserved
- `lineId` (UUID, required) — Stable identifier for this reservation line. Store and echo it back when reconciling sales documents or tickets with the originating reservation.
- `ticket` (ReservationTicketDetails, required) — A ticket within a reservation: validity period, issue date, blocked state and pricing. `ticketNumbers`, `pinCode` and `ticketHolder` are returned once the reservation is confirmed. Until then the tickets are provisional — updating the reservation re-issues them — and they cannot be used at admission. Once confirmed, the reservation can no longer be updated, so the values are final. To get the provisional ticket numbers before confirmation, pass `includeTicketNumbers=true`. `pinCode` and `ticketHolder` are still held back.
- `content` (list of TicketContentDetails, required)

### TicketContentRequest

- `admissionCode` (string, required) — A unique code that identifies a specific admission.
- `scheduleNumber` (integer, optional) — The ID of a specific time slot for a specific admission

### ReservationTicketDetails

A ticket within a reservation: validity period, issue date, blocked state and pricing. `ticketNumbers`, `pinCode` and `ticketHolder` are returned once the reservation is confirmed. Until then the tickets are provisional — updating the reservation re-issues them — and they cannot be used at admission. Once confirmed, the reservation can no longer be updated, so the values are final. To get the provisional ticket numbers before confirmation, pass `includeTicketNumbers=true`. `pinCode` and `ticketHolder` are still held back.

- `ticketKind` (enum, required) — The kind of ticket, either individual or group admission.
  - Allowed values: `individualAdmission`, `groupAdmission`
- `validFrom` (datetime, required)
- `validUntil` (datetime, required)
- `issuedAt` (datetime, required) — The date and time when the ticket was issued
- `blocked` (boolean, required)
- `unitPrice` (double, required)
- `unitPriceInclVat` (double, required)
- `currencyCode` (string, required)
- `ticketNumbers` (list of TicketNumbers, optional)
- `pinCode` (string, optional) — A pin code for the ticket, used to authorize rescheduling or revoking a confirmed ticket. Returned only for confirmed reservations. The format is configured per tenant, so do not validate it against a fixed length or pattern.
- `ticketHolder` (string, optional) — The name of the person holding the ticket(s)
- `admissionEntitlements` (list of AdmissionEntitlement, optional)

### TicketContentDetails

Provides details about the admissions or content associated with a reserved ticket item. Contains admissionDetails that specify the particular admissions, schedules, and any relevant information for each component of the ticket.

- `admissionDetails` (AdmissionDetails, required) — Details of the admission for a specific reservation
- `scheduleDetails` (ScheduleDetails, required) — Details of the schedule for a specific reservation or ticket.

### TicketNumbers

A list of ticket numbers.

- `ticketId` (UUID, required) — The unique identifier of a ticket
- `ticketNumber` (string, required) — The unique identifier of a ticket

### AdmissionEntitlement

Included for Group Tickets, the admission entitlement objects defines the number of admissions included for the group ticket.

- `code` (string, required) — A unique code that identifies a specific admission.
- `maxGroupSize` (integer, required) — The maximum group size for a group ticket. Calculated as ordered quantity multiplied by a factor defined per admission.

### AdmissionDetails

Details of the admission for a specific reservation

- `capacityControl` (enum, required) — Indicates the type of capacity control that applies. `none` means capacity is not tracked. `sales` means capacity is decremented by ticket sales. `admitted` means capacity is decremented by admitted entries. `full` means capacity tracks both admissions and departures.
  - Allowed values: `none`, `sales`, `admitted`, `full`
- `code` (string, required) — A unique code that identifies a specific admission.
- `default` (boolean, required) — Indicates if this admission is the default admission when there are multiple admission defined.
- `description` (Descriptions, required) — Descriptive information about a ticket item. The source of these fields are configurable.
- `included` (enum, required) — Indicates if the admission is mandatory or optional. `mandatory` implies that the admission can not be deselected. `optionalNotSelected` implies that you must opt-in to include the admission, while `optionalAndSelected` implies that the admission is optional and selected and you can opt-out. You opt-in or opt-out by including or excluding the admission in the reservation request.
  - Allowed values: `mandatory`, `optionalNotSelected`, `optionalAndSelected`
- `scheduleDetails` (ScheduleDetails, optional) — Details of the schedule for a specific reservation or ticket.

### ScheduleDetails

Details of the schedule for a specific reservation or ticket.

- `code` (string, required)
- `duration` (integer, required)
- `endDate` (date, required)
- `endTime` (string, required)
- `externalNumber` (integer, required) — The ID of a specific time slot for a specific admission
- `startDate` (date, required)
- `startTime` (string, required)
- `arrivalFromTime` (string, optional) — The earliest time a customer can arrive for the time slot.
- `arrivalUntilTime` (string, optional) — The latest time a customer can arrive for the time slot.
- `description` (string, optional)
- `type` (enum, optional) — The types of events that can occur for a ticket.
  - Allowed values: `initialEntry`, `reservation`, `admitted`, `departed`, `consumed`, `canceledAdmission`, `payment`, `prePaid`, `postPaid`, `canceledReservation`, `requested`, `unknown`

### Descriptions

Descriptive information about a ticket item. The source of these fields are configurable.

- `title` (string, optional)
- `subtitle` (string, optional)
- `name` (string, optional)
- `description` (string, optional)
- `fullDescription` (string, optional)

## Examples

### Simple Reservation

A basic reservation example where a customer reserves two tickets for a specific item, including details for admission to a castle with a morning schedule.

**Request**

```json
{
  "reserve": [
    {
      "itemNumber": "31001",
      "quantity": 2,
      "ticketHolderLanguage": "ENU",
      "notificationAddress": "john@acme.com",
      "memberNumber": "MEMBER123",
      "content": [
        {
          "admissionCode": "CASTLE",
          "scheduleNumber": 452
        }
      ]
    }
  ]
}
```

**Response**

```json
{
  "token": "ABC123456DEF789GHI",
  "reservationStatus": "registered",
  "expiresAt": "2024-10-11T12:13:00Z",
  "reservations": [
    {
      "itemNumber": "31001",
      "quantity": 2,
      "lineId": "819647d5-9d69-492e-8bb5-87799bfbf179",
      "ticket": {
        "ticketKind": "individualAdmission",
        "validFrom": "2024-10-15T00:00:00Z",
        "validUntil": "2024-10-15T23:59:59Z",
        "issuedAt": "2024-10-15T12:13:00Z",
        "blocked": false,
        "unitPrice": 80,
        "unitPriceInclVat": 100,
        "currencyCode": "DKK"
      },
      "content": [
        {
          "admissionDetails": {
            "capacityControl": "sales",
            "code": "CASTLE",
            "default": true,
            "description": {
              "title": "Castle Museum Entrance",
              "subtitle": "Adult Castle Ticket",
              "name": "Explore the Castle",
              "description": "<b>Access</b> to the castle exhibit",
              "fullDescription": "<p>Experience the grandeur of the castle's architecture and marvel at its intricate details.  Walk through beautifully decorated rooms and admire the stunning artwork and furniture on display.</p>"
            },
            "included": "mandatory"
          },
          "scheduleDetails": {
            "code": "MORNING",
            "duration": 10800,
            "endDate": "2024-10-15",
            "endTime": "12:00",
            "externalNumber": 452,
            "startDate": "2024-10-15",
            "startTime": "09:00",
            "arrivalFromTime": "08:30",
            "arrivalUntilTime": "10:00",
            "description": "Morning schedule"
          }
        }
      ]
    }
  ]
}
```

**SDK Code**

```python Simple Reservation
import requests

url = "https://api.npretail.app/01234567-89ab-cdef-0123-456789abcdef/production/CRONUS%2520International%2520Ltd./ticket/reservation"

payload = { "reserve": [
        {
            "itemNumber": "31001",
            "quantity": 2,
            "ticketHolderLanguage": "ENU",
            "notificationAddress": "john@acme.com",
            "memberNumber": "MEMBER123",
            "content": [
                {
                    "admissionCode": "CASTLE",
                    "scheduleNumber": 452
                }
            ]
        }
    ] }
headers = {
    "x-np-api-key": "<NaviPartner API Key>",
    "Content-Type": "application/json"
}

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

print(response.json())
```

```javascript Simple Reservation
const url = 'https://api.npretail.app/01234567-89ab-cdef-0123-456789abcdef/production/CRONUS%2520International%2520Ltd./ticket/reservation';
const options = {
  method: 'POST',
  headers: {'x-np-api-key': '<NaviPartner API Key>', 'Content-Type': 'application/json'},
  body: '{"reserve":[{"itemNumber":"31001","quantity":2,"ticketHolderLanguage":"ENU","notificationAddress":"john@acme.com","memberNumber":"MEMBER123","content":[{"admissionCode":"CASTLE","scheduleNumber":452}]}]}'
};

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

```go Simple Reservation
package main

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

func main() {

	url := "https://api.npretail.app/01234567-89ab-cdef-0123-456789abcdef/production/CRONUS%2520International%2520Ltd./ticket/reservation"

	payload := strings.NewReader("{\n  \"reserve\": [\n    {\n      \"itemNumber\": \"31001\",\n      \"quantity\": 2,\n      \"ticketHolderLanguage\": \"ENU\",\n      \"notificationAddress\": \"john@acme.com\",\n      \"memberNumber\": \"MEMBER123\",\n      \"content\": [\n        {\n          \"admissionCode\": \"CASTLE\",\n          \"scheduleNumber\": 452\n        }\n      ]\n    }\n  ]\n}")

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

	req.Header.Add("x-np-api-key", "<NaviPartner API Key>")
	req.Header.Add("Content-Type", "application/json")

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

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

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

}
```

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

url = URI("https://api.npretail.app/01234567-89ab-cdef-0123-456789abcdef/production/CRONUS%2520International%2520Ltd./ticket/reservation")

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

request = Net::HTTP::Post.new(url)
request["x-np-api-key"] = '<NaviPartner API Key>'
request["Content-Type"] = 'application/json'
request.body = "{\n  \"reserve\": [\n    {\n      \"itemNumber\": \"31001\",\n      \"quantity\": 2,\n      \"ticketHolderLanguage\": \"ENU\",\n      \"notificationAddress\": \"john@acme.com\",\n      \"memberNumber\": \"MEMBER123\",\n      \"content\": [\n        {\n          \"admissionCode\": \"CASTLE\",\n          \"scheduleNumber\": 452\n        }\n      ]\n    }\n  ]\n}"

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

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

HttpResponse<String> response = Unirest.post("https://api.npretail.app/01234567-89ab-cdef-0123-456789abcdef/production/CRONUS%2520International%2520Ltd./ticket/reservation")
  .header("x-np-api-key", "<NaviPartner API Key>")
  .header("Content-Type", "application/json")
  .body("{\n  \"reserve\": [\n    {\n      \"itemNumber\": \"31001\",\n      \"quantity\": 2,\n      \"ticketHolderLanguage\": \"ENU\",\n      \"notificationAddress\": \"john@acme.com\",\n      \"memberNumber\": \"MEMBER123\",\n      \"content\": [\n        {\n          \"admissionCode\": \"CASTLE\",\n          \"scheduleNumber\": 452\n        }\n      ]\n    }\n  ]\n}")
  .asString();
```

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

$client = new \GuzzleHttp\Client();

$response = $client->request('POST', 'https://api.npretail.app/01234567-89ab-cdef-0123-456789abcdef/production/CRONUS%2520International%2520Ltd./ticket/reservation', [
  'body' => '{
  "reserve": [
    {
      "itemNumber": "31001",
      "quantity": 2,
      "ticketHolderLanguage": "ENU",
      "notificationAddress": "john@acme.com",
      "memberNumber": "MEMBER123",
      "content": [
        {
          "admissionCode": "CASTLE",
          "scheduleNumber": 452
        }
      ]
    }
  ]
}',
  'headers' => [
    'Content-Type' => 'application/json',
    'x-np-api-key' => '<NaviPartner API Key>',
  ],
]);

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

```csharp Simple Reservation
using RestSharp;

var client = new RestClient("https://api.npretail.app/01234567-89ab-cdef-0123-456789abcdef/production/CRONUS%2520International%2520Ltd./ticket/reservation");
var request = new RestRequest(Method.POST);
request.AddHeader("x-np-api-key", "<NaviPartner API Key>");
request.AddHeader("Content-Type", "application/json");
request.AddParameter("application/json", "{\n  \"reserve\": [\n    {\n      \"itemNumber\": \"31001\",\n      \"quantity\": 2,\n      \"ticketHolderLanguage\": \"ENU\",\n      \"notificationAddress\": \"john@acme.com\",\n      \"memberNumber\": \"MEMBER123\",\n      \"content\": [\n        {\n          \"admissionCode\": \"CASTLE\",\n          \"scheduleNumber\": 452\n        }\n      ]\n    }\n  ]\n}", ParameterType.RequestBody);
IRestResponse response = client.Execute(request);
```

```swift Simple Reservation
import Foundation

let headers = [
  "x-np-api-key": "<NaviPartner API Key>",
  "Content-Type": "application/json"
]
let parameters = ["reserve": [
    [
      "itemNumber": "31001",
      "quantity": 2,
      "ticketHolderLanguage": "ENU",
      "notificationAddress": "john@acme.com",
      "memberNumber": "MEMBER123",
      "content": [
        [
          "admissionCode": "CASTLE",
          "scheduleNumber": 452
        ]
      ]
    ]
  ]] as [String : Any]

let postData = JSONSerialization.data(withJSONObject: parameters, options: [])

let request = NSMutableURLRequest(url: NSURL(string: "https://api.npretail.app/01234567-89ab-cdef-0123-456789abcdef/production/CRONUS%2520International%2520Ltd./ticket/reservation")! 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()
```

### Group Reservation

A group reservation example where a customer reserves two tickets for a specific item, including details for admission to a castle with a morning schedule. The reservation is made for a group, which may have different entitlements compared to individual tickets.

**Request**

```json
{
  "reserve": [
    {
      "itemNumber": "31001",
      "quantity": 2,
      "ticketHolderLanguage": "ENU",
      "notificationAddress": "john@acme.com",
      "memberNumber": "MEMBER123",
      "content": [
        {
          "admissionCode": "CASTLE",
          "scheduleNumber": 452
        }
      ]
    }
  ]
}
```

**Response**

```json
{
  "token": "ABC123456DEF789GHI",
  "reservationStatus": "registered",
  "expiresAt": "2024-10-11T12:13:00Z",
  "reservations": [
    {
      "itemNumber": "31001",
      "quantity": 2,
      "lineId": "819647d5-9d69-492e-8bb5-87799bfbf179",
      "ticket": {
        "ticketKind": "groupAdmission",
        "validFrom": "2024-10-15T00:00:00Z",
        "validUntil": "2024-10-15T23:59:59Z",
        "issuedAt": "2024-10-15T12:13:00Z",
        "blocked": false,
        "unitPrice": 80,
        "unitPriceInclVat": 100,
        "currencyCode": "DKK",
        "admissionEntitlements": [
          {
            "code": "CASTLE",
            "maxGroupSize": 10
          }
        ]
      },
      "content": [
        {
          "admissionDetails": {
            "capacityControl": "sales",
            "code": "CASTLE",
            "default": true,
            "description": {
              "title": "Castle Museum Entrance",
              "subtitle": "Adult Castle Ticket",
              "name": "Explore the Castle",
              "description": "<b>Access</b> to the castle exhibit",
              "fullDescription": "<p>Experience the grandeur of the castle's architecture and marvel at its intricate details.  Walk through beautifully decorated rooms and admire the stunning artwork and furniture on display.</p>"
            },
            "included": "mandatory"
          },
          "scheduleDetails": {
            "code": "MORNING",
            "duration": 10800,
            "endDate": "2024-10-15",
            "endTime": "12:00",
            "externalNumber": 452,
            "startDate": "2024-10-15",
            "startTime": "09:00",
            "arrivalFromTime": "08:30",
            "arrivalUntilTime": "10:00",
            "description": "Morning schedule"
          }
        }
      ]
    }
  ]
}
```

**SDK Code**

```python Group Reservation
import requests

url = "https://api.npretail.app/01234567-89ab-cdef-0123-456789abcdef/production/CRONUS%2520International%2520Ltd./ticket/reservation"

payload = { "reserve": [
        {
            "itemNumber": "31001",
            "quantity": 2,
            "ticketHolderLanguage": "ENU",
            "notificationAddress": "john@acme.com",
            "memberNumber": "MEMBER123",
            "content": [
                {
                    "admissionCode": "CASTLE",
                    "scheduleNumber": 452
                }
            ]
        }
    ] }
headers = {
    "x-np-api-key": "<NaviPartner API Key>",
    "Content-Type": "application/json"
}

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

print(response.json())
```

```javascript Group Reservation
const url = 'https://api.npretail.app/01234567-89ab-cdef-0123-456789abcdef/production/CRONUS%2520International%2520Ltd./ticket/reservation';
const options = {
  method: 'POST',
  headers: {'x-np-api-key': '<NaviPartner API Key>', 'Content-Type': 'application/json'},
  body: '{"reserve":[{"itemNumber":"31001","quantity":2,"ticketHolderLanguage":"ENU","notificationAddress":"john@acme.com","memberNumber":"MEMBER123","content":[{"admissionCode":"CASTLE","scheduleNumber":452}]}]}'
};

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

```go Group Reservation
package main

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

func main() {

	url := "https://api.npretail.app/01234567-89ab-cdef-0123-456789abcdef/production/CRONUS%2520International%2520Ltd./ticket/reservation"

	payload := strings.NewReader("{\n  \"reserve\": [\n    {\n      \"itemNumber\": \"31001\",\n      \"quantity\": 2,\n      \"ticketHolderLanguage\": \"ENU\",\n      \"notificationAddress\": \"john@acme.com\",\n      \"memberNumber\": \"MEMBER123\",\n      \"content\": [\n        {\n          \"admissionCode\": \"CASTLE\",\n          \"scheduleNumber\": 452\n        }\n      ]\n    }\n  ]\n}")

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

	req.Header.Add("x-np-api-key", "<NaviPartner API Key>")
	req.Header.Add("Content-Type", "application/json")

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

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

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

}
```

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

url = URI("https://api.npretail.app/01234567-89ab-cdef-0123-456789abcdef/production/CRONUS%2520International%2520Ltd./ticket/reservation")

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

request = Net::HTTP::Post.new(url)
request["x-np-api-key"] = '<NaviPartner API Key>'
request["Content-Type"] = 'application/json'
request.body = "{\n  \"reserve\": [\n    {\n      \"itemNumber\": \"31001\",\n      \"quantity\": 2,\n      \"ticketHolderLanguage\": \"ENU\",\n      \"notificationAddress\": \"john@acme.com\",\n      \"memberNumber\": \"MEMBER123\",\n      \"content\": [\n        {\n          \"admissionCode\": \"CASTLE\",\n          \"scheduleNumber\": 452\n        }\n      ]\n    }\n  ]\n}"

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

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

HttpResponse<String> response = Unirest.post("https://api.npretail.app/01234567-89ab-cdef-0123-456789abcdef/production/CRONUS%2520International%2520Ltd./ticket/reservation")
  .header("x-np-api-key", "<NaviPartner API Key>")
  .header("Content-Type", "application/json")
  .body("{\n  \"reserve\": [\n    {\n      \"itemNumber\": \"31001\",\n      \"quantity\": 2,\n      \"ticketHolderLanguage\": \"ENU\",\n      \"notificationAddress\": \"john@acme.com\",\n      \"memberNumber\": \"MEMBER123\",\n      \"content\": [\n        {\n          \"admissionCode\": \"CASTLE\",\n          \"scheduleNumber\": 452\n        }\n      ]\n    }\n  ]\n}")
  .asString();
```

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

$client = new \GuzzleHttp\Client();

$response = $client->request('POST', 'https://api.npretail.app/01234567-89ab-cdef-0123-456789abcdef/production/CRONUS%2520International%2520Ltd./ticket/reservation', [
  'body' => '{
  "reserve": [
    {
      "itemNumber": "31001",
      "quantity": 2,
      "ticketHolderLanguage": "ENU",
      "notificationAddress": "john@acme.com",
      "memberNumber": "MEMBER123",
      "content": [
        {
          "admissionCode": "CASTLE",
          "scheduleNumber": 452
        }
      ]
    }
  ]
}',
  'headers' => [
    'Content-Type' => 'application/json',
    'x-np-api-key' => '<NaviPartner API Key>',
  ],
]);

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

```csharp Group Reservation
using RestSharp;

var client = new RestClient("https://api.npretail.app/01234567-89ab-cdef-0123-456789abcdef/production/CRONUS%2520International%2520Ltd./ticket/reservation");
var request = new RestRequest(Method.POST);
request.AddHeader("x-np-api-key", "<NaviPartner API Key>");
request.AddHeader("Content-Type", "application/json");
request.AddParameter("application/json", "{\n  \"reserve\": [\n    {\n      \"itemNumber\": \"31001\",\n      \"quantity\": 2,\n      \"ticketHolderLanguage\": \"ENU\",\n      \"notificationAddress\": \"john@acme.com\",\n      \"memberNumber\": \"MEMBER123\",\n      \"content\": [\n        {\n          \"admissionCode\": \"CASTLE\",\n          \"scheduleNumber\": 452\n        }\n      ]\n    }\n  ]\n}", ParameterType.RequestBody);
IRestResponse response = client.Execute(request);
```

```swift Group Reservation
import Foundation

let headers = [
  "x-np-api-key": "<NaviPartner API Key>",
  "Content-Type": "application/json"
]
let parameters = ["reserve": [
    [
      "itemNumber": "31001",
      "quantity": 2,
      "ticketHolderLanguage": "ENU",
      "notificationAddress": "john@acme.com",
      "memberNumber": "MEMBER123",
      "content": [
        [
          "admissionCode": "CASTLE",
          "scheduleNumber": 452
        ]
      ]
    ]
  ]] as [String : Any]

let postData = JSONSerialization.data(withJSONObject: parameters, options: [])

let request = NSMutableURLRequest(url: NSURL(string: "https://api.npretail.app/01234567-89ab-cdef-0123-456789abcdef/production/CRONUS%2520International%2520Ltd./ticket/reservation")! 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()
```