Skip to content

Read what the hotel paid for card processing in a month

GET
/v1/merchant-accounts/{merchant_account_id}/processing-fees
curl --request GET \
--url 'https://api.aerandil.com/v1/merchant-accounts/2489E9AD-2EE2-8E00-8EC9-32D5F69181C0/processing-fees?month=example' \
--header 'Authorization: Bearer <token>'

What the hotel paid the platform for card processing in the house’s calendar month, per currency: the application fees Stripe took on the account’s charges (under the pricing decision, Stripe’s published rate for the card’s class plus 0.40%), net of the fees a refund handed back, and how many card payments paid one — read off the platform’s own balance transactions (platform_ledger_line), the same fold as the night-audit close’s platform.processing_fees, so the month is the sum of its days. Never the processor’s actual fee, the variance or the margin: those are the operator’s (/platform-earnings). The general manager’s read (analytics:read, from a desk shift at the house — another house’s account is a 403 property_out_of_scope) or the operator’s (tenant_admin:write).

merchant_account_id
required
string format: uuid

The property’s merchant account.

month
required
string
/^[0-9]{4}-[0-9]{2}$/

The house’s calendar month, YYYY-MM.

The month’s card processing fees on the account.

Media typeapplication/json
object
from
required
string format: date
merchant_account_id
required
string format: uuid
month
required
string
processing_fees
required
Array<object>
object
charges
required

Card payments that paid an application fee.

integer
currency
required
string
total
required

The application fees paid, net of fees refunded.

string format: decimal
property_id
string format: uuid
to
required
string format: date
Examplegenerated
{
"from": "2026-04-15",
"merchant_account_id": "2489E9AD-2EE2-8E00-8EC9-32D5F69181C0",
"month": "example",
"processing_fees": [
{
"charges": 1,
"currency": "example",
"total": "example"
}
],
"property_id": "2489E9AD-2EE2-8E00-8EC9-32D5F69181C0",
"to": "2026-04-15"
}
Cache-Control
string

Always no-store. Object and link state is live data and is never cacheable.

The bearer authenticated but does not hold the scope this operation requires.

Media typeapplication/json

Structured error wrapper. Every non-2xx response from any Aerandil endpoint serialises to this shape; the HTTP status carries the failure class (4xx/5xx), the body adds a stable code for programmatic dispatch plus a human-readable message.

object
error
required
object
code
required

Stable, programmatic error code (e.g. unauthorized, forbidden, not_found, invalid_body, invalid_url, precondition_failed, no_secondary_key). Clients dispatch on code, not on the message (which may be localised or contextualised in future versions).

string
instance_id

Request-id correlation handle echoed on the request-id response header — support teams correlate without scraping logs.

string
message
required

Human-readable explanation of the failure.

string
parameters

Per-error structured detail. The shape varies by code (e.g. forbidden_action carries {"action": "..."}; precondition_failed carries {"current_version": N}).

Examplegenerated
{
"error": {
"code": "example",
"instance_id": "example",
"message": "example",
"parameters": "example"
}
}

No such object in the caller’s tenant — which is also the answer when it exists in another tenant, by design.

Media typeapplication/json

Structured error wrapper. Every non-2xx response from any Aerandil endpoint serialises to this shape; the HTTP status carries the failure class (4xx/5xx), the body adds a stable code for programmatic dispatch plus a human-readable message.

object
error
required
object
code
required

Stable, programmatic error code (e.g. unauthorized, forbidden, not_found, invalid_body, invalid_url, precondition_failed, no_secondary_key). Clients dispatch on code, not on the message (which may be localised or contextualised in future versions).

string
instance_id

Request-id correlation handle echoed on the request-id response header — support teams correlate without scraping logs.

string
message
required

Human-readable explanation of the failure.

string
parameters

Per-error structured detail. The shape varies by code (e.g. forbidden_action carries {"action": "..."}; precondition_failed carries {"current_version": N}).

Examplegenerated
{
"error": {
"code": "example",
"instance_id": "example",
"message": "example",
"parameters": "example"
}
}

month is missing or not YYYY-MM.

Media typeapplication/json

Structured error wrapper. Every non-2xx response from any Aerandil endpoint serialises to this shape; the HTTP status carries the failure class (4xx/5xx), the body adds a stable code for programmatic dispatch plus a human-readable message.

object
error
required
object
code
required

Stable, programmatic error code (e.g. unauthorized, forbidden, not_found, invalid_body, invalid_url, precondition_failed, no_secondary_key). Clients dispatch on code, not on the message (which may be localised or contextualised in future versions).

string
instance_id

Request-id correlation handle echoed on the request-id response header — support teams correlate without scraping logs.

string
message
required

Human-readable explanation of the failure.

string
parameters

Per-error structured detail. The shape varies by code (e.g. forbidden_action carries {"action": "..."}; precondition_failed carries {"current_version": N}).

Examplegenerated
{
"error": {
"code": "example",
"instance_id": "example",
"message": "example",
"parameters": "example"
}
}