Skip to main content
If you run your own platform, you can offer off-ramp to your own users and add your own markup on top. Your users pay the off-ramp amount plus your markup, and you earn that markup as settled dalasi. Modem Pay takes care of the stablecoin, the conversion, and the payout, you never touch the crypto or the cash.
This page builds on the regular Off-Ramp flow. Everything there still applies; this page only covers the one extra field, markup_config.

How the markup works

When you add a markup_config, the amount your user pays becomes base + markup:
  • Base — the stablecoin needed to cover the gmd_amount (plus the standard fee), exactly like a regular off-ramp.
  • Markup — your cut, added on top. Your user pays it; you keep it.
The markup is locked in when the off-ramp is created and stored as markup_share_usd (in USD). As the payment comes in, your markup is added to your balance bit by bit alongside the base, and is fully settled once the payment is complete.

markup_config

markup_config
object
Your cut. Added to what the user pays, and settled to you.
There’s a limit on how big your markup can be compared to the base amount. If the markup goes over the allowed maximum, the request is rejected when you create it. Keep your cut reasonable.

Example

A fixed markup of 4 on a 1000 GMD off-ramp: the base might be about 13.62 USDT, and your user pays about 17.62 USDT (base + 4). You earn the 4 (handed to you as dalasi) once the payment is complete.
curl -X POST https://api.modempay.com/v1/minting/offramp \
  -H "Authorization: Bearer YOUR_API_KEY" \
  -H "Content-Type: application/json" \
  -d '{
    "gmd_amount": 1000,
    "destination": "mobile_money",
    "payout_method": {
      "network": "wave",
      "account_number": "7000000",
      "account_name": "Account Holder"
    },
    "markup_config": {
      "type": "fixed",
      "value": 4
    }
  }'
What you get back (markup fields)
json
{
  "id": "c4a8e1d7-6b2f-4a90-8e3c-5f1b9d2a7c44",
  "gmd_amount": 1000,
  "gmd_rate": 74.2297,
  "fee": 0.14,
  "pay_amount": 17.62,
  "pay_currency": "USDT",
  "pay_address": "TXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX",
  "status": "pending",
  "markup_share_usd": 4,
  "markup_config": {
    "type": "fixed",
    "value": 4
  },
  "destination": "mobile_money",
  "payout_method": {
    "network": "wave",
    "account_name": "Account Holder",
    "account_number": "7000000"
  },
  "reference": "MP-XXXXXXXX-XXXXXX-XXXXXXXX"
}
Compared to a regular off-ramp: pay_amount now includes your markup, and markup_share_usd shows the markup you’ll earn (in USD).

How the money is settled

  • The base covers the gmd_amount, going to your balance, or to the mobile money wallet in payout_method, exactly like a regular off-ramp.
  • Your markup goes to your Modem Pay balance, kept as a separate credit from the base so it’s easy to tell apart.
  • Both are settled bit by bit as partial payments come in, and finish together once the full amount is paid.
Even when the base goes straight to a mobile money wallet, your markup still lands in your Modem Pay balance (not the wallet). This keeps your earnings separate from your user’s payout.

Good to know

  • markup_share_usd is locked in at creation and won’t change if the rate moves later.
  • The markup is your revenue; the standard Modem Pay fee still applies to the base.
  • For payment, status values, and notifications, see the regular Off-Ramp page.