Amounts are strings of minor units
An amount is a whole number of the currency’s smallest unit, written as a string. With two decimals,"500000" in NGN is ₦5,000.00 and "10000" in USD is $100.00. There are no floats anywhere.
Request amounts are digits only: no sign, separator or decimal point, and at most 38 digits. Zero is refused on a posting.
A currency’s decimals are its
scale, from GET /v1/ledgers.
A balance can be negative, for example an overdrawn account, so posted and available may start with -. Do not parse them as unsigned.
Other numbers
64-bit integers are strings too:balance.version, page.total and event seq. 32-bit integers are JSON numbers: posting.seq, rateBps.
Zero values
A field at its zero value is left out of responses. That means empty strings,0, false and empty lists. A new account’s balance has no version, the first posting of an entry has no seq, and a schedule with active: false has no active. Read a missing field as its zero value.
Ids
Ids are a prefix and a base32 string, likeacc_01M6F1BK8KE6JT32WRN50HYC4R. Treat them as opaque.
Approval ids take a prefix from their kind, such as
adj_ or fx_.
Times and dates
Times are RFC 3339 in UTC.businessDate is YYYY-MM-DD in the tenant’s time zone, and rolls to the next day at the tenant’s cut-off. A tenant in Lagos with a 17:00 cut-off books an entry at 18:30 on the 2nd to the 3rd. GET /v1/tenant shows the timezone and businessDayCutoff.
Field casing
Responses arelowerCamelCase. Requests accept lowerCamelCase or snake_case, and these docs use the former. Two things stay snake_case: the error envelope’s request_id and details, and the data of webhook events.