Authentication
Request signing (apiKey + MD5)
Every request is signed so we can verify it came from you. The rules are simple and deterministic.
How the signature is built
- 1. Collect all request parameters (except
sign).
- 2. Sort them by ASCII key order (A→Z).
- 3. Concatenate as
key1=value1&key2=value2….
- 4. Append your secret:
&key=<yourApiSecret>.
- 5. Compute MD5 of the whole string → that is
sign.
The sign field itself is excluded from the signed string. Encoding follows standard URL rules (watch the + → space pitfall — we handle it server-side).
# 1) Concatenate sorted params + secret
raw = "amount=100.00&merOrderNo=M123&merno=MER001&key=YOUR_API_SECRET"
# 2) MD5 the raw string → sign
sign = md5(raw) # e.g. 9e107d9d372bb6826bd81d3542a419d6
# 3) Send sign as a normal parameter
POST /payin { amount, merOrderNo, merno, sign }
Pay-in flow
Collect a payment
Steps
- Merchant signs and sends a pay-in request (amount, order no, channel params).
- ChampsPay routes to the best channel and returns a payment link / redirect.
- Customer pays with the local method (PIX, UPI, bank, wallet…).
- A callback notifies you of success; you can also poll order status.
# Pay-in request (simplified)
curl -X POST https://api.xxxx.com/payin \
-d merno=MER001 \
-d merOrderNo=M123 \
-d amount=100.00 \
-d currency=USD \
-d channelParams="{...}" \
-d sign=9e107d9d372bb6826bd81d3542a419d6
# Response
{ "code":0, "sysOrderNo":"CP2025...", "payUrl":"https://..." }
Pay-out flow
Disburse funds
Steps
- Merchant signs and sends a pay-out request (recipient, amount, channel params).
- ChampsPay validates balance and submits to the channel.
- Status transitions are reported via callback and query API.
# Pay-out request (simplified)
curl -X POST https://api.xxxx.com/payout \
-d merno=MER001 \
-d merOrderNo=P456 \
-d amount=50.00 \
-d currency=USD \
-d channelParams="{ \"upi\":\"...\" }" \
-d sign=...
# Callback (notification)
{ "sysOrderNo":"CP2025...", "status":"SUCCESS", "sign":"..." }
Request full API documentation