Payvo Payment Gateway
Core endpoints and ready HTML snippets.
Quick setup: Direct payment-check requests need your store_id and one store api_key. Save your callback URL in the store settings once; Payvo calls it automatically after a match. The callback uses that same API key, so there is no second callback key.
Payment Check
Verify a transfer.
| HTTP Method | POST |
|---|---|
| API Url | https://payvo.site/api/deposits/check |
| Response | JSON |
Request Parameters
| Parameter | Description | Required |
|---|---|---|
| store_id | Your Payvo store ID. | Required |
| api_key | Server-side only. Never expose in browser code. | Required |
| phone | Customer wallet number. Alias: sender_number. | Wallet only |
| amount | Paid amount in EGP. | Required |
| user_name | Customer username or email. | Required |
| payment_method | Use instapay for InstaPay payments. | InstaPay only |
| reference | InstaPay reference number. | InstaPay only |
| invoice_id | Your invoice or order number. | Optional |
curl -X POST "https://payvo.site/api/deposits/check" \
-H "Content-Type: application/json" \
-d '{
"store_id": "YOUR_STORE_ID",
"api_key": "STORE_API_KEY_SERVER_ONLY",
"phone": "01XXXXXXXXX",
"amount": 100,
"user_name": "CUSTOMER_ACCOUNT_USERNAME",
"invoice_id": "INV-1001",
"reference": "checkout"
}'
{
"status": "success",
"data": {
"message": "Successful Transaction, Added 100.00 Balance",
"status": "success",
"code": 200,
"trans_id": "TXN_FROM_PROVIDER",
"transaction_number": "PROVIDER_REFERENCE",
"sender": "01XXXXXXXXX",
"amount": "100.00",
"currency": "EGP",
"time": "2026-09-02 11:16:13"
}
}
{
"status": "error",
"error": "TRANSACTION_NOT_FOUND",
"message": "No matching transaction found"
}
Store Callback
Payvo sends this to your configured callback URL after a successful match.
The callback is sent as application/x-www-form-urlencoded. The key is the same API key assigned to this store. Your endpoint should return HTTP 2xx and {"status":"success"} (or plain text success) after adding the payment.
| Callback field | Description |
|---|---|
| platform | Always payvo. |
| key | The same API key assigned to this store; validate it server-side. |
| action | addPayment |
| store_id | The Payvo store ID. |
| username | The customer's account username, copied from the request's user_name. |
| amount | Credit amount after conversion |
| paid_amount | Paid amount in EGP |
| from | Wallet number or InstaPay reference |
| trans_id | Provider transaction ID |
| transaction_number | Provider operation/reference number |
| invoice_id | Your invoice ID |
| reference | Your reference |
| affiliate_commission | 0 |
Your direct payment-check request to Payvo:
store_id + api_key + payment details (including user_name)
Payvo's automatic callback to your configured URL:
store_id + key (the same api_key) + customer and store account details
{
"status": "success"
}
{
"status": "fail",
"error": "your reason"
}
Payment Info
Wallets, rate, currencies, and InstaPay info.
| HTTP Method | GET |
|---|---|
| API Url | https://payvo.site/api/deposits/payment-info |
| Response | JSON |
Request Parameters
| Parameter | Description |
|---|---|
| store_id | Your public Payvo store ID. Required. |
| amount | Optional; used to calculate extotal. No API key is needed for this public, read-only endpoint. |
{
"status": "success",
"data": {
"number": "01XXXXXXXXX, 01YYYYYYYYY",
"rate": "50.42",
"extotal": 252.10,
"storecurrency": {
"code": "USD",
"name_en": "US Dollar",
"name_ar": "US Dollar",
"symbol": "$",
"symbol_ar": "$"
},
"yourcurrency": {
"code": "EGP",
"name_en": "Egyptian Pound",
"name_ar": "Egyptian Pound",
"symbol": "EGP",
"symbol_ar": "EGP"
},
"instapay": {
"enabled": true,
"payment_link": "https://ipn.eg/..."
}
}
}
Payment HTML Code
Paste into your payment page. The snippet needs your store_id only; keep the API key on your server.
Wallet Code
<div id="message"></div>
<p style=""><img src="https://payvo.site/assest/logo.jpg" style="display: inline-block; width: 170px; max-width: 100%;" class="img-responsive"></p>
<p style=""><font color="#008000">Today deposit rate</font><br></p>
<p style=""><b><font color="#008000">( 1 <span id="storecurrencyname_en"></span> = <span id="rate"></span> <span id="yourcurrencyname_en"></span> )</font></b></p>
<br>
<p style="">Our wallet numbers:<br></p>
<span id="storenumbers"></span>
<hr>
<p style="">Example: if you want to deposit 5 USD<br>send <span id="extotal"></span> EGP<br><br></p>
<p style="">1. Send the amount to one of the wallet numbers above</p>
<p style="">2. Enter the wallet number you sent from</p>
<p style="">3. Enter the amount you sent in EGP</p>
<p style=""><font color="#008000">4. Click Pay</font><br><br></p>
<p style=""><font color="#ff9c00">If the payment fails, wait 5 minutes then try again</font><br></p>
<div>If you have any issue, <a href="/tickets" target="_blank"><font color="#ff9c00">open a support ticket</font></a><br><br></div>
<form onsubmit="event.preventDefault(); PaymentCheck();">
<div class="form-group" style="display: block;text-align: right">
<label><span>Your wallet number</span></label>
<input class="form-control" value="" placeholder="01xxxxxxxxx" type="text" id="walletphone" oninput="this.value = this.value.replace(/[^0-9]/g, '')" inputmode="numeric" autocomplete="off" required="">
</div>
<div class="form-group" style="display: block;text-align: right">
<label><span>Amount sent in EGP</span></label>
<input class="form-control" value="" type="number" id="walletamount" autocomplete="off" step="0.01" required="">
</div>
<br>
<button type="submit" id="payButton" class="btn btn-block btn-big-primary">Pay</button>
</form>
<script data-store-id="YOUR_STORE_ID" data-payment-type="wallet" src="https://payvo.site/js/payvo_wallet_app.js"></script>
<div dir="rtl" style="text-align: right;">
<div id="message"></div>
<p style=""><img src="https://payvo.site/assest/logo.jpg" style="display: inline-block; width: 170px; max-width: 100%;" class="img-responsive"></p>
<p style=""><font color="#008000">سعر الإيداع اليوم</font><br></p>
<p style=""><b><font color="#008000">( 1 <span id="storecurrencyname_ar"></span> = <span id="rate"></span> <span id="yourcurrencyname_ar"></span> )</font></b></p>
<br>
<p style="">أرقام المحافظ المتاحة:<br></p>
<span id="storenumbers"></span>
<hr>
<p style="">مثال: إذا كنت تريد إيداع 5 USD<br>حوّل <span id="extotal"></span> EGP<br><br></p>
<p style="">1. حوّل المبلغ إلى أحد أرقام المحافظ بالأعلى</p>
<p style="">2. أدخل رقم المحفظة التي حولت منها</p>
<p style="">3. أدخل المبلغ الذي تم تحويله بالجنيه المصري</p>
<p style=""><font color="#008000">4. اضغط Pay</font><br><br></p>
<p style=""><font color="#ff9c00">إذا فشل الدفع انتظر 5 دقائق ثم حاول مرة أخرى</font><br></p>
<div>لو عندك أي مشكلة، <a href="/tickets" target="_blank"><font color="#ff9c00">افتح تذكرة دعم</font></a><br><br></div>
<form onsubmit="event.preventDefault(); PaymentCheck();">
<div class="form-group" style="display: block;text-align: right">
<label><span>رقم المحفظة التي حولت منها</span></label>
<input class="form-control" value="" placeholder="01xxxxxxxxx" type="text" id="walletphone" oninput="this.value = this.value.replace(/[^0-9]/g, '')" inputmode="numeric" autocomplete="off" required="">
</div>
<div class="form-group" style="display: block;text-align: right">
<label><span>المبلغ المحول بالجنيه المصري</span></label>
<input class="form-control" value="" type="number" id="walletamount" autocomplete="off" step="0.01" required="">
</div>
<br>
<button type="submit" id="payButton" class="btn btn-block btn-big-primary">دفع</button>
</form>
</div>
<script data-store-id="YOUR_STORE_ID" data-payment-type="wallet" src="https://payvo.site/js/payvo_wallet_app.js"></script>
InstaPay Code
<div id="message"></div>
<center>
<p style=""><img src="https://payvo.site/assest/logo.jpg" style="display: inline-block; width: 170px; max-width: 100%;" class="img-responsive"></p>
<p style=""><b>Pay with InstaPay</b></p>
<p style="">Payment number or link:</p>
<p id="payvo-instapay-target">Loading...</p>
<p style=""><font color="#ff9c00">After sending, enter the reference number and amount then click Pay</font></p>
</center>
<form onsubmit="event.preventDefault(); PaymentCheck();">
<div class="form-group" style="display: block;text-align: right">
<label><span>Reference number</span></label>
<input class="form-control" value="" type="text" id="instapayreference" autocomplete="off" required="">
</div>
<div class="form-group" style="display: block;text-align: right">
<label><span>Amount sent in EGP</span></label>
<input class="form-control" value="" type="number" id="instapayamount" autocomplete="off" step="0.01" required="">
</div>
<br>
<button type="submit" id="payButton" class="btn btn-block btn-big-primary">Pay</button>
</form>
<script data-store-id="YOUR_STORE_ID" data-payment-type="instapay" src="https://payvo.site/js/payvo_wallet_app.js"></script>
<div dir="rtl" style="text-align: right;">
<div id="message"></div>
<center>
<p style=""><img src="https://payvo.site/assest/logo.jpg" style="display: inline-block; width: 170px; max-width: 100%;" class="img-responsive"></p>
<p style=""><b>الدفع عبر InstaPay</b></p>
<p style="">رقم الدفع أو رابط الدفع:</p>
<p id="payvo-instapay-target">جاري التحميل...</p>
<p style=""><font color="#ff9c00">بعد التحويل أدخل الرقم المرجعي والمبلغ ثم اضغط Pay</font></p>
</center>
<form onsubmit="event.preventDefault(); PaymentCheck();">
<div class="form-group" style="display: block;text-align: right">
<label><span>الرقم المرجعي</span></label>
<input class="form-control" value="" type="text" id="instapayreference" autocomplete="off" required="">
</div>
<div class="form-group" style="display: block;text-align: right">
<label><span>المبلغ المحول بالجنيه المصري</span></label>
<input class="form-control" value="" type="number" id="instapayamount" autocomplete="off" step="0.01" required="">
</div>
<br>
<button type="submit" id="payButton" class="btn btn-block btn-big-primary">دفع</button>
</form>
</div>
<script data-store-id="YOUR_STORE_ID" data-payment-type="instapay" src="https://payvo.site/js/payvo_wallet_app.js"></script>
Error Messages
Common responses.
| Error | Meaning |
|---|---|
| MISSING_FIELD | A required parameter was not submitted. |
| INVALID_PHONE | Invalid wallet number. |
| INVALID_AMOUNT | Invalid amount. |
| STORE_DISABLED | Store is not active. |
| SUBSCRIPTION_EXPIRED | Store subscription is expired or inactive. |
| STORE_MISMATCH | API key does not belong to store_id. |
| DUPLICATE_TRANSACTION | invoice_id used with different details. |
| TRANSACTION_NOT_FOUND | No matching transaction was found yet. |
{
"status": "error",
"error": "MISSING_FIELD",
"message": "Missing required field: phone",
"field": "phone"
}
{
"status": "error",
"error": "TRANSACTION_NOT_FOUND",
"message": "No matching transaction found"
}