Introduction
Eppay is a secure and seamless cryptocurrency payment gateway designed to make USDT transactions effortless across multiple blockchain networks. Whether you're an individual user looking to make crypto payments or a developer integrating payment functionality into your application, Eppay provides the tools and infrastructure you need.
Note: Eppay currently supports USDT transactions across multiple blockchain networks, including Ethereum, Binance Smart Chain, Polygon, Avalanche, and more.
For Users
Send and receive USDT payments quickly and securely across multiple blockchain networks with minimal fees.
Learn moreFor Developers
Integrate Eppay's payment system into your applications with our simple API and developer-friendly tools.
Learn moreUser Guide
Getting Started
Create Your Wallet
Follow the on-screen instructions to create your secure wallet. Make sure to securely store your recovery phrase.
Fund Your Wallet
Add USDT to your wallet from another wallet or exchange. Make sure to have some native tokens (ETH, BNB, etc.) for transaction fees.
Set Up Security
Enable biometric authentication and create a PIN for additional security. These will be used to confirm transactions.
Receiving Payments (Get Paid)
The Eppay app makes it easy to request and receive payments through a simple QR code process:
-
1
Tap the "Get Paid" button in the app.
-
2
In the modal window that appears, select the blockchain network you wish to receive payment on.
-
3
Enter the amount of USDT (or your selected payment currency) you wish to receive.
Note: You can select your preferred payment currency in the app settings.
-
4
Tap "Generate QR Code" to create a payment request.
-
5
Share the generated QR code with the payer. They can scan it with their Eppay app to complete the payment.
-
6
You'll receive a notification when the payment is confirmed on the blockchain.
Tip: The QR code contains all the necessary payment information. The payer only needs to scan it with their Eppay app - no manual input required!
Sending Payments (Pay)
Making payments with Eppay is quick and straightforward:
-
1
Open the Eppay app and tap the "Pay" button.
-
2
Use your camera to scan the QR code presented by the payee.
The QR code contains all the necessary payment information including amount, recipient address, and network.
-
3
Review the payment details displayed on your screen.
-
4
Confirm the transaction with your PIN or biometric authentication.
-
5
Wait for the transaction to be processed on the blockchain.
-
6
Once confirmed, both you and the recipient will receive a notification of the successful payment.
Important: Always ensure you have sufficient USDT and native tokens (ETH, BNB, MATIC, etc.) to cover the payment amount and transaction fees on your selected network.
Developer Guide
Integration Overview
Eppay provides a simple API that allows developers to integrate cryptocurrency payment functionality into their applications. The integration process is straightforward and requires minimal setup.
Register and Get API Key
Create an account at eppay.io and generate your API key from the dashboard.
API Integration
Integrate the Eppay API into your application to generate payment requests and receive payment confirmations.
QR Code Generation
Generate and display QR codes for your users to scan with the Eppay app.
Payment Verification
Verify payment status through API calls and update your application accordingly.
Integration Flow
Here's the step-by-step process for integrating Eppay payments into your application:
-
1
Register and Get API Key
Sign up at eppay.io and navigate to the API section in your dashboard to generate your API key.
-
2
Create Payment Request
When a user initiates a payment in your application, send a POST request to the Eppay API endpoint (
https://eppay.io/generate-code
) with the required payment details:- Your API key
- Payment amount
- Recipient wallet address
- Network RPC address
- Token contract address
- Success callback URL
-
3
Receive Payment ID
The API will return a unique
paymentId
for this transaction. -
4
Generate QR Code
Create a QR code with the format:
product=uuideppay&id=PAYMENT_ID
wherePAYMENT_ID
is the unique identifier from the previous step. -
5
Display QR Code to User
Present the QR code to your user, who can scan it with the Eppay app to complete the payment.
-
6
Check Payment Status
While displaying the QR code, periodically check the payment status by sending GET requests to
https://eppay.io/payment-status/{paymentId}
. -
7
Process Payment Confirmation
When the status returns
true
, the payment has been successfully completed. Update your application accordingly and proceed with the user's order or service.
Note: The Eppay app handles all blockchain interactions, making the payment process seamless for your users without requiring them to have technical knowledge of cryptocurrency transactions.
API Reference
Generate Code
Creates a new payment request and returns a unique payment ID.
Request Parameters
Parameter | Type | Required | Description |
---|---|---|---|
apiKey | String | Yes | Your API key from the Eppay dashboard |
amount | String | Yes | Amount of USDT to request |
to | String | Yes | Wallet address of the beneficiary |
rpc | String | Yes | RPC address of the network |
token | String | Yes | USDT token address on the selected network |
success | String | Yes | Callback URL to receive success notification |
Request Example
{
"apiKey": "WlJSciIhgHkUzduirHj2AqIwxFvVGN",
"amount": "1",
"to": "0x8AB960B95aCCc5080c15721fdeA30e72C8251F0b",
"rpc": "https://chain.scimatic.net",
"token": "0x65C4A0dA0416d1262DbC04BeE524c804205B92e8",
"success": "https://eppay.io/payment-success"
}
Response
{
"paymentId": "8a020135-19b7-42df-be4b-1a8722ad0570"
}
QR Code Format
The QR code should be generated with the following format:
product=uuideppay&id=PAYMENT_ID
Where PAYMENT_ID
is the unique
identifier returned by the API.
Note: The product=uuideppay
part is a fixed string that identifies the QR code as an Eppay payment request. The Eppay app recognizes this format and processes the payment accordingly.
Check Payment Status
Checks the status of a payment using its payment ID.
Path Parameters
Parameter | Type | Description |
---|---|---|
paymentId | String (UUID) | The unique payment ID returned from the generate-code endpoint |
Response Example
{
"status": true
}
Important: While displaying the QR code to the user, you should periodically check the payment status using this endpoint. When the status returns true
, it indicates that the payment has been successfully processed.
Status Values
Value | Description |
---|---|
true (or 1) | Payment has been successfully completed |
false (or 0) | Payment is pending or has not been initiated |
Callback Response
When a payment is completed, Eppay also sends a POST request to the callback URL specified in the initial request.
{
"success": "success",
"message": "Payment updated successfully",
}
Code Examples
JavaScript Example
// 1. Create Payment Request
const apiUrl = 'https://eppay.io/generate-code';
const data = {
apiKey: "WlJSciIhgHkUzduirHj2AqIwxFvVGN",
amount: "1",
to: "0x8AB960B95aCCc5080c15721fdeA30e72C8251F0b",
rpc: "https://chain.scimatic.net",
token: "0x65C4A0dA0416d1262DbC04BeE524c804205B92e8",
success: "https://eppay.io/payment-success"
};
fetch(apiUrl, {
method: 'POST',
headers: {
'Content-Type': 'application/json'
},
body: JSON.stringify(data)
})
.then(response => response.json())
.then(data => {
console.log('Payment ID:', data.paymentId);
// 2. Generate QR code with the format: "product=uuideppay&id=" + data.paymentId
const qrCodeData = `product=uuideppay&id=${data.paymentId}`;
generateQRCode(qrCodeData);
// 3. Start checking payment status
checkPaymentStatus(data.paymentId);
})
.catch(error => console.error('Error:', error));
// Function to check payment status periodically
function checkPaymentStatus(paymentId) {
const statusUrl = `https://eppay.io/payment-status/${paymentId}`;
const statusElement = document.getElementById('payment-status');
// Check every 5 seconds
const statusCheck = setInterval(() => {
fetch(statusUrl)
.then(response => response.json())
.then(data => {
if (data.status === true) {
// Payment successful
clearInterval(statusCheck);
statusElement.textContent = 'Payment Successful!';
document.getElementById('success-message').classList.remove('hidden');
// Proceed with order fulfillment or next steps
console.log('Payment confirmed, proceeding with order...');
// Redirect to success page
window.location.href = '/payment-success?id=' + paymentId;
}
})
.catch(error => console.error('Error checking status:', error));
}, 5000);
// Set a timeout to stop checking after 30 minutes (optional)
setTimeout(() => {
clearInterval(statusCheck);
statusElement.textContent = 'Payment Timeout';
document.getElementById('timeout-message').classList.remove('hidden');
}, 30 * 60 * 1000);
}
// Example function using qrcode.js library
function generateQRCode(data) {
// Clear previous QR code if any
document.getElementById('qrcode').innerHTML = '';
// Generate new QR code
new QRCode(document.getElementById('qrcode'), {
text: data,
width: 256,
height: 256,
colorDark: '#000000',
colorLight: '#ffffff',
correctLevel: QRCode.CorrectLevel.H
});
}
PHP Example
<?php
// 1. Create Payment Request
$apiUrl = 'https://eppay.io/generate-code';
$data = [
"apiKey" => "WlJSciIhgHkUzduirHj2AqIwxFvVGN",
"amount" => "1",
"to" => "0x8AB960B95aCCc5080c15721fdeA30e72C8251F0b",
"rpc" => "https://chain.scimatic.net",
"token" => "0x65C4A0dA0416d1262DbC04BeE524c804205B92e8",
"success" => "https://eppay.io/payment-success"
];
$options = [
'http' => [
'header' => "Content-Type: application/json\r\n",
'method' => 'POST',
'content' => json_encode($data),
],
];
$context = stream_context_create($options);
$response = file_get_contents($apiUrl, false, $context);
if ($response === FALSE) {
// Handle error
die('Error creating payment request');
}
$result = json_decode($response, true);
$paymentId = $result['paymentId'];
// 2. Store payment ID in session for later verification
session_start();
$_SESSION['payment_id'] = $paymentId;
// 3. Display payment page with QR code
?>
<!DOCTYPE html>
<html>
<head>
<title>Payment Page</title>
<script src="https://cdnjs.cloudflare.com/ajax/libs/qrcodejs/1.0.0/qrcode.min.js"></script>
<style>
body {
font-family: 'Arial', sans-serif;
line-height: 1.6;
color: #333;
max-width: 600px;
margin: 0 auto;
padding: 20px;
}
h1 {
color: #225573;
text-align: center;
}
#qrcode {
display: flex;
justify-content: center;
margin: 30px 0;
}
#status {
text-align: center;
padding: 15px;
border-radius: 4px;
background-color: #f5f5f5;
margin-top: 20px;
}
.success {
background-color: #d4edda;
color: #155724;
}
.instructions {
margin-top: 20px;
padding: 15px;
background-color: #e8f4fd;
border-radius: 4px;
}
</style>
</head>
<body>
<h1>Complete Your Payment</h1>
<div class="instructions">
<p>Scan the QR code below with your Eppay app to complete the payment of 1 USDT.</p>
</div>
<div id="qrcode"></div>
<div id="status">Waiting for payment...</div>
<script>
// Generate QR code
var qrCode = new QRCode(document.getElementById("qrcode"), {
text: "product=uuideppay&id=8a020135-19b7-42df-be4b-1a8722ad0570",
width: 256,
height: 256,
colorDark: "#000000",
colorLight: "#ffffff",
correctLevel: QRCode.CorrectLevel.H
});
// Check payment status every 5 seconds
var checkStatus = setInterval(function() {
var xhr = new XMLHttpRequest();
xhr.open('GET', 'check_payment_status.php', true);
xhr.onload = function() {
if (xhr.status === 200) {
var response = JSON.parse(xhr.responseText);
if (response.status === true) {
clearInterval(checkStatus);
document.getElementById('status').innerHTML = 'Payment successful!';
document.getElementById('status').className = 'success';
// Redirect to success page after 2 seconds
setTimeout(function() {
window.location.href = 'payment-success.php';
}, 2000);
}
}
};
xhr.send();
}, 5000);
</script>
</body>
</html>
<?php
// check_payment_status.php
session_start();
$paymentId = $_SESSION['payment_id'];
$statusUrl = "https://eppay.io/payment-status/{$paymentId}";
$response = file_get_contents($statusUrl);
$result = json_decode($response, true);
// Return the status as JSON
header('Content-Type: application/json');
echo json_encode($result);
?>
Python Example
import requests
import json
import time
import qrcode
from PIL import Image
from flask import Flask, render_template, session, jsonify
app = Flask(__name__)
app.secret_key = 'your_secret_key'
@app.route('/create-payment', methods=['POST'])
def create_payment():
# 1. Create Payment Request
api_url = 'https://eppay.io/generate-code'
data = {
"apiKey": "WlJSciIhgHkUzduirHj2AqIwxFvVGN",
"amount": "1",
"to": "0x8AB960B95aCCc5080c15721fdeA30e72C8251F0b",
"rpc": "https://chain.scimatic.net",
"token": "0x65C4A0dA0416d1262DbC04BeE524c804205B92e8",
"success": "https://eppay.io/payment-success"
}
response = requests.post(api_url, json=data)
if response.status_code == 200:
result = response.json()
payment_id = result.get('paymentId')
# Store payment ID in session
session['payment_id'] = payment_id
# 2. Generate QR code
qr_data = f"product=uuideppay&id={payment_id}"
img = qrcode.make(qr_data)
img.save(f"static/qr_{payment_id}.png")
return render_template('payment.html', payment_id=payment_id)
else:
return jsonify({"error": "Failed to create payment"}), 500
@app.route('/check-status', methods=['GET'])
def check_status():
payment_id = session.get('payment_id')
if not payment_id:
return jsonify({"error": "No payment in progress"}), 400
status_url = f"https://eppay.io/payment-status/{payment_id}"
response = requests.get(status_url)
if response.status_code == 200:
return response.json()
else:
return jsonify({"error": "Failed to check payment status"}), 500
@app.route('/payment-success', methods=['GET'])
def payment_success():
payment_id = session.get('payment_id')
return render_template('success.html', payment_id=payment_id)
if __name__ == '__main__':
app.run(debug=True)
HTML template for the Python example:
<!-- templates/payment.html -->
<!DOCTYPE html>
<html>
<head>
<title>Eppay Payment</title>
<script src="https://code.jquery.com/jquery-3.6.0.min.js"></script>
<style>
body {
font-family: 'Arial', sans-serif;
max-width: 600px;
margin: 0 auto;
padding: 20px;
text-align: center;
}
h1 {
color: #225573;
margin-bottom: 20px;
}
.qr-container {
margin: 30px 0;
}
#status-message {
padding: 15px;
border-radius: 4px;
background-color: #f5f5f5;
margin-top: 20px;
}
.success {
background-color: #d4edda;
color: #155724;
}
.info {
background-color: #e8f4fd;
color: #0c5460;
padding: 15px;
border-radius: 4px;
margin-top: 20px;
}
</style>
</head>
<body>
<div class="container">
<h1>Complete Your Payment</h1>
<div class="info">
Scan the QR code with your Eppay app to complete the payment of 1 USDT.
</div>
<div class="qr-container">
<img src="{{ url_for('static', filename='qr_' + payment_id + '.png') }}" alt="Payment QR Code">
</div>
<div id="payment-status">
<div id="status-message">Waiting for payment...</div>
</div>
</div>
<script>
// Check payment status every 5 seconds
function checkPaymentStatus() {
$.ajax({
url: '/check-status',
type: 'GET',
success: function(data) {
if (data.status === true) {
$('#status-message').text('Payment successful!');
$('#status-message').addClass('success');
// Redirect to success page after 2 seconds
setTimeout(function() {
window.location.href = '/payment-success';
}, 2000);
} else {
// Continue checking if payment is not yet complete
setTimeout(checkPaymentStatus, 5000);
}
},
error: function() {
$('#status-message').text('Error checking payment status');
// Try again after a delay
setTimeout(checkPaymentStatus, 10000);
}
});
}
// Start checking payment status when the page loads
$(document).ready(function() {
checkPaymentStatus();
});
</script>
</body>
</html>
<!-- templates/success.html -->
<!DOCTYPE html>
<html>
<head>
<title>Payment Successful</title>
<style>
body {
font-family: 'Arial', sans-serif;
max-width: 600px;
margin: 0 auto;
padding: 20px;
text-align: center;
}
h1 {
color: #225573;
margin-bottom: 20px;
}
.success-container {
background-color: #d4edda;
color: #155724;
padding: 20px;
border-radius: 5px;
margin: 30px 0;
}
.success-icon {
font-size: 48px;
color: #28a745;
margin-bottom: 15px;
}
.order-details {
background-color: #f8f9fa;
padding: 15px;
border-radius: 5px;
margin-top: 20px;
text-align: left;
}
</style>
</head>
<body>
<div class="container">
<h1>Payment Successful!</h1>
<div class="success-container">
<div class="success-icon">✓</div>
<p>Your payment of 1 USDT has been successfully processed.</p>
<p>Payment ID: 8a020135-19b7-42df-be4b-1a8722ad0570</p>
</div>
<div class="order-details">
<h3>Transaction Details:</h3>
<p>Amount: 1 USDT</p>
<p>Network: Scimatic</p>
<p>Date: {{ now().strftime('%Y-%m-%d %H:%M:%S') }}</p>
</div>
<p>Thank you for using Eppay!</p>
<a href="/">Return to Home</a>
</div>
</body>
</html>
Complete Integration Workflow
Here's a step-by-step guide combining all the key elements of integrating Eppay payments:
- Create a payment request using the Eppay API, providing your API key, amount, recipient address, and blockchain details.
- Receive a unique payment ID from the API response.
-
Generate a QR code with the format
product=uuideppay&id=PAYMENT_ID
. - Display the QR code to your user for scanning with the Eppay app.
- Poll the payment status endpoint periodically to check if the payment has been completed.
-
Process the payment confirmation when the status returns
true
, updating your application accordingly. - Handle the callback notification sent to your success URL for redundant confirmation.
Pro Tip: Always implement both the polling mechanism and callback handling for maximum reliability in detecting completed payments.
Supported Networks
Eppay currently supports USDT transactions on the following blockchain networks:

Ethereum
The original smart contract platform with widespread adoption.

BSC
Binance Smart Chain offers fast and low-cost transactions.

Polygon
Layer 2 scaling solution for Ethereum with high throughput.

Avalanche
Fast confirmation times with high scalability.

Fantom
DAG-based smart contract platform with fast finality.

Arbitrum
Layer 2 rollup solution for Ethereum with lower fees.

Cronos
EVM compatible chain from Crypto.com.

Scimatic
Specialized network for seamless payments.
Note: To find the RPC URLs and token addresses for these networks, visit chainlist.org.
Security
Eppay implements multiple layers of security to protect your funds and data:
Private Key Management
All private keys are stored securely on users' devices and are never transmitted to Eppay servers. Keys are encrypted using industry-standard algorithms.
Biometric Authentication
The Eppay mobile app supports biometric authentication (fingerprint/Face ID) for accessing the app and confirming transactions, adding an extra layer of security.
Blockchain Security
All transactions are secured by the respective blockchain networks. Eppay leverages the inherent security features of blockchain technology to ensure transaction integrity.
API Security
For developers, the Eppay API uses API keys for authentication and secure HTTPS connections for all communications. Sensitive data is never exposed in API responses.
Security Best Practices:
- Never share your recovery phrase or private keys with anyone
- Keep your app updated to the latest version
- Always verify transaction details before confirming
- Use a secure internet connection when making transactions
- Enable all available security features in the app
Frequently Asked Questions
Currently, Eppay supports USDT (Tether) payments across multiple blockchain networks. We plan to add support for more cryptocurrencies in the future.
Eppay charges minimal fees for transactions. The exact fee depends on the blockchain network you choose to use. We display the network fee before you confirm any transaction, so there are no surprises.
Transaction times vary depending on the blockchain network used. Most transactions are confirmed within seconds to minutes, with networks like BSC, Polygon, and Avalanche typically processing transactions faster than Ethereum.
Absolutely! Eppay is designed for both individual and business use. It's perfect for merchants, freelancers, and businesses of all sizes who want to accept cryptocurrency payments. The API makes it easy to integrate with your existing systems.
Eppay utilizes industry-leading security measures, including encryption for all transactions and personal data. Your private keys remain on your device and are never transmitted to our servers. Additionally, you can enable biometric authentication for an extra layer of security.
If you've saved your 12-word recovery phrase, you can restore your wallet on a new device. Without this phrase, your funds cannot be recovered, which is why it's crucial to store it securely when you first create your wallet.
Integration is straightforward. First, register for an account at eppay.io and obtain your API key. Then, use our API to generate payment IDs, create QR codes, and verify payment status. We provide detailed documentation and code examples in multiple programming languages to help you get started quickly.
There are two ways to confirm payment completion: (1) You can periodically check the payment status using our API endpoint, which will return true
when the payment is complete, and (2) We'll send a notification to your specified callback URL with the transaction details when the payment is confirmed on the blockchain.
Get Started with Eppay
Ready to integrate crypto payments?
Join thousands of businesses and individuals who trust Eppay for their cryptocurrency payment needs.