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
| Name | Type | Required | Description |
|---|---|---|---|
id | string | yes |
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
| Name | Type | Required | Description |
|---|---|---|---|
id | string | yes |
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
| Name | Type | Required | Description |
|---|---|---|---|
id | string | yes |
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
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.
| Field | Type | Required | Description |
|---|---|---|---|
amount | any | no | |
bookingId | any | no | |
currency | any | no | |
description | any | no | |
dueDate | any | no | |
feePayer | any | no | |
note | any | no | |
notifyGuest | any | no | |
paymentFlow | any | no | |
paymentType | any | no | |
platformFeePayer | any | no | |
stripeAccountRef | any | no |
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
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.
| Field | Type | Required | Description |
|---|---|---|---|
amount | any | no | |
bookingId | any | no | |
currency | any | no | |
description | any | no | |
dueDate | any | no | |
markAsPaid | any | no | |
note | any | no | |
notifyGuest | any | no | |
paymentMethod | any | no |
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
| Name | Type | Required | Description |
|---|---|---|---|
id | string | yes |
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
| Field | Type |
|---|---|
payments | any[] |
error | boolean |
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
| Name | Type | Required | Description |
|---|---|---|---|
id | string | yes |
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 |
|---|---|---|---|
paidAt | any | no |
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
| Name | Type | Required | Description |
|---|---|---|---|
groupId | string | yes | Recurring 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
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.
| Field | Type | Required | Description |
|---|---|---|---|
amount | any | no | |
bookingId | any | no | |
currency | any | no | |
dayOfWeek | any | no | |
description | any | no | |
feePayer | any | no | |
interval | any | no | |
note | any | no | |
notifyGuest | any | no | |
paymentType | any | no | |
platformFeePayer | any | no | |
recurringCount | any | no | |
startDate | any | no | |
stripeAccountRef | any | no |
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
| Field | Type |
|---|---|
message | string |
groups | any[] |
error | boolean |
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
| Name | Type | Required | Description |
|---|---|---|---|
groupId | string | yes | Recurring group ID. |
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 |
|---|---|---|---|
interval | any | no | |
newStartDate | any | no |
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
| Name | Type | Required | Description |
|---|---|---|---|
id | string | yes |
Request body
| Field | Type | Required | Description |
|---|---|---|---|
customMessage | string | no | Optional 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
| Field | Type |
|---|---|
accounts | any[] |
error | boolean |
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
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 |
|---|---|---|---|
defaultForPropertyIds | any | no | |
label | any | no | |
linkedPropertyIds | any | no | |
paymentTypes | any | no |
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
| Name | Type | Required | Description |
|---|---|---|---|
id | string | yes |
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
| Name | Type | Required | Description |
|---|---|---|---|
id | string | yes |
Example
curl -X GET 'https://core.mtro.app/payments/stripe/accounts/<id>/dashboard' \
-H 'Authorization: Bearer mtro_your_api_key'
GET /payments/stripe/accounts/{id}/onboarding-link
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
| Name | Type | Required | Description |
|---|---|---|---|
id | string | yes |
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
| Name | Type | Required | Description |
|---|---|---|---|
id | string | yes |
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
| Name | Type | Required | Description |
|---|---|---|---|
id | string | yes |
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
| Name | Type | Required | Description |
|---|---|---|---|
id | string | yes |
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
| Name | Type | Required | Description |
|---|---|---|---|
id | string | yes |
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 |
|---|---|---|---|
defaultForPropertyIds | any | no | |
label | any | no | |
linkedPropertyIds | any | no | |
paymentTypes | any | no | |
propertyIds | any | no |
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
| Name | Type | Required | Description |
|---|---|---|---|
id | string | yes |
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 |
|---|---|---|---|
amount | any | no | |
description | any | no | |
dueDate | any | no | |
feePayer | any | no | |
note | any | no | |
paymentCategory | any | no | |
platformFeePayer | any | no |
Example
curl -X POST 'https://core.mtro.app/payments/update/<id>' \
-H 'Authorization: Bearer mtro_your_api_key' \
-H 'Content-Type: application/json' \
-d '{}'