Set the platform's fee schedule on a merchant account
const url = 'https://api.aerandil.com/v1/merchant-accounts/2489E9AD-2EE2-8E00-8EC9-32D5F69181C0/fee';const options = { method: 'POST', headers: {Authorization: 'Bearer <token>', 'Content-Type': 'application/json'}, body: '{"fee_conversion_bps":1,"fee_schedule":[{"bps":1,"card_present":true,"fee_class":"domestic_standard","fixed":{"amount":"example","currency":"example"},"processor_bps":1,"processor_fixed":{"amount":"example","currency":"example"}}],"markup_bps":1}'};
try { const response = await fetch(url, options); const data = await response.json(); console.log(data);} catch (error) { console.error(error);}curl --request POST \ --url https://api.aerandil.com/v1/merchant-accounts/2489E9AD-2EE2-8E00-8EC9-32D5F69181C0/fee \ --header 'Authorization: Bearer <token>' \ --header 'Content-Type: application/json' \ --data '{ "fee_conversion_bps": 1, "fee_schedule": [ { "bps": 1, "card_present": true, "fee_class": "domestic_standard", "fixed": { "amount": "example", "currency": "example" }, "processor_bps": 1, "processor_fixed": { "amount": "example", "currency": "example" } } ], "markup_bps": 1 }'The platform’s fee by card class — Stripe’s published rate for the class plus a markup — through set_merchant_account_fee. Either markup_bps (laid over the account’s own Stripe columns, its fixed fees passed through) or the whole fee_schedule, row by row. Applies to money captured from now on, holds already placed included. Operator only (tenant_admin:write).
Authorizations
Section titled “Authorizations”Parameters
Section titled “Parameters”Path Parameters
Section titled “Path Parameters”The property’s merchant account.
Request Bodyrequired
Section titled “Request Bodyrequired”object
Stripe’s currency-conversion fee; defaults to the account’s.
object
This row prices a terminal’s charge rather than an online one.
The card’s class: regional is the EEA for a UK account and the UK for a eurozone one.
The fixed fee the hotel pays — Stripe’s own, passed through.
object
Exact decimal as a string. Money is never a float — binary floating point cannot hold 0.10.
object
Exact decimal as a string. Money is never a float — binary floating point cannot hold 0.10.
Basis points over Stripe’s rate for every class (40 = Stripe + 0.40%). Not with fee_schedule.
Responses
Section titled “Responses”The schedule, set.
object
object
This row prices a terminal’s charge rather than an online one.
The card’s class: regional is the EEA for a UK account and the UK for a eurozone one.
The fixed fee the hotel pays — Stripe’s own, passed through.
object
Exact decimal as a string. Money is never a float — binary floating point cannot hold 0.10.
object
Exact decimal as a string. Money is never a float — binary floating point cannot hold 0.10.
The one markup every row carries over Stripe’s rate with its fixed fee passed through (“Stripe + 0.40%” is 40); null for a schedule set row by row.
Example
{ "fee_schedule": [ { "fee_class": "domestic_standard" } ]}Headers
Section titled “Headers”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.
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
object
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).
Request-id correlation handle echoed on the request-id response header — support teams correlate without scraping logs.
Human-readable explanation of the failure.
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.
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
object
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).
Request-id correlation handle echoed on the request-id response header — support teams correlate without scraping logs.
Human-readable explanation of the failure.
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" }}Neither or both of markup_bps and fee_schedule; a class priced twice or not at all; a rate outside 0–10000 basis points; a negative fixed fee or two currencies; or the account is closed.
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
object
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).
Request-id correlation handle echoed on the request-id response header — support teams correlate without scraping logs.
Human-readable explanation of the failure.
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" }}