Skip to main content

Bookings

Reservations and date blocks, from availability checks to lease signing.

15 endpoints. Every request needs an Authorization: Bearer mtro_... header, and responses follow the envelope described in Errors and conventions.

POST /bookings/block-dates​

Block dates on a property (e.g. for maintenance or owner use). Creates a blocked-dates booking.

Required scope: bookings.write
MCP tool: bookings_block_dates

Request body

FieldTypeRequiredDescription
propertyIdstringyesProperty ID to block dates on
startDatenumberyesBlock start date (timestamp ms)
endDatenumberyesBlock end date (timestamp ms)
notesstringnoReason for blocking dates

Example

curl -X POST 'https://core.mtro.app/bookings/block-dates' \
-H 'Authorization: Bearer mtro_your_api_key' \
-H 'Content-Type: application/json' \
-d '{"propertyId":"<propertyId>","startDate":0,"endDate":0}'

POST /bookings/block-dates/delete/{bookingId}​

Delete an owner block/blocked-dates booking. This is destructive and should require owner confirmation when used by an agent.

Required scope: bookings.write
MCP tool: bookings_delete_block_dates

Path parameters

NameTypeRequiredDescription
bookingIdstringyes

Example

curl -X POST 'https://core.mtro.app/bookings/block-dates/delete/<bookingId>' \
-H 'Authorization: Bearer mtro_your_api_key'

POST /bookings/block-dates/update/{bookingId}​

Update an owner block/blocked-dates booking. This writes calendar state and should require owner confirmation when used by an agent.

Required scope: bookings.write
MCP tool: bookings_update_block_dates

Path parameters

NameTypeRequiredDescription
bookingIdstringyes

Request body

note

Field names are taken from the Core handler, which reads exactly these. Types and which of them are required are not yet documented.

FieldTypeRequiredDescription
endDateanyno
notesanyno
startDateanyno

Example

curl -X POST 'https://core.mtro.app/bookings/block-dates/update/<bookingId>' \
-H 'Authorization: Bearer mtro_your_api_key' \
-H 'Content-Type: application/json' \
-d '{}'

POST /bookings/create​

Create a new booking. Required: propertyId, startDate (timestamp ms), endDate (timestamp ms). The primary guest is identified by guestEmail: Core finds the matching guest or creates one from guestName, guestSurname and guestMobile.

Required scope: bookings.write
MCP tool: bookings_create

Request body

FieldTypeRequiredDescription
propertyIdstringyesProperty ID for the booking
startDatenumberyesStart date as millisecond timestamp
endDatenumberyesEnd date as millisecond timestamp
guestEmailstringnoPrimary guest email. Core matches an existing guest on this address or creates one.
guestNamestringnoPrimary guest first name, used when the guest has to be created
guestSurnamestringnoPrimary guest surname, used when the guest has to be created
guestMobilestringnoPrimary guest mobile number in E.164 format
ratenumbernoRate per day
sourcestringnoBooking source
statusstringnoBooking status: confirmed, pending, cancelled
notesstringnoBooking notes
leadIdstringnoLead this booking was converted from
templateIdstringnoLease template ID
customFieldsobject[]noCustom field values for the booking

Example

curl -X POST 'https://core.mtro.app/bookings/create' \
-H 'Authorization: Bearer mtro_your_api_key' \
-H 'Content-Type: application/json' \
-d '{"propertyId":"<propertyId>","startDate":0,"endDate":0}'

POST /bookings/delete/{bookingId}​

Delete a booking by bookingRef. This action cannot be undone.

Required scope: bookings.write
MCP tool: bookings_delete

Path parameters

NameTypeRequiredDescription
bookingIdstringyes

Example

curl -X POST 'https://core.mtro.app/bookings/delete/<bookingId>' \
-H 'Authorization: Bearer mtro_your_api_key'

GET /bookings/get/{bookingId}​

Get detailed information about a specific booking by bookingRef or raw booking ID.

Required scope: bookings.read
MCP tool: bookings_get

Path parameters

NameTypeRequiredDescription
bookingIdanyyesRaw booking ObjectId.

Example

curl -X GET 'https://core.mtro.app/bookings/get/<bookingId>' \
-H 'Authorization: Bearer mtro_your_api_key'

Response

FieldType
messagestring
errorboolean
bookingobject
Fields of booking
FieldType
idstring
createdAtinteger
propertyIdstring
guestIdstring
additionalGuestsany[]
startDateinteger
endDateinteger
startDateOnlystring
endDateOnlystring
dateSemanticsobject
rateinteger
sourcestring
statusstring
guestsobject
petsobject
customFieldsany[]
mergeFieldValuesobject
leaseDocumentsany[]
leasePackageany
lastUpdatedinteger
guestSignany[]
ownerSignany[]
backgroundCheckProviderany
backgroundCheckCreditCheckRequestedboolean
backgroundCheckCreditCheckLockedboolean
backgroundCheckStatusany
backgroundCheckProviderStatusany
backgroundCheckProviderRequestIdany
backgroundCheckProviderReservationIdany
backgroundCheckGuestPortalUrlany
backgroundCheckReportUrlany
backgroundCheckGuestPortalStatusany
backgroundCheckGuestPortalLastScreenany
backgroundCheckRiskColorany
backgroundCheckTopRisksany[]
backgroundCheckRequestedAtany
backgroundCheckCompletedAtany
backgroundCheckLastSyncedAtany
backgroundCheckErrorany
backgroundCheckReviewReasonany
backgroundCheckActionRequiredany
backgroundCheckCanResumeIdentityVerificationboolean
backgroundCheckPackageany
backgroundCheckPackageLabelany
backgroundCheckPackagePriceCentsany
backgroundCheckSelectedGuestsany[]
backgroundCheckPayerany
backgroundCheckPaymentStatusany
backgroundCheckPaymentCheckoutUrlany
backgroundCheckPaymentIntentIdany
backgroundCheckPaymentChargedAtany
backgroundCheckPaymentErrorany
backgroundCheckBillingAcceptedAtany
backgroundCheckBillingAcceptedByany
backgroundCheckRequestedByany
backgroundCheckOwnerPaymentMethodAvailableboolean
surveyStatusany
guestobject
propertyobject
platformFeePayerstring
initialPaymentIdany
leaseReadinessobject
progressobject

GET /bookings/get/all​

List all bookings you have access to. Returns compact live booking rows with simple bookingRef values like B001. Prefer bookingRef over raw ObjectIds in later tool calls.

Required scope: bookings.read
MCP tool: bookings_list

Example

curl -X GET 'https://core.mtro.app/bookings/get/all' \
-H 'Authorization: Bearer mtro_your_api_key'

Response

FieldType
messagestring
errorboolean
bookingsobject[]
Fields of bookings[]
FieldType
idstring
createdAtinteger
propertyIdstring
guestIdstring
additionalGuestsany[]
startDateinteger
endDateinteger
startDateOnlystring
endDateOnlystring
dateSemanticsobject
rateinteger
sourcestring
statusstring
calendarBlockedAtany
surveyStatusany
hasSurveyboolean
guestsobject
petsobject
customFieldsany[]
mergeFieldValuesobject
leaseDocumentsany[]
leasePackageany
lastUpdatedinteger
guestSignany[]
ownerSignany[]
backgroundCheckProviderstring
backgroundCheckCreditCheckRequestedboolean
backgroundCheckCreditCheckLockedboolean
backgroundCheckStatusany
backgroundCheckProviderStatusany
backgroundCheckProviderRequestIdany
backgroundCheckProviderReservationIdany
backgroundCheckGuestPortalUrlany
backgroundCheckReportUrlany
backgroundCheckGuestPortalStatusany
backgroundCheckGuestPortalLastScreenany
backgroundCheckRiskColorany
backgroundCheckTopRisksany[]
backgroundCheckRequestedAtany
backgroundCheckCompletedAtany
backgroundCheckLastSyncedAtany
backgroundCheckErrorany
backgroundCheckReviewReasonany
backgroundCheckActionRequiredany
backgroundCheckCanResumeIdentityVerificationboolean
backgroundCheckPackageany
backgroundCheckPackageLabelany
backgroundCheckPackagePriceCentsany
backgroundCheckSelectedGuestsany[]
backgroundCheckPayerany
backgroundCheckPaymentStatusany
backgroundCheckPaymentCheckoutUrlany
backgroundCheckPaymentIntentIdany
backgroundCheckPaymentChargedAtany
backgroundCheckPaymentErrorany
backgroundCheckBillingAcceptedAtany
backgroundCheckBillingAcceptedByany
backgroundCheckRequestedByany
backgroundCheckOwnerPaymentMethodAvailableboolean
backgroundCheckRequestedByUserany
platformFeePayerstring
initialPaymentIdany
guestobject
propertyobject
progressobject

POST /bookings/public/check-availability​

Check if a property is available for specific dates.

Required scope: any valid API key for the entity.
MCP tool: bookings_check_availability

Request body

FieldTypeRequiredDescription
propertyIdstringyesProperty ID to check
startDatenumberyesStart date as millisecond timestamp
endDatenumberyesEnd date as millisecond timestamp

Example

curl -X POST 'https://core.mtro.app/bookings/public/check-availability' \
-H 'Authorization: Bearer mtro_your_api_key' \
-H 'Content-Type: application/json' \
-d '{"propertyId":"<propertyId>","startDate":0,"endDate":0}'

POST /bookings/request-background-check/{bookingId}​

Request a background check for a booking. This can trigger external workflow and should require owner confirmation when used by an agent.

Required scope: bookings.write
MCP tool: bookings_request_background_check

Path parameters

NameTypeRequiredDescription
bookingIdstringyes

Request body

note

Field names are taken from the Core handler, which reads exactly these. Types and which of them are required are not yet documented.

FieldTypeRequiredDescription
applicationTypeanyno
creditCheckRequestedanyno
packageTypeanyno
payeranyno
savePaymentMethodForFutureanyno
selectedGuestsanyno

Example

curl -X POST 'https://core.mtro.app/bookings/request-background-check/<bookingId>' \
-H 'Authorization: Bearer mtro_your_api_key' \
-H 'Content-Type: application/json' \
-d '{}'

POST /bookings/reverse-to-lead/{bookingId}​

Reverse a booking back to a lead. This changes workflow state and should require owner confirmation when used by an agent.

Required scope: bookings.write
MCP tool: bookings_reverse_to_lead

Path parameters

NameTypeRequiredDescription
bookingIdstringyes

Example

curl -X POST 'https://core.mtro.app/bookings/reverse-to-lead/<bookingId>' \
-H 'Authorization: Bearer mtro_your_api_key'

POST /bookings/set-background-check-approval/{bookingId}​

Approve or reject a booking background check. This changes booking state and should require owner confirmation when used by an agent.

Required scope: bookings.write
MCP tool: bookings_set_background_check_approval

Path parameters

NameTypeRequiredDescription
bookingIdstringyes

Request body

FieldTypeRequiredDescription
approvalbooleanyesSet true to approve the background check, false to reject it.

Example

curl -X POST 'https://core.mtro.app/bookings/set-background-check-approval/<bookingId>' \
-H 'Authorization: Bearer mtro_your_api_key' \
-H 'Content-Type: application/json' \
-d '{"approval":true}'

POST /bookings/set-lease-prepared/{bookingId}​

Mark lease preparation state for a booking. This writes account data and should require owner confirmation when used by an agent.

Required scope: bookings.write, leases.sign
MCP tool: bookings_set_lease_prepared

Path parameters

NameTypeRequiredDescription
bookingIdstringyes

Request body

note

Field names are taken from the Core handler, which reads exactly these. Types and which of them are required are not yet documented.

FieldTypeRequiredDescription
feePayeranyno
initialPaymentAmountanyno
ownerNameanyno
platformFeePayeranyno
signatureanyno

Example

curl -X POST 'https://core.mtro.app/bookings/set-lease-prepared/<bookingId>' \
-H 'Authorization: Bearer mtro_your_api_key' \
-H 'Content-Type: application/json' \
-d '{}'

POST /bookings/set-primary-guest/{bookingId}​

Set the primary guest for a booking that does not have one yet. This writes account data and should require owner confirmation when used by an agent.

Required scope: bookings.write
MCP tool: bookings_set_primary_guest

Path parameters

NameTypeRequiredDescription
bookingIdstringyes

Request body

FieldTypeRequiredDescription
guestEmailstringyesEmail of the guest to set as primary. Core matches an existing guest on this address or creates one.
guestNamestringnoGuest first name, used when the guest has to be created
guestSurnamestringnoGuest surname, used when the guest has to be created

Example

curl -X POST 'https://core.mtro.app/bookings/set-primary-guest/<bookingId>' \
-H 'Authorization: Bearer mtro_your_api_key' \
-H 'Content-Type: application/json' \
-d '{"guestEmail":"<guestEmail>"}'

POST /bookings/sign/{bookingId}​

Sign a booking/lease as owner. This is legally significant and should require owner confirmation when used by an agent.

Required scope: leases.sign
MCP tool: bookings_sign

Path parameters

NameTypeRequiredDescription
bookingIdstringyes

Request body

note

Field names are taken from the Core handler, which reads exactly these. Types and which of them are required are not yet documented.

FieldTypeRequiredDescription
ownerNameanyno
signatureanyyes

Example

curl -X POST 'https://core.mtro.app/bookings/sign/<bookingId>' \
-H 'Authorization: Bearer mtro_your_api_key' \
-H 'Content-Type: application/json' \
-d '{"signature":"<signature>"}'

POST /bookings/update/{bookingId}​

Update an existing booking. Use bookingRef from bookings_list, plus any fields to update.

Required scope: bookings.write
MCP tool: bookings_update

Path parameters

NameTypeRequiredDescription
bookingIdstringyes

Example

curl -X POST 'https://core.mtro.app/bookings/update/<bookingId>' \
-H 'Authorization: Bearer mtro_your_api_key'