reseller

GET /v1/wallet/top-ups/estimate

What a top-up will actually credit, before you pay.

All reseller endpoints

Authentication

Send an API key as a bearer token. The key must carry the billing.view permission; a key without it is refused with 403, not 404.

Where your organisation id goes

This endpoint takes org_id as a query parameter. Leave it out and the call covers your whole tenancy subtree; send it to narrow the call to one organisation.

Your organisation id is on the API keys screen in your dashboard, beside the key itself. It is the same id in every call you make.

Try it

Replace anything in angle brackets with your own values, and the key placeholder with a key from your dashboard.

curl -X GET https://api.zinndigital.com/v1/wallet/top-ups/estimate?amount_minor=<amount_minor> \
  -H "Authorization: Bearer zdk_live_…"

Signed in? The API console in your dashboard fills in your real organisation id and your own key, and runs the request against the live API so you can see the actual response. Open this endpoint in the API console

Details

The **pre-purchase disclosure**. Returns what we expect to put in your balance for a given amount and rail, and whether that figure can still move. ⚖️ Zinn® credits **what actually settles**, net of fees, at the real settlement rate (owner ruling 2026-08-22). On a card that is exactly the amount you asked for. On a crypto rail it can be less, because the value of the coin moves between the quote and the confirmation and the network takes a fee — so `is_estimate` is `true` and the figure is indicative. ⛔ A screen that renders `expected_credit_minor` without also reading `is_estimate` turns a disclosure into a promise. `refundable` and `expires` are both always `false` and are returned here, at the point of sale, because that is where a non-refundable purchase has to be disclosed. Requires `billing.view`.

Parameters

NameTypeRequiredWhat it is
amount_minor (query)integerYesThe amount you want to add, in integer minor units.
currency (query)stringNoISO-4217 code. A wallet is per-currency; an unknown code is a 422.
gateway (query)stringNoWhich rail — `stripe`, `paypal` or `nowpayments`. Determines whether the estimate is exact or indicative; it is the crypto rail that settles at a moving rate.
org_id (query)UuidNoWhich of your organizations this applies to. Required only when you belong to more than one here — otherwise it is inferred, and an id outside your direct memberships is a 404 r…

Response

NameTypeRequiredWhat it is
currencystringYes
gatewaystringYes
quoted_minorintegerYesWhat the customer asked to add.
expected_credit_minorintegerYesWhat we expect to put in their balance.
is_estimatebooleanYes⛔ **Not decoration.** `true` on a rail that settles at a moving rate (crypto), where the amount credited can be less than the amount quoted because we credit what actually settl…
refundablebooleanYes⚖️ Always `false` for Zinn® credit. *"credit is not returnable ever, even on account closure etc."* — owner, 2026-08-22. Returned at the point of sale because that is where a no…
expiresbooleanYes⚖️ Always `false`. Credit never expires — the deliberate other half of never refundable: *"you cannot have it back"* is only defensible alongside *"and you never lose it"*.

Errors this endpoint can return

401 · 403 · 422 · 429