Locktrip
← Обратно към AI агенти

API документация

Пълна справка за LockTrip Hotel Booking MCP API. 15 инструмента, покриващи търсене, резервация, плащане и управление.

Integrating a backend service? The same product is available as a native GraphQL API with credit line billing for B2B partners. See the GraphQL B2B docs →

Автентикация

API-то използва Bearer JWT токени. Инструментите за търсене и преглед не изискват автентикация. Инструментите за резервация и управление изискват валиден токен.

Получаване на токен

Използвайте guest_login (само имейл, моментално) или login (имейл + парола), за да получите JWT токен.

Използване на токена

Authorization: Bearer eyJhbGciOiJIUzUxMiJ9...

OAuth 2.1 (MCP клиенти)

MCP клиентите (например Claude, ChatGPT) се автентикират автоматично чрез OAuth 2.1 с PKCE — вие не конфигурирате нищо. При 401 клиентът открива сървъра на https://locktrip.com/.well-known/oauth-authorization-server, регистрира се динамично (POST /register) и след това изпълнява authorization code потока: /authorize (съгласие на потребителя, защитено с Cloudflare Turnstile) → /token. Обхвати: "mcp" (плюс "offline_access" за токен за опресняване). За директна REST/curl интеграция използвайте вместо това ръчен Bearer токен (вижте по-горе).

Per-call auth: sessionToken

За директни REST или JSON-RPC извиквания автентикираните инструменти приемат и аргумент sessionToken като алтернатива на заглавката Authorization. Токен от guest_login (само имейл — без парола, мигновено) създава ГОСТ сесия, а ГОСТ сесията работи САМО с prepare_booking и create_checkout. get_payment_url, list_bookings, get_booking_details, cancel_booking и confirm_booking изискват регистриран акаунт — този токен получавате чрез login (имейл + парола). B2B партньор с кредитна линия трябва да се автентикира с login, никога с guest_login: гост сесията няма кредитна линия, затова confirm_booking я отхвърля. Ако извикване върне AUTH_INSUFFICIENT_ROLE (HTTP 403), токенът е валиден, а грешна е ролята му — преминете към login, вместо да заявявате нов guest_login токен.

Класификация на инструментите

Публичен (без автентикация)Автентикиран (Bearer токен)
search_location, hotel_search,
get_search_results, get_hotel_rooms,
get_hotel_details,
check_cancellation_policy,
login, guest_login
prepare_booking, confirm_booking,
create_checkout, get_payment_url,
list_bookings, get_booking_details,
cancel_booking

Базов URL и транспорти

Всички крайни точки се обслужват от https://locktrip.com/mcp/. Поддържат се три режима на транспорт:

ТранспортМетодКрайна точка
RESTPOSThttps://locktrip.com/mcp/tools/{tool_name}
MCP Streamable HTTPPOSThttps://locktrip.com/mcp/rpc
MCP Streamable HTTP (alias)POSThttps://locktrip.com/mcp/sse

Крайни точки за откриване

URLОписание
GET /mcp/openapi.jsonOpenAPI 3.1 спецификация
GET /mcp/toolsСписък на всички инструменти със схеми
GET /mcp/discoveryMCP документ за откриване

Content-Type: application/json за всички POST заявки.

Обработка на грешки

REST грешки

СтатусЗначение
200Успех
400Грешка при валидация (невалиден вход)
401Липсващ или невалиден Bearer токен
403Удостоверено, но тази сесия няма необходимата роля - използвайте login, а не guest_login
404Непознато име на инструмент
429Надвишен лимит на заявките

The error envelope — read recoverable, not the message

Every classified error carries the same envelope. mcpCode is the stable machine-readable class — branch on it, never on the message text. recoverable is behavioural guidance and the field an autonomous agent should act on: true means the caller can fix the request and retry (bad input, expired search session, rate limit); false means retrying the same call is futile — change something first. A recoverable: false with AUTH_INSUFFICIENT_ROLE specifically means your token is valid but its role is wrong: switch to login, and do NOT fetch another guest_login token.

// REST — the HTTP status carries the class, and the body repeats it
HTTP 403
{
  "error": {
    "code": -32009,
    "message": "This tool requires a registered account. ...",
    "data": { "mcpCode": "AUTH_INSUFFICIENT_ROLE", "recoverable": false, "details": { ... } }
  }
}

Transports differ, deliberately. On /mcp/tools/* (REST) a failure returns a real HTTP status — 400, 401, 403, 404, 409, 429, 500, 502. On /mcp/rpc and /mcp/sse a failure returns HTTP 200 with the error inside the JSON-RPC body, as the JSON-RPC spec requires. If you put a circuit breaker or retry policy on HTTP status alone, it will see the RPC transport as permanently healthy — branch on data.mcpCode and data.recoverable instead.

JSON-RPC грешки

{
  "jsonrpc": "2.0",
  "id": 1,
  "error": {
    "code": -32001,
    "message": "Authentication required for this tool.",
    "data": {
      "loginUrl": "https://users.locktrip.com/api/auth/login",
      "signupTool": "guest_login"
    }
  }
}
КодЗначение
-32700Невалиден JSON — тялото на заявката не може да бъде обработено
-32600Невалидна JSON-RPC заявка
-32601Непознат инструмент / методът не е намерен
-32001Изисква се автентикация или невалиден токен
-32009Удостоверено, но тази сесия няма необходимата роля - използвайте login, а не guest_login
-32007Надвишен лимит на заявките
-32603Вътрешна грешка на сървъра

Лимити на заявките

Плъзгащ прозорец за лимити на заявки по IP (анонимни) или по потребителски ID (автентикирани). Превишаването на лимитите връща HTTP 429 или JSON-RPC код за грешка -32007.

ИнструментАнонименАвтентикиран
hotel_search5/ минута20/ минута
Всички други инструменти30/ минута120/ минута

Справка за инструментите

15 инструмента, изброени в препоръчителен ред на работния процес.

search_location

Публичен

Търсене на локации (градове, региони, хотели) за получаване на техните ID за търсене на хотели. Връща съвпадащи локации с тип и пълно име.

Заявка

ПолеТипЗадълж.Описание
querystringYesSearch query (city name, region, or hotel name)
languagestringNoLanguage code (default: "en")

Отговор

ПолеТипОписание
locationsLocation[]Array of matching locations
locations[].idstringLocation ID (use as regionId in hotel_search)
locations[].namestringLocation name
locations[].typestringLocation type (e.g., "CITY")
locations[].fullNamestringFull location name with country
locations[].countrystringCountry name
totalCountnumberTotal number of matches returned

Пример

curl -X POST https://locktrip.com/mcp/tools/search_location \
  -H "Content-Type: application/json" \
  -d '{"query": "Paris"}'

# Response (200 OK):
{
  "locations": [
    {
      "id": "5f078e431fd614748f9037f9",
      "name": "Paris, France",
      "country": "",
      "type": "CITY",
      "fullName": "Paris, France"
    },
    {
      "id": "5f080b92b8f3040a9045c3e8",
      "name": "Disneyland Paris, Boulevard de Parc, Coupvray, France",
      "country": "",
      "type": "CITY",
      "fullName": "Disneyland Paris, Boulevard de Parc, Coupvray, France"
    }
  ],
  "totalCount": 10
}

get_search_results

Публичен

Получаване на резултати от търсенето на хотели със странициране. Проверявайте, докато searchStatus е "COMPLETED". Поддържа филтриране по цена, звезди, удобства и типове хранене. Сортиране по цена, рейтинг или разстояние.

Ценово разузнаване

Всеки резултат за хотел включва discountScore — патентован рейтинг от машинно обучение на LockTrip, който изчислява колко по-евтина е офертата в сравнение с други сайтове за пътуване. V8 ML моделът анализира данни за цени в реално време от множество хотелски доставчици, за да предвиди спестяванията. Използвайте minPrice (цената на LockTrip) и originalPrice (последната най-добра цена на конкурентни сайтове) заедно с discountScore, за да покажете най-добрите оферти на потребителите.

Заявка

ПолеТипЗадълж.Описание
searchKeystringYesSearch key from hotel_search
pagenumberNoPage number, 0-indexed (default: 0)
sizenumberNoResults per page (default: 100, max: 5000)
currencystringNoCurrency code from hotel_search
sortBystringNoPRICE_ASC, PRICE_DESC, RATING_DESC, or DISTANCE
filtersobjectNoOptional filters (see below)
filters.minPricenumberNoMinimum price
filters.maxPricenumberNoMaximum price
filters.starRatingsnumber[]NoStar ratings to include (1-5)
filters.amenitiesstring[]NoRequired amenities
filters.mealTypesstring[]NoRequired meal types
filters.hotelNamestringNoHotel name search

Отговор

ПолеТипОписание
hotelsHotel[]Array of matching hotels
hotels[].hotelIdstringHotel ID (use in get_hotel_rooms, get_hotel_details)
hotels[].namestringHotel name
hotels[].starRatingnumberStar rating (1-5)
hotels[].addressstringStreet address
hotels[].latitudenumberLatitude coordinate
hotels[].longitudenumberLongitude coordinate
hotels[].imagesstring[]Hotel image URLs
hotels[].amenitiesstring[]Available amenities
hotels[].minPricenumberLockTrip's price for this hotel (lowest available rate)
hotels[].originalPricenumberLast best price found on competing travel websites (e.g. Booking.com, Expedia). When equal to minPrice, no discount was detected.
hotels[].currencystringPrice currency code
hotels[].discountScorenumberLockTrip's proprietary machine learning score indicating how much cheaper this offer is compared to other travel websites. Powered by a V8 ML model that analyzes real-time pricing data from multiple hotel suppliers. Higher = bigger savings. 0 means no significant discount was detected. RELATIVE, WITH NO FIXED UPPER BOUND — the model output is not clamped. Across millions of live results we observed a range of roughly 0 to 60, with about one result in ten above 10. Rank and compare results against each other; do NOT normalise against a constant maximum.
hotels[].qualitynumberInternal ranking scalar (the default sort key) derived from discountScore, distance and review score. RELATIVE, WITH NO FIXED UPPER BOUND and no absolute meaning — over the same data we observed roughly 0 to 23, with under a third above 1. 0 means the hotel has no discount score or no qualifying reviews. Use it to order results; do not display it as a rating or normalise it against a constant.
hotels[].reviewScorenumberGuest review score (0-10). This is the one to show a user.
hotels[].reviewCountnumber|nullNumber of guest reviews
hotels[].hasFreeCancellationbooleanWhether any room has free cancellation
hotels[].isRefundablebooleanWhether any room is refundable
hotels[].refundableUntilstring|nullISO date until which free cancellation is available
hotels[].paymentstringPayment type (e.g., "Cash")
hotels[].distancenumberDistance from search center (km)
hotels[].boardTypestring|nullDefault board type
hotels[].availableMealTypesstring[]Available meal types
totalCountnumberTotal hotels matching search
pagenumberCurrent page number, 0-indexed — the SAME indexing as the request. Request page 0 and this echoes 0. To walk pages, request page + 1.
pageSizenumberResults per page
hasMorebooleanWhether more pages are available
searchStatusstring"IN_PROGRESS" or "COMPLETED"

Пример

curl -X POST https://locktrip.com/mcp/tools/get_search_results \
  -H "Content-Type: application/json" \
  -d '{
    "searchKey": "47de06e3262ea3822bdc384a04470783",
    "page": 0,
    "size": 2
  }'

# Response (200 OK):
{
  "hotels": [
    {
      "hotelId": "4703420",
      "name": "Premiere Classe Boissy Saint Leger",
      "starRating": 1,
      "address": "P.A De La Haie Griselle 4 Rue Pompadour, Boissy-Saint-Leger",
      "latitude": 48.759967,
      "longitude": 2.501443,
      "images": [
        "https://imagecontent.net/images/full/5a0d94a0-5f7e-4e4e-b457-5e0673a96a95.jpeg"
      ],
      "amenities": ["Family rooms", "Free Wifi", "Parking", "Air conditioning"],
      "minPrice": 71.51,
      "originalPrice": 71.51,
      "currency": "EUR",
      "discountScore": 0,
      "quality": 0.19,
      "reviewScore": 2.5,
      "reviewCount": null,
      "hasFreeCancellation": false,
      "isRefundable": false,
      "refundableUntil": null,
      "payment": "Cash",
      "distance": 15.32,
      "boardType": null,
      "availableMealTypes": []
    }
  ],
  "totalCount": 2403,
  "page": 0,
  "pageSize": 2,
  "hasMore": true,
  "searchStatus": "COMPLETED"
}

get_hotel_rooms

Публичен

Получаване на наличните стаи за конкретен хотел. Връща quoteIds, необходими за резервация. Всеки пакет включва цена, тип хранене, удобства и информация за анулиране.

Заявка

ПолеТипЗадълж.Описание
hotelIdstringYesHotel ID from search results
searchKeystringYesSearch key from hotel_search
startDatestringYesCheck-in date (YYYY-MM-DD). MUST be in the future — a past date is rejected with "Check-in date cannot be in the past". The dates in the examples are illustrative; substitute your own future window.
endDatestringYesCheck-out date (YYYY-MM-DD)
roomsRoom[]YesRoom occupancy (same as hotel_search)
nationalitystringYes2-letter country code
regionIdstringYesRegion ID from search_location
currencystringNoCurrency code (default: "USD")

Отговор

ПолеТипОписание
hotelIdstringHotel ID
hotelNamestringHotel name
checkInstringCheck-in date (YYYY-MM-DD)
checkOutstringCheck-out date (YYYY-MM-DD)
packagesPackage[]Available room packages
packages[].quoteIdstringQuote ID (use in prepare_booking)
packages[].packageIdstringPackage identifier
packages[].roomNamestringRoom type name (e.g., "Standard, 3 Beds")
packages[].roomDescriptionstringHTML description of room features
packages[].mealTypestring"Room Only", "Breakfast Included", etc.
packages[].mealDescriptionstringMeal plan description
packages[].maxOccupancynumberMaximum guests per room
packages[].amenitiesstring[]Room amenities list
packages[].pricenumberTotal price for all nights
packages[].currencystringPrice currency
packages[].pricePerNightnumberPrice per night
packages[].totalNightsnumberNumber of nights
packages[].isRefundablebooleanWhether room is refundable

Пример

curl -X POST https://locktrip.com/mcp/tools/get_hotel_rooms \
  -H "Content-Type: application/json" \
  -d '{"hotelId":"4384127","searchKey":"47de06e3262ea3822bdc384a04470783","startDate":"2027-04-15","endDate":"2027-04-17","rooms":[{"adults":2}],"nationality":"US","regionId":"5f078e431fd614748f9037f9","currency":"EUR"}'

# Response (200 OK):
{
  "hotelId": "4384127",
  "hotelName": "",
  "checkIn": "2027-04-15",
  "checkOut": "2027-04-17",
  "packages": [
    {
      "quoteId": "3e242771-1c15-4356-9a3b-1cd4bfc6d9fc_4384127",
      "packageId": "3e242771-1c15-4356-9a3b-1cd4bfc6d9fc_4384127",
      "roomName": "Standard, 3 Beds",
      "mealType": "Room Only",
      "price": 71.34,
      "currency": "EUR",
      "pricePerNight": 35.67,
      "totalNights": 2,
      "isRefundable": false
    }
  ]
}

get_hotel_details

Публичен

Подробна информация за хотела, включително описание, удобства, отзиви, снимки и местоположение. Използвайте след търсене за пълна информация преди резервация.

Заявка

ПолеТипЗадълж.Описание
hotelIdnumberYesHotel ID (numeric, from search results)
languagestringNoLanguage code (default: "en")
includeImagesbooleanNoFetch additional images (default: false)
imageLimitnumberNoMax additional images (default: 20, max: 100)

Отговор

ПолеТипОписание
hotelobjectHotel details object
hotel.idnumberHotel ID
hotel.namestringHotel name
hotel.countrystringCountry
hotel.citystringCity
hotel.starnumberStar rating (1-5)
hotel.addressstringStreet address
hotel.latitudenumberLatitude
hotel.longitudenumberLongitude
hotel.descriptionstringHTML description with sections
hotel.phonestring|nullPhone number
hotel.hotelPhotosPhoto[]Photo URLs (relative paths)
hotel.reviewsobjectReview summary with score, count, keywords
hotel.hotelAmenitiesCategory[]Amenities grouped by category
additionalImagesPhoto[]Extra images (if includeImages=true)

Пример

curl -X POST https://locktrip.com/mcp/tools/get_hotel_details \
  -H "Content-Type: application/json" \
  -d '{"hotelId": 4384127}'

# Response (200 OK):
{
  "hotel": {
    "id": 4384127,
    "name": "Premiere Classe Plaisir",
    "country": "France",
    "city": "Plaisir",
    "star": 1,
    "address": "Za De Sainte Apolline Rue Des Poiriers",
    "description": "<h2>Hotel Details</h2><p>Property Location...</p>",
    "hotelPhotos": [{"url": "/gmx/full/d174a039-ebf9-4e42-8b42-5e31a6950b0e.jpeg"}],
    "reviews": {"scoreSummary": 0, "reviewsCount": 0, "keyWords": []},
    "hotelAmenities": [{"categoryName": "Hotel Facilities & Services", "features": [{"name": "Free Wifi"}]}]
  }
}

check_cancellation_policy

Публичен

Подробна политика за анулиране на стаи. Показва краен срок за безплатно анулиране и неустойки по период.

Заявка

ПолеТипЗадълж.Описание
searchKeystringYesSearch key from hotel_search
hotelIdstringYesHotel ID
packageIdsstring[]YesPackage UUIDs, WITHOUT the _hotelId suffix — take the quoteId from get_hotel_rooms and truncate it: quoteId.split('_')[0]. Passing the full quoteId here fails with a misleading SESSION_EXPIRED even on a live session, because the policy lookup matches the bare UUID.

Отговор

ПолеТипОписание
hotelIdstringHotel ID
policiesPolicy[]Cancellation policy per package
policies[].packageIdstringPackage identifier
policies[].isRefundablebooleanWhether package is refundable
policies[].freeCancellationUntilstring|nullLast date for free cancellation (YYYY-MM-DD)
policies[].feesFee[]Cancellation penalty fees
policies[].fees[].fromDatestringPenalty period start (YYYY-MM-DD)
policies[].fees[].toDatestring|nullPenalty period end
policies[].fees[].amountnumberPenalty amount
policies[].fees[].currencystring|absentThe supplier's own currency for this penalty. OMITTED, never guessed, when the supplier states none — treat an absent currency as unpriced rather than assuming your search currency. (Before 2026-08 this field was hardcoded to USD and was wrong for every non-USD search.)
policies[].fees[].percentagenumber|nullPercentage of booking price
policies[].remarksstring[]|nullAdditional policy notes

Пример

curl -X POST https://locktrip.com/mcp/tools/check_cancellation_policy \
  -H "Content-Type: application/json" \
  -d '{"searchKey":"47de06e3262ea3822bdc384a04470783","hotelId":"4384127","packageIds":["e3fca710-0a05-4b96-a472-a93c941a58fc"]}'

# NOTE the packageId has NO _4384127 suffix. Passing the full quoteId here returns
# 409 SESSION_EXPIRED even on a live session.

# Response (200 OK):
{
  "hotelId": "4384127",
  "policies": [{
    "packageId": "e3fca710-0a05-4b96-a472-a93c941a58fc_4384127",
    "isRefundable": true,
    "freeCancellationUntil": "2027-04-13",
    "fees": [{"fromDate":"2027-04-13","toDate":"2027-04-15","amount":77.53,"currency":"EUR","percentage":100}],
    "remarks": ["Room: Standard, 3 Beds", "Board: Room Only"]
  }]
}

guest_login

Публичен

Регистрация или вход като гост само с имейл адрес. Връща Bearer токен за автентикирани инструменти. ВСЯКО извикване изпраща имейл за потвърждение до този адрес, включително за вече съществуващ акаунт — заявете токена веднъж и го използвайте повторно. Резултатът е ГОСТ сесия.

Заявка

ПолеТипЗадълж.Описание
emailstringYesUser email address

Отговор

ПолеТипОписание
tokenstringJWT Bearer token for authenticated API calls
userIdnumberNumeric user ID
emailstringUser email address
isNewUserbooleanWhether a new account was created

Пример

curl -X POST https://locktrip.com/mcp/tools/guest_login \
  -H "Content-Type: application/json" \
  -d '{"email": "[email protected]"}'

# Response (200 OK):
{"token":"eyJhbGciOiJIUzUxMiJ9...","userId":413900,"email":"[email protected]","isNewUser":true}

login

Публичен

Вход с имейл и парола за получаване на Bearer токен. За регистрирани потребители с потвърдени акаунти.

Заявка

ПолеТипЗадълж.Описание
emailstringYesUser email address
passwordstringYesUser password

Отговор

ПолеТипОписание
tokenstringJWT Bearer token for authenticated API calls
userIdnumberNumeric user ID
emailstringUser email address

Пример

curl -X POST https://locktrip.com/mcp/tools/login \
  -H "Content-Type: application/json" \
  -d '{"email":"[email protected]","password":"yourpassword"}'

# Response (200 OK):
{"token":"eyJhbGciOiJIUzUxMiJ9...","userId":12345,"email":"[email protected]"}

prepare_booking

Изисква автентикация

Създаване на резервация с данни за гостите. Връща preparedBookingId за потвърждение. Подготвената резервация няма фиксиран срок; изтича търсещата сесия, свързана с нейния quoteId. Броят гости на стая трябва да съвпада с броя възрастни от търсенето.

Заявка

ПолеТипЗадълж.Описание
quoteIdstringYesQuote ID from get_hotel_rooms
searchKeystringYesSearch key from hotel_search — the SAME one used for get_hotel_rooms. REQUIRED: omitting it returns 400 VALIDATION_ERROR naming searchKey as the failing path. It warms the cancellation-policy cache the backend needs in order to book.
roomsRoom[]YesGuest assignments per room
rooms[].roomIndexnumberYesRoom index (0-based)
rooms[].guestsGuest[]YesAdult guests in this room
rooms[].guests[].firstNamestringYesFirst name
rooms[].guests[].lastNamestringYesLast name
rooms[].guests[].titlestringNo"Mr", "Mrs", or "Ms" (default: "Mr")
rooms[].guests[].emailstringNoEmail address
rooms[].guests[].phonestringNoPhone number
rooms[].guests[].isLeadGuestbooleanNoWhether this is the lead guest
rooms[].childrenChild[]NoChildren in this room
rooms[].children[].firstNamestringYesFirst name
rooms[].children[].lastNamestringYesLast name
rooms[].children[].agenumberYesChild age (0-17)
contactPersonobjectYesContact person details
contactPerson.firstNamestringYesFirst name
contactPerson.lastNamestringYesLast name
contactPerson.emailstringYesEmail address
contactPerson.phonestringYesPhone number (min 5 chars)
contactPerson.titlestringNo"Mr", "Mrs", or "Ms"
contactPerson.countryCodestringNo2-letter country code
specialRequestsstringNoSpecial requests for the hotel

Отговор

ПолеТипОписание
preparedBookingIdstringBooking ID for confirm_booking
bookingInternalIdstringInternal booking identifier
pricenumberTotal price
currencystringPrice currency
paymentstringPayment type (e.g., "Cash")
discountobjectDiscount details (amount, currency)
taxesTax[]Itemized taxes and fees
essentialInformationstring[]Check-in instructions, mandatory fees, policies

Пример

curl -X POST https://locktrip.com/mcp/tools/prepare_booking \
  -H "Content-Type: application/json" \
  -H "Authorization: Bearer eyJhbGciOiJIUzUxMiJ9..." \
  -d '{"quoteId":"3e242771-1c15-4356-9a3b-1cd4bfc6d9fc_4384127","searchKey":"47de06e3262ea3822bdc384a04470783","rooms":[{"roomIndex":0,"guests":[{"firstName":"John","lastName":"Smith","title":"Mr","email":"[email protected]","phone":"+1234567890","isLeadGuest":true}]}],"contactPerson":{"firstName":"John","lastName":"Smith","email":"[email protected]","phone":"+1234567890"}}'

# Response (200 OK):
{"preparedBookingId":"69a2b7540a93415a4b4dbf13","price":71.34,"currency":"EUR","payment":"Cash","discount":{"amount":0,"currency":"EUR"},"taxes":[{"feeTitle":"Taxes and Fees","value":"1.59","currency":"EUR","isIncludedInPrice":true}],"essentialInformation":["CheckIn instructions: ..."]}

confirm_booking

Изисква автентикация

Потвърждаване и плащане на подготвена резервация чрез B2B кредитна линия. Връща потвърждение на резервацията с URL на ваучера. За потребителски плащания използвайте create_checkout или get_payment_url.

Заявка

ПолеТипЗадълж.Описание
bookingInternalIdstringYesBooking ID from prepare_booking (preparedBookingId)
quoteIdstringYesQuote ID used in prepare_booking
paymentMethodstringNoPayment method (default: "CREDIT_LINE" for B2B)

Отговор

ПолеТипОписание
acceptedbooleanWhether booking confirmation was accepted
messagestring|nullConfirmation status message
voucherUrlstring|nullURL to booking voucher (if accepted)
serviceUnavailableboolean|absentPresent, and always true, ONLY when our credit service did not answer. Otherwise the key is OMITTED - test for PRESENCE, never for false (=== false never matches). Its absence is meaningful: the service answered, so accepted:false is a real refusal. See the warning below.

Пример

curl -X POST https://locktrip.com/mcp/tools/confirm_booking \
  -H "Content-Type: application/json" \
  -H "Authorization: Bearer eyJhbGciOiJIUzUxMiJ9..." \
  -d '{"bookingInternalId":"69a2b7540a93415a4b4dbf13","quoteId":"3e242771-1c15-4356-9a3b-1cd4bfc6d9fc_4384127"}'

# Response (200 OK):
{"accepted":true,"message":"Booking confirmed successfully","voucherUrl":"https://locktrip.com/booking/hotel/voucher/69a2b7540a93415a4b4dbf13"}

A credit-line refusal is not an error. If your line has insufficient balance, this tool returns HTTP 200 with accepted: false and the reason in message — it does not raise an error code. Branch on accepted, not on the HTTP status.

Treat serviceUnavailable: true differently from a refusal. It means our credit service did not answer, so we cannot tell you whether the reservation was applied. It may already be held against your line. Do not blindly retry — the reserve call is not idempotent and a retry can reserve the amount twice. Re-check the booking with get_booking_details before any second attempt.

create_checkout

Изисква автентикация

Създаване на Revolut URL за плащане на подготвена резервация. Връща хостван линк за плащане, на който потребителят кликва, за да плати. След плащането резервацията се потвърждава автоматично чрез webhook. Използвайте за B2C потребители.

Заявка

ПолеТипЗадълж.Описание
bookingIdstringYesBooking ID from prepare_booking (preparedBookingId)
currencystringYes3-letter currency code (e.g., USD, EUR, GBP)
backUrlstringNoCancel/back redirect URL (defaults to locktrip.com)
successUrlstringNoSuccess redirect URL

Отговор

ПолеТипОписание
checkoutUrlstringRevolut hosted checkout URL for payment
checkoutTokenstringPayment token for tracking
expiresInMinutesnumberToken expiration time (20 minutes)
messagestringUser instruction message

Пример

curl -X POST https://locktrip.com/mcp/tools/create_checkout \
  -H "Content-Type: application/json" \
  -H "Authorization: Bearer eyJhbGciOiJIUzUxMiJ9..." \
  -d '{"bookingId":"69a2b7540a93415a4b4dbf13","currency":"EUR"}'

# Response (200 OK):
{"checkoutUrl":"https://checkout.revolut.com/pay/abc123...","checkoutToken":"rev_tok_abc123...","expiresInMinutes":20,"message":"Payment checkout link created. Share this URL with the user to complete payment."}

get_payment_url

Изисква автентикация

Получаване на Stripe URL за плащане на подготвена резервация. Връща URL за пренасочване на клиента за завършване на плащането с кредитна карта.

Заявка

ПолеТипЗадълж.Описание
bookingIdstringYesBooking ID from prepare_booking (preparedBookingId)
currencystringYesPayment currency code (e.g., USD, EUR)
backUrlstringYesURL to redirect on cancel/back
successUrlstringNoCustom URL to redirect on success

Отговор

ПолеТипОписание
urlstringStripe checkout URL to redirect customer to
sessionIdstringStripe session ID for tracking

Пример

curl -X POST https://locktrip.com/mcp/tools/get_payment_url \
  -H "Content-Type: application/json" \
  -H "Authorization: Bearer eyJhbGciOiJIUzUxMiJ9..." \
  -d '{"bookingId":"69a2b7540a93415a4b4dbf13","currency":"EUR","backUrl":"https://example.com/cancel"}'

# Response (200 OK):
{"url":"https://checkout.stripe.com/c/pay/cs_live_abc123...","sessionId":"cs_live_abc123..."}

list_bookings

Изисква автентикация

Списък на резервации за автентикирания потребител. Филтриране по статус: UPCOMING, COMPLETED, CANCELLED или PENDING.

Заявка

ПолеТипЗадълж.Описание
typestringNo"UPCOMING", "COMPLETED", "CANCELLED", or "PENDING" (default: "UPCOMING")
pageignoredNoNOT SUPPORTED — accepted by the transport but silently discarded; this tool does not paginate.
sizeignoredNoNOT SUPPORTED — silently discarded. list_bookings returns the whole filtered set in one response.

Отговор

ПолеТипОписание
bookingsBookingSummary[]Array of booking summaries
bookings[].bookingIdstringBooking identifier
bookings[].bookingReferenceIdstringProvider reference ID
bookings[].hotelNamestringHotel name
bookings[].hotelCitystringALWAYS an empty string — the upstream list record carries no city. Use get_booking_details for the hotel’s city.
bookings[].checkInstringCheck-in date (YYYY-MM-DD)
bookings[].checkOutstringCheck-out date (YYYY-MM-DD)
bookings[].statusstringBooking status (DONE, PENDING, CANCELLED)
bookings[].totalPriceabsentNOT RETURNED. The upstream booking-list record carries no price, so this field is omitted rather than filled with a placeholder. Call get_booking_details for the real amount.
bookings[].currencyabsentNOT RETURNED, for the same reason. Call get_booking_details, which returns both totalPrice and currency.
bookings[].guestNamestringALWAYS the literal "Guest" — the upstream list record carries no guest name. Use get_booking_details for the real guests.
bookings[].roomCountnumberNumber of rooms
bookings[].createdAtstringBooking creation timestamp (ISO 8601)
bookings[].hotelPhotostring|nullHotel image URL
totalCountnumberNumber of bookings in THIS response. There is no pagination, so this is the full filtered set.
pagenumberAlways 0 — this tool does not paginate.
pageSizenumberEqual to totalCount; present for shape compatibility only.

Пример

curl -X POST https://locktrip.com/mcp/tools/list_bookings \
  -H "Content-Type: application/json" \
  -H "Authorization: Bearer eyJhbGciOiJIUzUxMiJ9..." \
  -d '{"type": "UPCOMING"}'

# Response (200 OK):
{"bookings":[{"bookingId":"69a2b7540a93415a4b4dbf13","bookingReferenceId":"LT-2026-AB12CD","hotelName":"Premiere Classe Plaisir","hotelCity":"","checkIn":"2027-04-15","checkOut":"2027-04-17","status":"DONE","guestName":"Guest","roomCount":1,"createdAt":"2026-02-28T09:35:00.000Z","hotelPhoto":"https://imagecontent.net/images/full/d174a039.jpeg"}],"totalCount":1,"page":0,"pageSize":1}

# NOTE: this endpoint is a summary index, not a detail view. totalPrice and currency are
# absent, and hotelCity / guestName are not populated by the upstream list record.
# Fetch a bookingId with get_booking_details for price, currency, guests and city.

get_booking_details

Изисква автентикация

Пълни детайли за конкретна резервация, включително информация за хотела, гости, стаи, статус на плащане и политика за анулиране.

Заявка

ПолеТипЗадълж.Описание
bookingIdstringYesBooking ID to retrieve

Отговор

ПолеТипОписание
bookingIdstringBooking identifier
bookingReferenceIdstringProvider reference ID
statusstringBooking status (DONE, PENDING, CANCELLED)
hotelobjectHotel details
hotel.namestringHotel name
hotel.addressstringStreet address
hotel.citystringCity
hotel.countrystringCountry
hotel.starRatingnumberStar rating (1-5)
checkInstringCheck-in date (YYYY-MM-DD)
checkOutstringCheck-out date (YYYY-MM-DD)
roomsRoom[]Booked rooms with guests
contactPersonobjectContact person (firstName, lastName, email, phone)
totalPricenumberTotal booking price
currencystringCurrency code
paymentStatusstringPayment status (PAID, PENDING)
cancellationPolicyobject|nullCancellation policy with fees and deadlines
createdAtstringBooking creation date
confirmedAtstring|nullConfirmation date (null if pending)

Пример

curl -X POST https://locktrip.com/mcp/tools/get_booking_details \
  -H "Content-Type: application/json" \
  -H "Authorization: Bearer eyJhbGciOiJIUzUxMiJ9..." \
  -d '{"bookingId": "69a2b7540a93415a4b4dbf13"}'

# Response (200 OK):
{"bookingId":"69a2b7540a93415a4b4dbf13","bookingReferenceId":"LT-2026-AB12CD","status":"DONE","hotel":{"id":4384127,"name":"Premiere Classe Plaisir","city":"Plaisir","country":"France","starRating":1},"checkIn":"2027-04-15","checkOut":"2027-04-17","totalPrice":71.34,"currency":"EUR","paymentStatus":"PAID","createdAt":"2026-02-28","confirmedAt":"2026-02-28"}

cancel_booking

Изисква автентикация

Заявка за анулиране на резервация. Първо извикайте с confirmed=false за преглед на таксите за анулиране, след това с confirmed=true за изпълнение. Връща сума за възстановяване и такса за анулиране.

Заявка

ПолеТипЗадълж.Описание
bookingIdstringYesBooking ID to cancel
confirmedbooleanYesSet true to execute cancellation
reasonstringNoReason for cancellation

Отговор

ПолеТипОписание
successbooleanWhether cancellation was executed
messagestringStatus message (preview or confirmation)

Пример

# Step 1: Preview cancellation (dry run)
curl -X POST https://locktrip.com/mcp/tools/cancel_booking \
  -H "Content-Type: application/json" \
  -H "Authorization: Bearer eyJhbGciOiJIUzUxMiJ9..." \
  -d '{"bookingId":"69a2b7540a93415a4b4dbf13","confirmed":false}'

# Response (200 OK):
{"success":false,"message":"Cancellation not confirmed. Set confirmed=true to proceed."}

# Step 2: Execute cancellation
curl -X POST https://locktrip.com/mcp/tools/cancel_booking \
  -H "Content-Type: application/json" \
  -H "Authorization: Bearer eyJhbGciOiJIUzUxMiJ9..." \
  -d '{"bookingId":"69a2b7540a93415a4b4dbf13","confirmed":true,"reason":"Change of plans"}'

# Response (200 OK):
{"success":true,"message":"Booking cancelled successfully"}

Машинно четими спецификации: OpenAPI 3.1 | Tool List | MCP Discovery | GraphQL B2B Docs

LockTrip Hotel Booking MCP API v1.0.0

API Documentation - MCP Hotel Booking Reference | LockTrip.com