# Tools Reference: List Management
All five list tools require lists:manage permission, which is granted to all accounts by default.
Lists are org-owned collections of hotels:
- Static lists — manually curated sets of hotels
- Dynamic lists — backed by a saved search query; new matches can be discovered using
get_list_diff
# list_user_lists
List all hotel lists owned by the calling organisation. Paginated at 10 per page.
# Parameters
| Parameter | Type | Required | Description |
|---|---|---|---|
page | integer (≥1) | No | Page number (default 1) |
createdBy | string | No | Filter by creator user ID |
# Example
curl -X POST https://api.hotel-universe.travel/mcp \
-H "Authorization: Bearer pat_YOUR_TOKEN" \
-H "Content-Type: application/json" \
-d '{
"jsonrpc": "2.0",
"id": 1,
"method": "tools/call",
"params": {
"name": "list_user_lists",
"arguments": {
"page": 1
}
}
}'
# Response
{
"total": 3,
"page": 1,
"lists": [
{
"id": "lst_abc123",
"name": "London City Hotels",
"createdBy": "usr_xyz",
"createdAt": "2025-03-01T10:00:00Z"
}
]
}
# get_list
Get metadata for a single list by ID. For dynamic lists, includes the saved search query that the list is backed by.
# Parameters
| Parameter | Type | Required | Description |
|---|---|---|---|
listId | string | Yes | List ID (e.g. "lst_abc123") |
# Example
curl -X POST https://api.hotel-universe.travel/mcp \
-H "Authorization: Bearer pat_YOUR_TOKEN" \
-H "Content-Type: application/json" \
-d '{
"jsonrpc": "2.0",
"id": 1,
"method": "tools/call",
"params": {
"name": "get_list",
"arguments": {
"listId": "lst_abc123"
}
}
}'
# get_list_hotels
Get hotel entries in a list with hotel preview data. Paginated at 10 per page. For large lists, iterate through pages using the page parameter.
# Parameters
| Parameter | Type | Required | Description |
|---|---|---|---|
listId | string | Yes | List ID |
page | integer (≥1) | No | Page number (default 1) |
# Example
curl -X POST https://api.hotel-universe.travel/mcp \
-H "Authorization: Bearer pat_YOUR_TOKEN" \
-H "Content-Type: application/json" \
-d '{
"jsonrpc": "2.0",
"id": 1,
"method": "tools/call",
"params": {
"name": "get_list_hotels",
"arguments": {
"listId": "lst_abc123",
"page": 1
}
}
}'
# Response
{
"total": 47,
"page": 1,
"entries": [
{
"huId": "HU4A2BC9",
"name": "Hotel Arts Barcelona",
"matchStatus": "matched"
},
{
"huId": null,
"name": "Unknown Beach Resort",
"matchStatus": "unmatched"
}
]
}
matchStatus values:
matched— the entry has a confirmed Hotel Universe IDneedsReview— a candidate match exists but requires human confirmationunmatched— no match found yet
# get_list_stats
Get a summary of a list: total entries, matched hotels, entries needing review, and unmatched entries. Useful as a quick health check before processing a list.
# Parameters
| Parameter | Type | Required | Description |
|---|---|---|---|
listId | string | Yes | List ID |
# Example
curl -X POST https://api.hotel-universe.travel/mcp \
-H "Authorization: Bearer pat_YOUR_TOKEN" \
-H "Content-Type: application/json" \
-d '{
"jsonrpc": "2.0",
"id": 1,
"method": "tools/call",
"params": {
"name": "get_list_stats",
"arguments": {
"listId": "lst_abc123"
}
}
}'
# Response
{
"total": 47,
"matched": 43,
"needsReview": 2,
"unmatched": 2
}
# get_list_diff
For a dynamic list, return the hotels that match the saved search query but are not yet included in the list. Returns an empty array for static lists.
Run this periodically to discover newly added hotels that qualify for inclusion in a dynamic list.
# Parameters
| Parameter | Type | Required | Description |
|---|---|---|---|
listId | string | Yes | List ID |
# Example
curl -X POST https://api.hotel-universe.travel/mcp \
-H "Authorization: Bearer pat_YOUR_TOKEN" \
-H "Content-Type: application/json" \
-d '{
"jsonrpc": "2.0",
"id": 1,
"method": "tools/call",
"params": {
"name": "get_list_diff",
"arguments": {
"listId": "lst_abc123"
}
}
}'
# Response
[
{
"huId": "HU9F1AA2",
"name": "New Boutique Hotel Barceloneta",
"address": "Passeig Marítim de la Barceloneta, 36, Barcelona"
}
]