Checking payment status

Learn how to check if a payment link has been paid, view payment history, and verify transactions on the blockchain.

1

Using the ZynPay dashboard

The easiest way to check payment status is the merchant dashboard.

  1. Go to
    /dashboard
    (e.g.
    https://zynpay.com/dashboard
    in production).
  2. Connect your wallet (the same wallet you used as the merchant when creating links).
  3. 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.

2

Optional: tracking payment IDs in your own system

If you generate links from your own app, you can keep a simple record like this:

typescript
// 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
    /dashboard
    to see whether that invoice is paid.
  • Or use the SDK to check status programmatically (see below).
3

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.

typescript
// 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.

4

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:

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

5

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:

  1. Find the payment in the dashboard.
  2. Click Refund (or use your own admin UI).
  3. Confirm the refund transaction in your wallet.

Developers can use the SDK refund method directly (see SDK docs for details).