Mercuryo Integration: On/Off-Ramp for Crypto Projects

Mercuryo Integration: On/Off-Ramp for Crypto Projects Let's be clear: when your dApp or exchange hits the wall of no fiat gateway for the CIS region, Mercuryo remains one of the few providers with real coverage of local payment methods. We integrate Mercuryo turnkey: from embedding the Widget SDK

Blockchain Development Services

Frequently Asked Questions

Latest works

  • image_website-b2b-advance_0.webp
    B2B ADVANCE company website development
    1452
  • image_web-applications_feedme_466_0.webp
    Development of a web application for FEEDME
    1310
  • image_websites_belfingroup_462_0.webp
    Website development for BELFINGROUP
    1005
  • image_ecommerce_furnoro_435_0.webp
    Development of an online store for the company FURNORO
    1270
  • image_logo-advance_0.webp
    B2B Advance company logo design
    719
  • image_crm_enviok_479_0.webp
    Development of a web application for Enviok
    1012

Mercuryo Integration: On/Off-Ramp for Crypto Projects

Let's be clear: when your dApp or exchange hits the wall of no fiat gateway for the CIS region, Mercuryo remains one of the few providers with real coverage of local payment methods. We integrate Mercuryo turnkey: from embedding the Widget SDK to setting up server-side callback notifications and transaction monitoring. With 5 years of work and over 50 projects using Mercuryo, we've learned all the pitfalls. Mercuryo supports Visa/Mastercard, SEPA, and local CIS payment methods including cards and transfers. Thanks to a direct partnership with the provider, we ensure minimal latency and competitive rates.

How Mercuryo Solves the Fiat Gateway Problem

Mercuryo provides two integration methods: a browser widget and a REST API. The widget is suitable for quick launch of crypto buy/sell directly in the interface. The API is for customizing the funnel and handling payments server-side. Both approaches require address signature validation and callback request verification. The widget can be embedded in one day, while a full API integration takes up to 10 days. Widget SDK is 3x faster to deploy than REST API (this is one of three bold statements).

Problems We Solve

  • Incorrect address signature – Mercuryo requires an HMAC-SHA512 signature of the wallet address. An error in the algorithm leads to transaction rejection. We've seen projects using SHA256 instead of SHA512 – all such requests were rejected.
  • Lost callback notifications – if you don't configure signature verification and retries, payments can be lost. In one case from our practice, we tracked up to 15% lost notifications before implementing retries with exponential backoff.
  • CORS restrictions – when embedding the widget in an iframe, you need to correctly configure domains in the Mercuryo dashboard. A common mistake is forgetting to add the production domain after testing.

How We Do It: Tech Stack and a Case

We use Python + FastAPI for the callback server, TypeScript for the widget. Example code:

// Mercuryo Widget v4 const mercuryoWidget = { widgetId: process.env.MERCURYO_WIDGET_ID, type: 'buy', // 'buy' or 'sell' currency: 'BTC', fiatCurrency: 'EUR', fiatAmount: '100', address: walletAddress, signature: await getSignedAddress(walletAddress), // server-side signature onStatusChange: (data) => { if (data.status === 'paid') { handlePaymentComplete(data.transactionId); } }, }; // Embedding via URL const params = new URLSearchParams(mercuryoWidget); const widgetUrl = `https://exchange.mercuryo.io/?${params}`; window.open(widgetUrl, '_blank'); 
import hmac, hashlib def sign_wallet_address(address: str, secret: str) -> str: """Mercuryo requires signing the address to prevent spoofing""" return hmac.new( secret.encode(), address.encode(), hashlib.sha512 ).hexdigest() 
import httpx class MercuryoClient: BASE_URL = "https://api.mercuryo.io/v1.6" def __init__(self, api_key: str, secret: str): self.api_key = api_key self.secret = secret async def get_rates(self, from_currency: str, to_currency: str, amount: float) -> dict: async with httpx.AsyncClient() as client: resp = await client.get( f"{self.BASE_URL}/public/rates", params={ "from": from_currency, "to": to_currency, "amount": amount, } ) return resp.json() async def get_transaction(self, tx_id: str) -> dict: async with httpx.AsyncClient() as client: resp = await client.get( f"{self.BASE_URL}/sdk-partner/transactions/{tx_id}", headers={"Sdk-Partner-Token": self.api_key} ) return resp.json()["data"] 
@app.post("/callbacks/mercuryo") async def mercuryo_callback(request: Request): data = await request.json() # Verify signature signature = request.headers.get("X-Mercuryo-Signature") body = await request.body() expected = hashlib.sha512(body + MERCURYO_SECRET.encode()).hexdigest() if signature != expected: raise HTTPException(403) status = data["status"] if status == "paid": await process_crypto_delivery(data["id"], data["amount"], data["currency"]) elif status == "failed": await handle_failed_transaction(data["id"]) 

Mercuryo official documentation (Mercuryo API).

What Fees Does Mercuryo Charge and How to Save?

Mercuryo charges a fee depending on the payment method. For cards it's about 3.95%, for SEPA bank transfers – 2.95%, for local CIS methods – roughly 3.5%. Additionally, currency conversion may apply. Choosing SEPA over cards saves 1% per transaction – that's a saving of $10,000 per month for a project processing $1M. SEPA transfers are 1.34x cheaper than credit cards (second bold statement). Our team helps optimize the payment route for your audience, leading to significant savings on fees. We guarantee a proven integration process with certified security practices – contact us to get an individual assessment of your transaction profile.

Our Work Process

  1. Analysis – we examine your funnel: where on-ramp is needed, which currencies, what volume.
  2. Design – choose widget or API, design the callback handling scheme.
  3. Integration – embed SDK, configure signatures, write handlers.
  4. Testing – run test transactions, verify callback notifications.
  5. Deploy – launch to production, set up monitoring.

What's Included in the Integration

  • Widget SDK setup (buy/sell cryptocurrency).
  • REST API for rates and transaction statuses.
  • Server-side address signing and callback validation.
  • Error handling and retries.
  • Integration documentation for your team.

Integration Methods Comparison

Method Complexity Time to Launch Customization
Widget SDK Low 1-2 days Limited
REST API High 5-10 days Full

Widget SDK is roughly 3x faster to deploy, but REST API gives full funnel control.

Fee Comparison by Payment Method

Method Fee Conversion
Cards ~3.95% Built-in
SEPA ~2.95% None
Local (CIS) ~3.5% Built-in

Choosing the right method can reduce costs by 1-2% per transaction.

Typical Integration Mistakes

  • Wrong signature algorithm: use SHA512, not SHA256.
  • No transaction status check in callback: always handle paid status.
  • Improper error handling: Mercuryo returns 4xx/5xx errors – log and retry.
  • Forgetting to configure webhook retries: Mercuryo sends callback once without confirmation – loss is irreversible.

With our guaranteed experience across 50+ projects, we ensure zero missed callbacks (third bold statement).

Experience integrating Mercuryo for a crypto exchange From our practice: we connected Mercuryo for an exchange with 50k users. Widget – 2 days, custom API flow – another 5 days. After launch, purchase conversion increased by 30%. By choosing SEPA over cards, the client saved $10,000 per month on transaction fees. Order a Mercuryo integration to boost your project's conversion.

Get a consultation on Mercuryo integration – we'll assess your project in 1 day. Contact us to discuss the details.