Checking payment status
Learn how to check if a payment link has been paid, view payment history, and verify transactions on the blockchain.
Using the ZynPay dashboard
The easiest way to check payment status is the merchant dashboard.
- Go to (e.g.
/dashboardin production).https://zynpay.com/dashboard - Connect your wallet (the same wallet you used as the merchant when creating links).
- You'll see a Payments table with:
- Date / time
- Description (from the payment link)
- Amount (USDC)
- Status
- Transaction hash (link to Basescan)
Typical statuses:
- Pending – Link created, no on-chain payment yet
- Completed – Payment confirmed on-chain, funds received
- Failed – Transaction failed or was rejected
- Refunded / Partially refunded – Merchant has sent a refund via the router
You can use the filters/search in the dashboard to find payments by invoice, amount, or date.
Optional: tracking payment IDs in your own system
If you generate links from your own app, you can keep a simple record like this:
// When you create a payment link:
const paymentLink = createPaymentLink({
merchant: "0xYourWalletAddress",
amount: 50,
description: "Invoice #123",
});
// You store something like:
{
id: "invoice_123",
link: paymentLink.url, // e.g. https://yourdomain.com/pay?p=...
amount: 50,
status: "pending"
}Later, you:
- Open to see whether that invoice is paid.
/dashboard - Or use the SDK to check status programmatically (see below).
Verifying payments on the blockchain
Every successful payment goes through the ZynPay router and emits a PaymentSplit event.
From the dashboard you can click the transaction hash to open a block explorer.
// Example: verify a tx from your dashboard
const txHash = "0x1234...";
// Base Sepolia:
https://sepolia.basescan.org/tx/0x1234...
// Base Mainnet (when live):
// https://basescan.org/tx/0x1234...On the explorer you'll see:
- ✅ Transaction status (Success / Failed)
- 💸 Amount of USDC transferred
- 🧾 Fee split (merchant share vs platform fee)
- ⛓ Block and confirmation count
Tip: Bookmark your merchant wallet on the explorer to quickly see all incoming payments.
Using the SDK instead of the dashboard (optional)
If you're a bit technical, you can fetch the same payment history that powers the dashboard using the SDK.
TypeScript example:
import { ZynPayClient } from "@zyntrialabs/zynpay-sdk";
const client = new ZynPayClient({
merchantWallet: "0xYourWalletAddress",
environment: "testnet",
});
const payments = await client.payments.listPayments();
for (const p of payments) {
const amount = Number(p.amountTotal) / 1e6;
console.log("Payment:", p.paymentRequestId);
console.log("Amount:", amount, "USDC");
console.log("TX:", p.txHash);
}You can use this to:
- Build your own dashboard
- Sync payments into your backend
- Export to CSV for accounting
For more details, see the TypeScript SDK and Python SDK reference pages.
Refunds (merchant-only)
If you need to refund a payment:
- Refunds are initiated by the merchant wallet.
- They send USDC back to the payer via the ZynPay router.
- The smart contract guarantees you can't refund more than the original amount.
Typical flow:
- Find the payment in the dashboard.
- Click Refund (or use your own admin UI).
- Confirm the refund transaction in your wallet.
Developers can use the SDK refund method directly (see SDK docs for details).