Eppay Documentation

Complete guide to integrating and using the Eppay crypto payment gateway

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 more

For Developers

Integrate Eppay's payment system into your applications with our simple API and developer-friendly tools.

Learn more

User Guide

Getting Started

1

Download the App

Download Eppay from the App Store or Google Play Store.

2

Create Your Wallet

Follow the on-screen instructions to create your secure wallet. Make sure to securely store your recovery phrase.

3

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.

4

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. 1

    Tap the "Get Paid" button in the app.

  2. 2

    In the modal window that appears, select the blockchain network you wish to receive payment on.

  3. 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. 4

    Tap "Generate QR Code" to create a payment request.

  5. 5

    Share the generated QR code with the payer. They can scan it with their Eppay app to complete the payment.

  6. 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. 1

    Open the Eppay app and tap the "Pay" button.

  2. 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. 3

    Review the payment details displayed on your screen.

  4. 4

    Confirm the transaction with your PIN or biometric authentication.

  5. 5

    Wait for the transaction to be processed on the blockchain.

  6. 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. 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. 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. 3

    Receive Payment ID

    The API will return a unique paymentId for this transaction.

  4. 4

    Generate QR Code

    Create a QR code with the format: product=uuideppay&id=PAYMENT_ID where PAYMENT_ID is the unique identifier from the previous step.

  5. 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. 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. 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

POST https://eppay.io/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

GET https://eppay.io/payment-status/{paymentId}

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:

  1. Create a payment request using the Eppay API, providing your API key, amount, recipient address, and blockchain details.
  2. Receive a unique payment ID from the API response.
  3. Generate a QR code with the format product=uuideppay&id=PAYMENT_ID.
  4. Display the QR code to your user for scanning with the Eppay app.
  5. Poll the payment status endpoint periodically to check if the payment has been completed.
  6. Process the payment confirmation when the status returns true, updating your application accordingly.
  7. 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

Ethereum

The original smart contract platform with widespread adoption.

Binance Smart Chain

BSC

Binance Smart Chain offers fast and low-cost transactions.

Polygon

Polygon

Layer 2 scaling solution for Ethereum with high throughput.

Avalanche

Avalanche

Fast confirmation times with high scalability.

Fantom

Fantom

DAG-based smart contract platform with fast finality.

Arbitrum

Arbitrum

Layer 2 rollup solution for Ethereum with lower fees.

Cronos

Cronos

EVM compatible chain from Crypto.com.

Scimatic

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.