Skip to main content
This guide uses the production URL. Step 4 and step 5 move real money. To test safely, use the sandbox base URL api.sandbox.jenzy.com. See Sandbox.
1

Read your assets

Put your jz_live_… API key in the Authorization header of each request. GET /v2/assets lists the assets that Jenzy enabled for your org, with the operations that you can do in each.
An asset that is not in the list does not exist for your org. A request in that asset gets corridor_not_enabled. Speak to Jenzy to enable a new asset.
2

Read your balances

Each asset has its own balance. GET /v2/balances gives one row for each asset in step 1. There is no total.
available is the money that you can spend now. held is the money that payouts in progress reserve. See Balances.
3

Find where to send money

To fund a fiat balance, read your virtual account for that asset. Give the details to the person who pays you.
To fund a stablecoin balance, ask for a deposit address on a network. The same address takes each stablecoin on that network.
Money that arrives becomes a collection. Hermes credits your balance and sends collection.settled to your webhook endpoint. See Collections.
4

Send a payout

One endpoint pays every destination. The type field of the destination object selects the rail. amount and asset are always what the beneficiary receives.Each create request needs an Idempotency-Key header. Make one key for each payout that you intend to send. You can use a UUID. A request with no key gets 400.
institution_id comes from GET /v2/institutions?asset=KES. A mobile number is in E.164 form, with the +. Hermes refuses a number in a different form. Hermes does not correct the number for you.A 201 response is the payout. Hermes holds the money at once.
A 4xx response means that Hermes made no payout and held no money. A 201 response can already show status: "failed". See Payouts for the reason.
5

Convert between assets

First get a quote. Then execute the quote. to_amount is what you receive, and Hermes does not change it.
Execute before expires_at. The execute request needs an Idempotency-Key.
The response is the conversion, with status: "completed" in the normal case. See Conversions.
6

Learn the result

A payout is terminal when status is succeeded or failed. There are two ways to learn the result.Webhooks (recommended) — Hermes sends payout.succeeded or payout.failed to your endpoint. The delivery carries api_version: "v2". See Webhooks.A poll — read GET /v2/payouts/{id} again until the status is terminal.When a payout fails, Hermes releases the hold back to available. Hermes never sends a failed payout again. To try again, create a new payout with a new Idempotency-Key.
That is the full loop. See Payouts for the FX payout, the status lifecycle, and the limits.