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
| Field | Type | Required | Description |
|---|---|---|---|
propertyName | string | yes | Property name (must be unique) |
address | string | yes | Full address of the property |
bedrooms | number | yes | Number of bedrooms |
bathrooms | number | yes | Number of bathrooms |
squareFootage | number | yes | Square footage of the property |
description | string | no | Property description (max 500 chars) |
amenities | object | no | Amenities object, e.g. {wifi: true, pool: true} |
rate | object[] | no | Monthly rates array, e.g. [{month: 1, rate: 150}, {month: 6, rate: 200}] |
minimumDays | number | no | Minimum booking days (default 1) |
maxGuests | object | no | Maximum guests allowed |
templateId | string | no | Lease 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
| Field | Type | Required | Description |
|---|---|---|---|
propertyId | string | yes | The 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
| Name | Type | Required | Description |
|---|---|---|---|
propertyId | string | yes | The property ID |
Example
curl -X GET 'https://core.mtro.app/properties/get/<propertyId>' \
-H 'Authorization: Bearer mtro_your_api_key'
Response
| Field | Type |
|---|---|
property | object |
error | boolean |
Fields of property
| Field | Type |
|---|---|
amenities | object |
maxGuests | object |
pets | object |
_id | string |
propertyName | string |
internalName | string |
furnishedFinderPropertyId | string |
coHosting | boolean |
isListed | boolean |
description | string |
address | string |
city | string |
state | string |
zipCode | string |
aptSuite | string |
internalNotes | string |
timezone | string |
checkInTime | string |
checkOutTime | string |
turnoverBufferMinutes | integer |
bedrooms | integer |
bathrooms | integer |
squareFootage | integer |
entityOwner | string |
additionalOwners | any[] |
stripeAccountId | any |
stripeAccountStatus | any |
defaultStripeAccountId | any |
images | any[] |
heroImage | any |
minimumDays | integer |
paymentMethod | string |
lateFeeAmount | any |
lateFeePeriod | string |
lastUpdated | integer |
templateId | string |
leaseDocuments | any[] |
defaultMergeFieldValues | object |
rate | any[] |
syncCalendars | any[] |
__v | integer |
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
| Name | Type | Required | Description |
|---|---|---|---|
propertyId | string | yes | The property ID |
Example
curl -X GET 'https://core.mtro.app/properties/get/<propertyId>/synced-calendar-events' \
-H 'Authorization: Bearer mtro_your_api_key'
Response
| Field | Type |
|---|---|
events | any[] |
error | boolean |
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
| Field | Type |
|---|---|
properties | object[] |
error | boolean |
Fields of properties[]
| Field | Type |
|---|---|
id | string |
propertyName | string |
internalName | string |
furnishedFinderPropertyId | string |
coHosting | boolean |
isListed | boolean |
description | string |
address | string |
city | string |
state | string |
zipCode | string |
aptSuite | string |
internalNotes | string |
timezone | string |
checkInTime | string |
checkOutTime | string |
turnoverBufferMinutes | integer |
bedrooms | integer |
bathrooms | integer |
squareFootage | integer |
amenities | object |
entityOwner | string |
additionalOwners | any[] |
images | any[] |
heroImage | any |
rate | any[] |
minimumDays | integer |
paymentMethod | string |
lateFeeAmount | any |
lateFeePeriod | string |
syncCalendars | any[] |
lastUpdated | integer |
location | object |
maxGuests | object |
pets | object |
templateId | string |
leaseDocuments | any[] |
defaultMergeFieldValues | object |
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
| Name | Type | Required | Description |
|---|---|---|---|
entityId | string | yes | The 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
| Name | Type | Required | Description |
|---|---|---|---|
propertyId | string | yes | The property ID |
Request body
| Field | Type | Required | Description |
|---|---|---|---|
entityIds | string[] | yes | Entity 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
Field names are taken from the Core handler, which reads exactly these. Types and which of them are required are not yet documented.
| Field | Type | Required | Description |
|---|---|---|---|
endDate | any | no | |
propertyId | any | no | |
startDate | any | no |
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
Field names are taken from the Core handler, which reads exactly these. Types and which of them are required are not yet documented.
| Field | Type | Required | Description |
|---|---|---|---|
endDate | any | no | |
guestEmail | any | no | |
guestName | any | no | |
propertyId | any | no | |
rate | any | no | |
startDate | any | no |
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
| Field | Type | Required | Description |
|---|---|---|---|
propertyId | string | yes | The property ID to update |
propertyName | string | no | New property name |
address | string | no | New address |
bedrooms | number | no | Number of bedrooms |
bathrooms | number | no | Number of bathrooms |
squareFootage | number | no | Square footage |
description | string | no | Property description |
amenities | object | no | Amenities to update |
rate | object[] | no | Monthly rates array |
minimumDays | number | no | Minimum booking days |
maxGuests | object | no | Maximum guests |
templateId | string | no | Lease 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>"}'