Fees
What a charge or payout would cost, before you create it.
| Endpoint | What it does |
|---|---|
POST /v1/fees/quote |
Quote the fees on a charge or payout |
Try any of them in the API tester.
Quote the fees on a charge or payout
Section titled “Quote the fees on a charge or payout”POST /v1/fees/quote
Prices a charge or a payout without creating it, so you can show the fee or decide whether to go ahead. Nothing is written and no money moves.
The figures are computed by the same routing and pricing a real charge or payout runs: your plan or negotiated rate, minimum and maximum fees, tax, commission and fee_bearer all apply. A charge created straight after with the same amount, currency, channel, institution and fee_bearer carries the same fee, customer_amount and merchant_amount; a payout, the same fee and debited.
A QUOTE IS NOT A RESERVATION. A transaction is priced when it is created, by the rules in force then, and quoted_at says when this one was priced.
Name the network or bank when you know it: the quote is then routed exactly as the transaction would be.
Requires collection.create to quote a collection and payout.create to quote a payout. A quote is refused for the same reasons, with the same error codes, as the transaction itself: an unsupported currency or channel is 422, a combination with no pricing is 409 unpriced_combination, a channel your account is not enabled for (live keys) is 403 capability_disabled, and no available partner is 503 no_route_available, which is worth retrying.
Authentication: a secret key (server-side only) with the scope collection.create, or a secret key (server-side only) with the scope payout.create.
Request body
Section titled “Request body”| Field | Type | Required | Allowed values and limits | What it is |
|---|---|---|---|---|
amount |
integer | yes | min 1; e.g. 10000 |
In minor units, meaning what amount means on the operation being priced: what a charge asks for, or what a payout’s recipient receives. 10000 is GHS 100.00. |
bank |
string | no | at most 30 characters | Optional. The bank’s code, as on a charge or payout. |
bank_id |
string (uuid) | no | Optional. An alternative to bank; send one, not both. | |
channel |
string | yes | One of: mobile_money, bank, card |
The channel the transaction would use. card is for collections only. |
currency |
string | yes | exactly 3 characters; e.g. GHS |
ISO 4217 code of amount. Supported currencies are listed at /v1/reference/currencies. |
direction |
string | yes | One of: collection, payout |
collection to price a charge (POST /v1/charges), payout to price a payout (POST /v1/payouts). |
fee_bearer |
string | no | One of: merchant, customer |
Collections only, and only if your account permits per-transaction choice, exactly as on POST /v1/charges. Omit it to get your account’s configured bearer. |
momo_network |
string | no | at most 30 characters; e.g. mtn |
Optional. The network’s code, as on a charge or payout. Send it when you know it: the transaction is then routed, and priced, exactly as one to that network would be. |
momo_network_id |
string (uuid) | no | Optional. An alternative to momo_network; send one, not both. |
curl -X POST https://sandbox.paysigna.com/v1/fees/quote \ -H "Authorization: Bearer sk_test_…" \ -H "Content-Type: application/json" \ -d '{ "amount": 10000, "channel": "mobile_money", "currency": "GHS", "direction": "collection", "momo_network": "mtn"}'Response 200
Section titled “Response 200”| Field | Type | What it is |
|---|---|---|
amount |
integer | The amount you sent, in minor units. |
channel |
string | The channel priced. |
currency |
string | ISO 4217 code of every amount in this quote. |
customer_amount |
integer | Collections only. What the customer would be charged, including any fee they bear. |
debited |
integer | Payouts only. What would be taken from your balance: the amount plus the fee. |
direction |
string | What was priced. One of: collection, payout |
environment |
string | The environment priced: that of the API key you used. A test key quotes what a test charge would be charged. One of: test, live |
fee |
object | |
fee.bearer |
string | Who pays the fees: merchant (deducted from merchant_amount, or added to debited on a payout) or customer (added to customer_amount). One of: merchant, customer |
fee.commission |
integer | Commission you accepted for a company that referred you, in minor units. Follows bearer, like platform. Always 0 on a payout. |
fee.platform |
integer | PaySigna’s fee, in minor units. |
fee.tax |
integer | Tax on the fee, in minor units. |
fee.total |
integer | platform + tax + commission: everything you or your customer pay on top of, or out of, amount. |
merchant_amount |
integer | Collections only. What would be credited to your balance. |
object |
string | |
quoted_at |
string (date-time) | When this was priced. A quote is not a reservation or a promise: a transaction is priced when it is created, by the rules in force then. Re-quote if your pricing may have changed. |
Errors
Section titled “Errors”400: the request is malformed401: the key is missing, wrong or revoked403: the key lacks the scope, or your account may not do this409: it conflicts with the current state, or the idempotency key was used for a different request422: a field is invalid;errorsnames it429: too many requests; wait forRetry-After500: Internal Server Error503: the payment partner is unreachable; safe to retry
Every error is a JSON problem with a stable code. See Errors.

