- By the dalasi you want, with
gmd_amount: “I need 5,000 GMD, how much USDT do I send?” - By the stablecoin you have, with
pay_amount: “I have 100 USDC, how much GMD do I get?”
Conversions work in live mode only. Use a live API key.
How it works
1
Create a conversion
Tell us the amount, the coin, the network and where the dalasi should go. We
lock the rate and return a payment address.
2
Send the stablecoin
Send exactly
pay_amount of pay_currency on network to pay_address
within 10 minutes.3
Receive the dalasi
As soon as the payment is confirmed, we credit
gmd_amount to your balance
or pay it to the mobile money wallet you chose.Create a conversion
POST /v1/minting/offramp
Send either gmd_amount or pay_amount, not both.
number
The dalasi you want to receive. We work out how much stablecoin to send.
number
The stablecoin amount you will send, in USD (for example
100 for 100 USDT).
We work out the dalasi you receive, after fees.Minimums depend on the network: $25 on Tron and $5 on Arc, measured on
the amount sent. Requests must also be worth at least 400 GMD. Anything
smaller is rejected with a message stating the minimum.
string
default:"USDT"
The coin you’ll send:
USDT or USDC.string
default:"TRC20"
The network you’ll send on:
TRC20 (Tron) or ARC. Arc supports USDC only.
See supported coins and
networks.string
default:"modempay_balance"
Where the dalasi goes:
modempay_balance or mobile_money.object
Required when
destination is mobile_money. The wallet to pay.object
Only for resellers. See Resell
conversions.
Example: you want 5,000 GMD
Example: you have 100 USDC on Arc
100 USDC, and gmd_amount in the response
tells you the dalasi you’ll receive.
Example: pay the dalasi to a Wave wallet
Response
Statuses
Partial payments
A payer may send less thanpay_amount, or split it across several transfers.
You don’t lose anything:
- Each transfer is credited as it arrives, in proportion. If half of
pay_amountarrives, you get half ofgmd_amount. - When the rest arrives, you get the remainder, so the total is exactly
gmd_amount. - You never receive more than
gmd_amountfor a conversion.
status and actually_paid, or wait for the
updates we send.
Look up a conversion
GET /v1/minting/ramps/{id}
cURL
status,
actually_paid and a timeline in events.
Updates (webhooks)
When money arrives, we send an update to yourcallback_url (and your
dashboard webhook). The event name follows the status:
The payload is the conversion object shown above. You can get several updates
for one conversion as transfers come in, so match on
id or reference and
treat actually_paid as the running total. Expiry doesn’t send an update; look
the conversion up if you need to confirm it.
To check an update really came from Modem Pay, see the
Webhooks guide.
If a mobile money payout fails
Whendestination is mobile_money, the dalasi first lands in your Modem Pay
balance and is then paid to the wallet. If the wallet payout fails (wrong
number, provider outage), the dalasi stays in your balance. It’s never
lost, and you can pay it out again from the dashboard or the
Payouts API.
Good to know
- The rate is locked when you create the conversion and doesn’t change while it waits for payment.
- Fees are included in
pay_amount. Thefeefield shows how much of it is Modem Pay’s: a percentage (capped at $2), plus the network fee on Tron. - With
pay_amount, you receive the largest whole number of dalasi that amount covers after fees. Any fraction under 1 GMD isn’t credited. - Network values are case-insensitive:
ARC,arcandArcall work.
