Skip to main content
The Multi-asset API is the /v2 surface of Jenzy Hermes. You hold a balance in each asset that Jenzy enables for your org. You fund a balance with a collection. You convert between assets. You pay out to a bank account, a mobile money number, or a wallet address.
Production keys move real money. Each payout and each conversion that you create in production is final. Build and test in the sandbox first.

Two APIs, one account

Jenzy has two APIs. Your org, your API keys, and your webhook endpoint are the same on both. The MWK API stays as it is. Jenzy does not remove it. If you pay only Malawi, you do not need to change. This tab describes /v2 only.

What is different on /v2

  • amount and asset. Each money figure is an exact decimal string in major units, beside an asset field. An example is { "amount": "250000.00", "asset": "KES" }. No field name has a currency in it. There is no currency field.
  • One payout endpoint. POST /v2/payouts takes a destination object. The type of the destination selects the rail. See Payouts.
  • Conversions. Get a quote, then execute it. See Conversions.
  • Collections for each asset. A bank pay-in and an on-chain deposit are both a collection. See Collections.
  • Idempotency-Key is necessary on POST /v2/payouts and POST /v2/conversions. A create request with no key gets 400.
  • Webhooks. The same endpoint gets the events of both APIs. A /v2 delivery carries api_version: "v2". See Webhooks.

Base URL

Production:
Sandbox:
All requests use HTTPS. All bodies are JSON. All endpoints need your API key. The key is the same jz_live_… key that you use on /v1.

Money values

Hermes sends each amount as an exact decimal string. A fiat asset has two decimal places. An example is "250000.00". A stablecoin has a maximum of six decimal places, and Hermes removes the zeros at the end. Examples are "12.5" and "0.000001". GET /v2/assets gives the decimals of each asset. Read each money field with a decimal library. Do not use parseFloat. You can send an amount to Hermes in two forms. Use a JSON integer of whole units, for example 250000. Or use an exact decimal string with a maximum of the decimals of the asset, for example "250000.50". Hermes refuses a fractional JSON number. Send "12.5". Do not send 12.5.

Where to start

Quickstart

Assets, balances, where to send money, a payout, and a conversion.

Balances

One row for each asset. Available, held, and shortfall.

Payouts

One endpoint, three destination types, and the FX payout.

Conversions

Quote, then execute. What you receive is the promise.

Collections

How money comes in, and where to send it.

Errors

The codes that are new on this API.

Sandbox

What the sandbox can show you, and what it cannot.

Webhooks

The shared event list, with the two conversion events.