> 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.

# Get Catalog

GET https://api.npretail.app/{tenant}/{environment}/{company}/ticket/catalog/{storeCode}

Get the list of ticket items and their descriptions

Reference: https://docs.navipartner.com/apis/api-reference/ticketing/service-catalog/get-catalog

## 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)
- `storeCode` (string, optional) — A unique identifier for a store - a logical grouping defining a subset of ticket items. This is used to filter the list of ticket items returned by the API. When left empty, the API will use the default store code.

## Response

### 200

- `storeCode` (string, required) — A unique identifier for a store - a logical grouping defining a subset of ticket items. This is used to filter the list of ticket items returned by the API. When left empty, the API will use the default store code.
- `items` (list of Item, required)

## Types

### Item

Describes a ticket item available for sale, including its unique identifier, pricing, type, descriptions, and associated admissions. Used to present detailed ticket options to customers.

- `itemNumber` (string, required) — An item or product number defined in the ticketing system
- `recommendedPrice` (RecommendedPrice, required) — Suggests a base price for a ticket item before any adjustments like discounts or dynamic pricing. Assists in displaying price information to customers during their purchasing decision.
- `ticketType` (TicketType, required) — Categorizes the ticket item based on sales channels or functional groupings, such as "WEB" or "POS". Influences how the ticket is sold and processed within the system.
- `description` (Descriptions, required) — Descriptive information about a ticket item. The source of these fields are configurable.
- `contents` (list of AdmissionCatalog, required)
- `variants` (list of ItemVariant, optional)
- `itemReferences` (list of ItemReferences, optional)

### RecommendedPrice

Suggests a base price for a ticket item before any adjustments like discounts or dynamic pricing. Assists in displaying price information to customers during their purchasing decision.

- `unitPrice` (double, required) — The unit price of the ticket.
- `unitPriceIncludesVat` (boolean, required) — Indicates if the unit price includes VAT.
- `vatPct` (double, required)
- `currencyCode` (string, required)

### TicketType

Categorizes the ticket item based on sales channels or functional groupings, such as "WEB" or "POS". Influences how the ticket is sold and processed within the system.

- `code` (string, required)
- `description` (string, required)
- `category` (string, required)
- `kind` (enum, required) — The kind of ticket, either individual or group admission.
  - Allowed values: `individualAdmission`, `groupAdmission`

### 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)

### AdmissionCatalog

Details the admissions included with a ticket item, specifying access rights like entry to events or exhibits. Informs customers about what experiences are included with their purchase.

- `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`
- `scheduleSelection` (enum, required) — All reservations require a schedule id. However, this field indicates the type of automation you get when performing a reservation without providing schedule id for the admission. * NoScheduleSelection implies that there is no _automatic_ schedule selection when no schedule id provided (reservation will fail). * CurrentSchedule implies that the current schedule (aka "today") is selected. * NextAvailableSchedule implies that the next available schedule is selected. The current and Next-available select rules work well in a POS sales scenario.
  - Allowed values: `noScheduleSelection`, `currentSchedule`, `nextAvailableSchedule`, `userSelectedSchedule`
- `maxCapacity` (integer, optional)

### ItemVariant

Additional details for an item number. If the item number is a variant, this will contain the variant code, description and the specific item number for that combination .

- `variantCode` (string, required)
- `eanItemNumber` (string, required)
- `description` (string, required)

### ItemReferences

Provides reference information for an item, such as external identifiers or codes used for integration with other systems. Helps link the ticket item to external data sources or inventory systems.

- `referenceNumber` (string, required)
- `description` (string, required)

## Examples

Example response for the getCatalog endpoint

**Response**

```json
{
  "storeCode": "EN",
  "items": [
    {
      "itemNumber": "31001",
      "recommendedPrice": {
        "unitPrice": 100,
        "unitPriceIncludesVat": true,
        "vatPct": 25,
        "currencyCode": "SEK"
      },
      "ticketType": {
        "code": "WEB",
        "description": "Web sales",
        "category": "Online",
        "kind": "individualAdmission"
      },
      "description": {
        "title": "Castle Museum Entrance",
        "subtitle": "Adult Castle Ticket",
        "name": "Explore History",
        "description": "<b>Access</b> to all castle exhibits",
        "fullDescription": "<p>Step back in time and immerse yourself in the rich history of our castle museum.  Discover fascinating artifacts, explore grand halls, and learn about the lives of the people who once lived within these walls.</p> <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> <p>Join a guided tour to gain deeper insights into the castle's history and hear captivating stories  about its past. Learn about the battles fought, the royal inhabitants, and the secrets that lie hidden within these ancient walls.</p>"
      },
      "contents": [
        {
          "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",
          "scheduleSelection": "noScheduleSelection",
          "maxCapacity": 175
        }
      ],
      "itemReferences": [
        {
          "referenceNumber": "EAN1234567890123",
          "description": "Reference number must be used when the item has a variant and could be used when same base item is used in different contexts / sales channels"
        }
      ]
    }
  ]
}
```

**SDK Code**

```python Catalog Example
import requests

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

headers = {"x-np-api-key": "<NaviPartner API Key>"}

response = requests.get(url, headers=headers)

print(response.json())
```

```javascript Catalog Example
const url = 'https://api.npretail.app/01234567-89ab-cdef-0123-456789abcdef/production/CRONUS%2520International%2520Ltd./ticket/catalog/EN';
const options = {method: 'GET', headers: {'x-np-api-key': '<NaviPartner API Key>'}};

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

```go Catalog Example
package main

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

func main() {

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

	req, _ := http.NewRequest("GET", url, nil)

	req.Header.Add("x-np-api-key", "<NaviPartner API Key>")

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

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

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

}
```

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

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

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

request = Net::HTTP::Get.new(url)
request["x-np-api-key"] = '<NaviPartner API Key>'

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

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

HttpResponse<String> response = Unirest.get("https://api.npretail.app/01234567-89ab-cdef-0123-456789abcdef/production/CRONUS%2520International%2520Ltd./ticket/catalog/EN")
  .header("x-np-api-key", "<NaviPartner API Key>")
  .asString();
```

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

$client = new \GuzzleHttp\Client();

$response = $client->request('GET', 'https://api.npretail.app/01234567-89ab-cdef-0123-456789abcdef/production/CRONUS%2520International%2520Ltd./ticket/catalog/EN', [
  'headers' => [
    'x-np-api-key' => '<NaviPartner API Key>',
  ],
]);

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

```csharp Catalog Example
using RestSharp;

var client = new RestClient("https://api.npretail.app/01234567-89ab-cdef-0123-456789abcdef/production/CRONUS%2520International%2520Ltd./ticket/catalog/EN");
var request = new RestRequest(Method.GET);
request.AddHeader("x-np-api-key", "<NaviPartner API Key>");
IRestResponse response = client.Execute(request);
```

```swift Catalog Example
import Foundation

let headers = ["x-np-api-key": "<NaviPartner API Key>"]

let request = NSMutableURLRequest(url: NSURL(string: "https://api.npretail.app/01234567-89ab-cdef-0123-456789abcdef/production/CRONUS%2520International%2520Ltd./ticket/catalog/EN")! as URL,
                                        cachePolicy: .useProtocolCachePolicy,
                                    timeoutInterval: 10.0)
request.httpMethod = "GET"
request.allHTTPHeaderFields = headers

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()
```