Now live Pakistan is up. JazzCash, EasyPaisa and Raast are ready to accept. See the methods
Home Solutions Pay in Pay out Integration Support Support FAQs Blog Talk to sales →
Integration

One REST API. First transaction in ninety minutes.

Clean endpoints you can read in one sitting. Webhooks that don't silently drop. SDKs for Node, PHP and Python. A working sandbox key on your first API call, so your engineers stop waiting on paperwork.

Getting started

Three steps between you and your first live transaction.

Most engineering teams have a test payment going through inside ninety minutes. Full go-live in a working week.

Step 1

Get sandbox keys

Fill in a form. No credit card, no NDA, no sales call to open up. Keys arrive via email within four hours during Asia business time.

  • Public and secret key pair
  • Full sandbox network access
  • Test data for every method
Time: half a working day.
Step 2

Fire your first call

Hit our /payments endpoint from cURL, Postman or your language of choice. Get back a redirect URL or a QR code.

  • REST + JSON, no XML
  • Idempotency keys supported
  • Errors that tell you what to fix
Time: under 15 minutes.
Step 3

Wire up webhooks

Register your webhook URL, verify the signature on the first ping, and start receiving real-time status updates. Retries built in.

  • HMAC-signed payloads
  • Automatic exponential retry
  • Dead-letter queue for edge cases
Time: an afternoon.
First call

What your first API request actually looks like.

Real code. Copy, paste, replace the sandbox key, and watch a real payment session appear in your dashboard.

# Create a payment session. UPI Collect for a merchant in India curl "https://api.mountpay.co/v1/payments" \ -H "Authorization: Bearer sk_sandbox_..." \ -H "Idempotency-Key: order-8471-attempt-1" \ -H "Content-Type: application/json" \ -d '{ "amount": 45000, "currency": "INR", "method": "upi_collect", "customer": { "vpa": "8299441122@paytm", "name": "Aditya Kumar" }, "reference": "order-8471", "return_url": "https://yourapp.com/paid", "webhook_url": "https://yourapp.com/webhooks/mountpay" }'
# Response. 201 Created { "id": "pay_01HN8TQK9RVA2M4B3P6XZC7WJD", "status": "pending", "amount": 45000, "currency": "INR", "method": "upi_collect", "reference": "order-8471", "redirect_url": "https://pay.mountpay.co/s/01HN8TQK9R", "expires_at": "2026-07-24T17:15:00Z", "created_at": "2026-07-24T17:10:00Z" }

Every response includes an id, a status and (where relevant) a redirect_url or QR. Simple, predictable, no surprises.

SDKs

Ship in the language you already write in.

Official SDKs for the three languages most of our merchants use. All open source. All versioned semver. All match the REST API 1:1.

Node.js

@mountpay/node

Async / await native, TypeScript definitions bundled, tree-shakeable ESM + CJS. Works with Bun and Deno.

npm install @mountpay/node
  • Node 18+, TypeScript 5+
  • Auto-retry on network errors
  • Webhook signature helper
PHP

mountpay/php-sdk

PSR-compliant, Composer-installable, tested against PHP 8.1+. Works with Laravel, Symfony, or plain PHP.

composer require mountpay/php-sdk
  • PHP 8.1+, PSR-4 & PSR-18
  • Laravel service provider included
  • Guzzle or any PSR HTTP client
Python

mountpay-python

Pythonic API surface, sync and async clients, type hints on every method. Works with Django, FastAPI, Flask.

pip install mountpay
  • Python 3.9+, mypy-friendly
  • Sync (requests) + async (httpx)
  • Django middleware included

Using a language we don't publish for? The REST API is boring on purpose. Any HTTP client will do. tell us what you're building and we'll help you get running.

Testing & delivery

The tooling that actually makes the difference.

The API is easy. What matters is what happens when things go wrong. Here's what you don't have to build yourself.

Webhooks

Retries that don't drop

Every event fires with exponential backoff for 24 hours. If your endpoint returns non-2xx, we keep trying: 30s, 2m, 10m, 30m, 2h, 6h, 24h.

  • HMAC-SHA256 signed payloads
  • Automatic replay from the dashboard
  • Dead-letter alerts to your ops team
Why it matters: a deploy that takes you down for 5 minutes doesn't lose a single payment status update.
Sandbox

Test every rail, every failure

Sandbox mirrors production 1:1. Force any state. Success, decline, timeout, reversal, reversal. With a test VPA or a header flag.

  • All 10+ methods available in test mode
  • Instant state simulation
  • No rate limits, no charge
Why it matters: your QA team can write real integration tests, not mocks.
Dashboard

See what your merchants see

Every API call, every webhook delivery, every status change. Logged and searchable. Reproduce a customer complaint in one click.

  • Full request & response bodies
  • Trace ID on every log line
  • 7-day rolling window, 30 days on request
Why it matters: "it worked in my terminal" becomes debuggable in seconds.

Sandbox key by evening. Live traffic this week.

Tell us your stack, expected volume and target countries. We'll email keys and a Postman collection within four hours, Asia business time.