Skip to main content

Payments

One-off and recurring payments, including Stripe checkout links.

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

POST /payments/cancel/{id}​

Cancel a payment. This changes financial state and should require owner confirmation when used by an agent.

Required scope: payments.write
MCP tool: payments_cancel

Path parameters

NameTypeRequiredDescription
idstringyes

Example

curl -X POST 'https://core.mtro.app/payments/cancel/<id>' \
-H 'Authorization: Bearer mtro_your_api_key'

POST /payments/capture/{id}​

Capture a payment when supported. This changes financial state and should require owner confirmation when used by an agent.

Required scope: payments.write
MCP tool: payments_capture

Path parameters

NameTypeRequiredDescription
idstringyes

Example

curl -X POST 'https://core.mtro.app/payments/capture/<id>' \
-H 'Authorization: Bearer mtro_your_api_key'

POST /payments/check/{id}​

Check a payment's current provider status and synchronize MTRO state.

Required scope: payments.read
MCP tool: payments_check

Path parameters

NameTypeRequiredDescription
idstringyes

Example

curl -X POST 'https://core.mtro.app/payments/check/<id>' \
-H 'Authorization: Bearer mtro_your_api_key'

POST /payments/create​

Create an online Stripe payment. This is externally visible and should require owner confirmation when used by an agent.

Required scope: payments.write
MCP tool: payments_create

Request body

note

Field names are taken from the Core handler. It also passes the body on to internal helpers, so it may accept fields beyond those listed here. Types are not yet documented.

FieldTypeRequiredDescription
amountanyno
bookingIdanyno
currencyanyno
descriptionanyno
dueDateanyno
feePayeranyno
noteanyno
notifyGuestanyno
paymentFlowanyno
paymentTypeanyno
platformFeePayeranyno
stripeAccountRefanyno

Example

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

POST /payments/create-manual​

Create a manual payment record. This writes account data and should require owner confirmation when used by an agent.

Required scope: payments.write
MCP tool: payments_create_manual

Request body

note

Field names are taken from the Core handler. It also passes the body on to internal helpers, so it may accept fields beyond those listed here. Types are not yet documented.

FieldTypeRequiredDescription
amountanyno
bookingIdanyno
currencyanyno
descriptionanyno
dueDateanyno
markAsPaidanyno
noteanyno
notifyGuestanyno
paymentMethodanyno

Example

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

POST /payments/generate-link/{id}​

Generate or refresh a payment checkout link. This may create a new Stripe session and should require owner confirmation when sent externally.

Required scope: payments.write
MCP tool: payments_generate_link

Path parameters

NameTypeRequiredDescription
idstringyes

Example

curl -X POST 'https://core.mtro.app/payments/generate-link/<id>' \
-H 'Authorization: Bearer mtro_your_api_key'

GET /payments/list​

List payments visible to the authenticated owner. Returns compact live payment rows with simple paymentRef values like PAY001. Prefer paymentRef over raw ObjectIds in later tool calls.

Required scope: payments.read
MCP tool: payments_list

Example

curl -X GET 'https://core.mtro.app/payments/list' \
-H 'Authorization: Bearer mtro_your_api_key'

Response

FieldType
paymentsany[]
errorboolean

POST /payments/mark-paid/{id}​

Mark a payment as paid. This changes financial state and should require owner confirmation when used by an agent.

Required scope: payments.write
MCP tool: payments_mark_paid

Path parameters

NameTypeRequiredDescription
idstringyes

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
paidAtanyno

Example

curl -X POST 'https://core.mtro.app/payments/mark-paid/<id>' \
-H 'Authorization: Bearer mtro_your_api_key' \
-H 'Content-Type: application/json' \
-d '{}'

POST /payments/recurring/cancel/{groupId}​

Cancel a recurring payment group. This changes financial state and should require owner confirmation when used by an agent.

Required scope: payments.write
MCP tool: payments_recurring_cancel

Path parameters

NameTypeRequiredDescription
groupIdstringyesRecurring group ID.

Example

curl -X POST 'https://core.mtro.app/payments/recurring/cancel/<groupId>' \
-H 'Authorization: Bearer mtro_your_api_key'

POST /payments/recurring/create​

Create a recurring payment group. This writes financial records and should require owner confirmation when used by an agent.

Required scope: payments.write
MCP tool: payments_recurring_create

Request body

note

Field names are taken from the Core handler. It also passes the body on to internal helpers, so it may accept fields beyond those listed here. Types are not yet documented.

FieldTypeRequiredDescription
amountanyno
bookingIdanyno
currencyanyno
dayOfWeekanyno
descriptionanyno
feePayeranyno
intervalanyno
noteanyno
notifyGuestanyno
paymentTypeanyno
platformFeePayeranyno
recurringCountanyno
startDateanyno
stripeAccountRefanyno

Example

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

GET /payments/recurring/list​

List recurring payment groups.

Required scope: payments.read
MCP tool: payments_recurring_list

Example

curl -X GET 'https://core.mtro.app/payments/recurring/list' \
-H 'Authorization: Bearer mtro_your_api_key'

Response

FieldType
messagestring
groupsany[]
errorboolean

POST /payments/recurring/reschedule/{groupId}​

Reschedule a recurring payment group. This changes financial state and should require owner confirmation when used by an agent.

Required scope: payments.write
MCP tool: payments_recurring_reschedule

Path parameters

NameTypeRequiredDescription
groupIdstringyesRecurring group ID.

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
intervalanyno
newStartDateanyno

Example

curl -X POST 'https://core.mtro.app/payments/recurring/reschedule/<groupId>' \
-H 'Authorization: Bearer mtro_your_api_key' \
-H 'Content-Type: application/json' \
-d '{}'

POST /payments/send-reminder/{id}​

Send a payment reminder to a guest. This sends external communication and should require owner confirmation when used by an agent.

Required scope: payments.write
MCP tool: payments_send_reminder

Path parameters

NameTypeRequiredDescription
idstringyes

Request body

FieldTypeRequiredDescription
customMessagestringnoOptional owner-written message included in the reminder.

Example

curl -X POST 'https://core.mtro.app/payments/send-reminder/<id>' \
-H 'Authorization: Bearer mtro_your_api_key' \
-H 'Content-Type: application/json' \
-d '{}'

GET /payments/stripe/accounts​

List Stripe Connect accounts and routing metadata for the authenticated entity.

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

Example

curl -X GET 'https://core.mtro.app/payments/stripe/accounts' \
-H 'Authorization: Bearer mtro_your_api_key'

Response

FieldType
accountsany[]
errorboolean

POST /payments/stripe/accounts​

Create a Stripe Connect account and onboarding link. This changes payout routing setup and should require owner confirmation when used by an agent.

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

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
defaultForPropertyIdsanyno
labelanyno
linkedPropertyIdsanyno
paymentTypesanyno

Example

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

DELETE /payments/stripe/accounts/{id}​

Disconnect/delete a Stripe account. This changes payout routing and should require owner confirmation when used by an agent.

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

Path parameters

NameTypeRequiredDescription
idstringyes

Example

curl -X DELETE 'https://core.mtro.app/payments/stripe/accounts/<id>' \
-H 'Authorization: Bearer mtro_your_api_key'

GET /payments/stripe/accounts/{id}/dashboard​

Get a Stripe Express dashboard link for a connected account.

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

Path parameters

NameTypeRequiredDescription
idstringyes

Example

curl -X GET 'https://core.mtro.app/payments/stripe/accounts/<id>/dashboard' \
-H 'Authorization: Bearer mtro_your_api_key'

Get a refreshed onboarding link for a Stripe account.

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

Path parameters

NameTypeRequiredDescription
idstringyes

Example

curl -X GET 'https://core.mtro.app/payments/stripe/accounts/<id>/onboarding-link' \
-H 'Authorization: Bearer mtro_your_api_key'

GET /payments/stripe/accounts/{id}/references​

Get references that would block disconnecting a Stripe account.

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

Path parameters

NameTypeRequiredDescription
idstringyes

Example

curl -X GET 'https://core.mtro.app/payments/stripe/accounts/<id>/references' \
-H 'Authorization: Bearer mtro_your_api_key'

POST /payments/stripe/accounts/{id}/set-default​

Set a Stripe account as the entity default. This changes routing and should require owner confirmation when used by an agent.

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

Path parameters

NameTypeRequiredDescription
idstringyes

Example

curl -X POST 'https://core.mtro.app/payments/stripe/accounts/<id>/set-default' \
-H 'Authorization: Bearer mtro_your_api_key'

GET /payments/stripe/accounts/{id}/status​

Refresh and return Stripe account onboarding/status information.

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

Path parameters

NameTypeRequiredDescription
idstringyes

Example

curl -X GET 'https://core.mtro.app/payments/stripe/accounts/<id>/status' \
-H 'Authorization: Bearer mtro_your_api_key'

POST /payments/stripe/accounts/{id}/update​

Update Stripe account label, payment type routing, linked properties, or property defaults. This changes routing and should require owner confirmation when used by an agent.

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

Path parameters

NameTypeRequiredDescription
idstringyes

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
defaultForPropertyIdsanyno
labelanyno
linkedPropertyIdsanyno
paymentTypesanyno
propertyIdsanyno

Example

curl -X POST 'https://core.mtro.app/payments/stripe/accounts/<id>/update' \
-H 'Authorization: Bearer mtro_your_api_key' \
-H 'Content-Type: application/json' \
-d '{}'

POST /payments/update/{id}​

Update a payment. This writes account data and should require owner confirmation when used by an agent.

Required scope: payments.write
MCP tool: payments_update

Path parameters

NameTypeRequiredDescription
idstringyes

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
amountanyno
descriptionanyno
dueDateanyno
feePayeranyno
noteanyno
paymentCategoryanyno
platformFeePayeranyno

Example

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