Introduction
Epusdt (Easy Payment USDT) is a self-hosted payment middleware for TRON / TRC20 USDT checkout flows.
It is designed for developers, merchants, and operators who want to run their own payment service, create orders through the live /payments/... APIs, host a checkout page on their own domain, and receive asynchronous payment callbacks without relying on a custodial third-party gateway.
Epusdt is open source under the GPLv3 License.
What Epusdt does
A typical payment flow looks like this:
- Your system calls the create-order API.
- Epusdt allocates a receiving address and payable amount.
- The API returns a
payment_urlfor the hosted checkout page. - The customer pays on-chain.
- Epusdt detects the matching transfer and marks the order as paid.
- Epusdt sends an asynchronous callback to your merchant system.
Core capabilities
- Self-hosted service — deploy on your own server and keep payment infrastructure under your control.
- Hosted checkout page — built-in
/pay/checkout-counter/{trade_id}page for end-user payment. - HTTP create-order APIs — current routes live under
/payments/..., including/payments/epusdt/v1/order/create-transaction. - Multi-address rotation — supports multiple receiving addresses, together with unique-amount reservation, to improve concurrency.
- Asynchronous callbacks — notifies your business system after successful payment; callback success is based on HTTP
200plus exact bodyok. - Telegram bot support — optional notification and basic operator workflow integration.
- Flexible deployment — Docker-first, with source builds also possible; a dedicated domain or subdomain generally matches the current route layout best.
Current scope and limitations
The current source code is intentionally focused:
- Primary payment scenario: USDT on TRON / TRC20
- Current chain listeners: TRX native transfers and TRC20 USDT transfers are implemented in the source
- Hosted routes: root-relative paths such as
/payments/...and/pay/... - Public base URL:
app_uriis used to generate absolute checkout links; it is not an internal route prefix - Subpath deployments: if you want
/epusdt-style URLs, handle that in a reverse proxy and test carefully
Supported runtime facts
Based on the current source and deployment examples:
- Language/runtime: Go application
- HTTP listen default:
:8000 - Database options:
sqlite,mysql, orpostgres - Recommended external dependency: accessible TronGrid API credentials for TRON / TRC20 chain queries
- Deployment style: Docker example is provided; source builds are also supported
Important integration note
Keep these paths separate in your integration:
- Create order API →
/payments/... - Hosted checkout page →
/pay/checkout-counter/{trade_id} - Checkout status polling →
/pay/check-status/{trade_id}
The API returns a payment_url; the service does not redirect your create-order request directly into checkout.
