Skip to main content

Properties

Rental properties, their rates, availability, and public listings.

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

POST /properties/create​

Create a new property. Required fields: propertyName, address, bedrooms, bathrooms, squareFootage. Optional: description, amenities, rate, minimumDays, maxGuests, pets, templateId, location.

Required scope: properties.create
MCP tool: properties_create

Request body

FieldTypeRequiredDescription
propertyNamestringyesProperty name (must be unique)
addressstringyesFull address of the property
bedroomsnumberyesNumber of bedrooms
bathroomsnumberyesNumber of bathrooms
squareFootagenumberyesSquare footage of the property
descriptionstringnoProperty description (max 500 chars)
amenitiesobjectnoAmenities object, e.g. {wifi: true, pool: true}
rateobject[]noMonthly rates array, e.g. [{month: 1, rate: 150}, {month: 6, rate: 200}]
minimumDaysnumbernoMinimum booking days (default 1)
maxGuestsobjectnoMaximum guests allowed
templateIdstringnoLease template ID to use for this property

Example

curl -X POST 'https://core.mtro.app/properties/create' \
-H 'Authorization: Bearer mtro_your_api_key' \
-H 'Content-Type: application/json' \
-d '{"propertyName":"<propertyName>","address":"<address>","bedrooms":0,"bathrooms":0,"squareFootage":0}'

POST /properties/delete​

Delete a property by its ID. This action cannot be undone.

Required scope: properties.write
MCP tool: properties_delete

Request body

FieldTypeRequiredDescription
propertyIdstringyesThe property ID to delete

Example

curl -X POST 'https://core.mtro.app/properties/delete' \
-H 'Authorization: Bearer mtro_your_api_key' \
-H 'Content-Type: application/json' \
-d '{"propertyId":"<propertyId>"}'

GET /properties/get/{propertyId}​

Get detailed information about a specific property by its ID.

Required scope: properties.read
MCP tool: properties_get

Path parameters

NameTypeRequiredDescription
propertyIdstringyesThe property ID

Example

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

Response

FieldType
propertyobject
errorboolean
Fields of property
FieldType
amenitiesobject
maxGuestsobject
petsobject
_idstring
propertyNamestring
internalNamestring
furnishedFinderPropertyIdstring
coHostingboolean
isListedboolean
descriptionstring
addressstring
citystring
statestring
zipCodestring
aptSuitestring
internalNotesstring
timezonestring
checkInTimestring
checkOutTimestring
turnoverBufferMinutesinteger
bedroomsinteger
bathroomsinteger
squareFootageinteger
entityOwnerstring
additionalOwnersany[]
stripeAccountIdany
stripeAccountStatusany
defaultStripeAccountIdany
imagesany[]
heroImageany
minimumDaysinteger
paymentMethodstring
lateFeeAmountany
lateFeePeriodstring
lastUpdatedinteger
templateIdstring
leaseDocumentsany[]
defaultMergeFieldValuesobject
rateany[]
syncCalendarsany[]
__vinteger

GET /properties/get/{propertyId}/synced-calendar-events​

Get imported/synced calendar events for a property.

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

Path parameters

NameTypeRequiredDescription
propertyIdstringyesThe property ID

Example

curl -X GET 'https://core.mtro.app/properties/get/<propertyId>/synced-calendar-events' \
-H 'Authorization: Bearer mtro_your_api_key'

Response

FieldType
eventsany[]
errorboolean

GET /properties/get/all​

List all properties you have access to. Returns property names, addresses, bedrooms, bathrooms, rates, and more.

Required scope: properties.read
MCP tool: properties_list

Example

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

Response

FieldType
propertiesobject[]
errorboolean
Fields of properties[]
FieldType
idstring
propertyNamestring
internalNamestring
furnishedFinderPropertyIdstring
coHostingboolean
isListedboolean
descriptionstring
addressstring
citystring
statestring
zipCodestring
aptSuitestring
internalNotesstring
timezonestring
checkInTimestring
checkOutTimestring
turnoverBufferMinutesinteger
bedroomsinteger
bathroomsinteger
squareFootageinteger
amenitiesobject
entityOwnerstring
additionalOwnersany[]
imagesany[]
heroImageany
rateany[]
minimumDaysinteger
paymentMethodstring
lateFeeAmountany
lateFeePeriodstring
syncCalendarsany[]
lastUpdatedinteger
locationobject
maxGuestsobject
petsobject
templateIdstring
leaseDocumentsany[]
defaultMergeFieldValuesobject

GET /properties/get/entity/{entityId}​

Get all properties belonging to a specific entity (admin only).

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

Path parameters

NameTypeRequiredDescription
entityIdstringyesThe entity ID

Example

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

POST /properties/invite-owners/{propertyId}​

Invite property owners to a property. This sends external communication and should require owner confirmation when used by an agent.

Required scope: properties.write
MCP tool: properties_invite_owners

Path parameters

NameTypeRequiredDescription
propertyIdstringyesThe property ID

Request body

FieldTypeRequiredDescription
entityIdsstring[]yesEntity ids to invite as owners of this property.

Example

curl -X POST 'https://core.mtro.app/properties/invite-owners/<propertyId>' \
-H 'Authorization: Bearer mtro_your_api_key' \
-H 'Content-Type: application/json' \
-d '{"entityIds":"<entityIds>"}'

POST /properties/public/calculate-rate​

Calculate a public quote/rate for a property and date range.

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

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
propertyIdanyno
startDateanyno

Example

curl -X POST 'https://core.mtro.app/properties/public/calculate-rate' \
-H 'Authorization: Bearer mtro_your_api_key' \
-H 'Content-Type: application/json' \
-d '{}'

POST /properties/send-invitation​

Send a property invitation. This sends external communication and should require owner confirmation when used by an agent.

Required scope: bookings.write
MCP tool: properties_send_invitation

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
guestEmailanyno
guestNameanyno
propertyIdanyno
rateanyno
startDateanyno

Example

curl -X POST 'https://core.mtro.app/properties/send-invitation' \
-H 'Authorization: Bearer mtro_your_api_key' \
-H 'Content-Type: application/json' \
-d '{}'

POST /properties/update​

Update an existing property. Pass the propertyId and any fields to update.

Required scope: properties.write
MCP tool: properties_update

Request body

FieldTypeRequiredDescription
propertyIdstringyesThe property ID to update
propertyNamestringnoNew property name
addressstringnoNew address
bedroomsnumbernoNumber of bedrooms
bathroomsnumbernoNumber of bathrooms
squareFootagenumbernoSquare footage
descriptionstringnoProperty description
amenitiesobjectnoAmenities to update
rateobject[]noMonthly rates array
minimumDaysnumbernoMinimum booking days
maxGuestsobjectnoMaximum guests
templateIdstringnoLease template ID

Example

curl -X POST 'https://core.mtro.app/properties/update' \
-H 'Authorization: Bearer mtro_your_api_key' \
-H 'Content-Type: application/json' \
-d '{"propertyId":"<propertyId>"}'