All monetary amounts use a single object shape — never a bare number.
{ "amount": "5400.00", "currency": "MAD" }
amount — a decimal string with exactly two decimals (regex
^-?\d+\.\d{2}$). It is a string on purpose: never deserialize it into a
binary float. Use a decimal type on your side.
currency — MAD only in v1. The field exists so future currencies are an
additive, non-breaking change.
Sign convention
Amounts are positive except where a reduction is expressed: refund and negative
adjustment lines in a settlement carry a negative
amount. Settlement arithmetic is exact:
net_due = bookings_total − refunds_total + adjustments_total
Do not round or reformat amounts you receive, and send amounts back with the
same two-decimal string form. A mismatch on payment_confirmation is rejected
with payment.amount.mismatch.
The net amount in a quote is what you owe Safariat at the
monthly settlement — not what you charge the traveler. Your customer-facing
price (margin included) is yours to set.